Tuesday, April 27, 2010

InetAddress.isReachable() jest do bani

Napisałem mały program testujący czy klient "widzi" prawidłowo adres i porty naszego serwera aplikacyjnego. Zdarza się, że Firewalle klientów skutecznie blokują łączność.

Zależało mi, aby w pierwszym kroku "spingować" hosta. Niestety wczoraj odkryliśmy buga, bo polegałem na metodzie InetAddress.isReachable(). Tymczasem sposób jest do chrzanu, bo implementacja nie pinguje a odpytuje usługę echo, która stoi na porcie 7. Wielu adminów blokuje tego typu usługi, starając się maksymalnie uszczelnić serwery. U nas w firmie też i dlatego nasi klienci dostawali informację, że istnieje brak łączności z jednym z serwerów.

Nie dostarczę dzisiaj rozwiązania, z braku czasu, ale wrócę do tematu kiedyś.
Poniżej wadliwy kod:

[sourcecode type="java"]

final String host = "zdanek.ostrejezyki.pl";
final int timeOut = 3000;

final boolean status = InetAddress.getByName(host).isReachable(timeOut);

if (status == false) {
throw new IOException("Brak lacznosci z " + host);
}

[/sourcecode]

No comments:

Post a Comment