Użyj Linux ping w Cygwin

8

Muszę pracować ze skryptem, który używa pingpolecenia ze zwykłą składnią Linuksa, ani domyślny pakiet Cygwin, ani narzędzie ping systemu Windows nie będzie działać. Na razie załatałem skrypt, aby używał wersji Windows (z pewnym trudem; plik wykonywalny Windows nie zapewnia użytecznych kodów powrotu, więc muszę przeanalizować dane wyjściowe), ale chciałbym, aby nie wchodziło w grę kompatybilność z pudełkami i dodatkowe funkcje pingowania Linuksa. Zanim przejdę dalej, pozwól mi stwierdzić, że korzystam z Cygwin w trybie administratora; to nie jest kwestia przywilejów. To problem z wersjami.

Domyślne pingpolecenie Cygwin jest wymienione w wersji „1.0-1” w menedżerze instalacji, w pakiecie „ping: podstawowe narzędzie sieciowe do testowania łączności sieci IP”. Bez argumentów wyświetla:

Usage:  ping [-dfqrv] host [packetsize [count [preload]]]

a opis strony podręcznika zaczyna się od „Internet DARPA jest dużą i złożoną agregacją sprzętu sieciowego” , co dla mnie brzmi jak trochę nieaktualne. To jest wersja zainstalowana w /bin/ping.

pingPolecenie systemu Windows znajduje się pod adresem $SYSTEMROOT/system32/pingi wyświetla następujący komunikat przy wywołaniu bez parametrów.

Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
        [-r count] [-s count] [[-j host-list] | [-k host-list]]
        [-w timeout] target_name

Jest to z pewnością bardziej bogaty w funkcje ping (w szczególności obejmuje on limity czasu, co jest dla mnie ważne), ale nie jest to wersja dostępna w nowoczesnej instalacji Linuksa:

ping [ -LRUbdfnqrvVaAB] [ -c count] [ -i interval] [ -l preload] [ -p pattern] 
     [ -s packetsize] [ -t ttl] [ -w deadline] [ -F flowlabel] [ -I interface] 
     [ -M hint] [ -Q tos] [ -S sndbuf] [ -T timestamp option] [ -W timeout] 
     [ hop ...] destination

udokumentowane tutaj online . Wydaje mi się, że nie mogę znaleźć odniesień do cygwin w wersji ping, z wyjątkiem odniesienia do Cygwin.

Znalazłem ten starożytny wątek e-mail, który opisuje wczesną wersję Cygwin bez polecenia ping. Nie znalazłem żadnej wersji iputils zaprojektowanej dla systemu Windows.

Kevin Vermeer
źródło

Odpowiedzi:

3

Ty też możesz

  • spróbuj zbudować ping ze źródła, jest to część pakietu iputils . Ale budowanie rzeczy na cygwinie może być dość kłopotliwe.

Lub (i najpierw spróbowałbym tego)

Nifle
źródło
Dzięki, wygląda na to, że pierwsza opcja będzie dla mnie działać lepiej, ponieważ jednym z wymaganych wymagań jest składnia wersji iputils, więc próba kolejnej implementacji ping nie pomoże. To powiedziawszy, wątpię, czy jestem pierwszym, który na to wpadł, więc poczekam na wypadek, gdyby ktoś już tego próbował.
Kevin Vermeer
Nawiasem mówiąc, iputils nie opublikował tagu od prawie dwóch lat, ale wprowadzono pewne poprawki do obsługi IPv6 w ich repozytorium git, co było trochę trudne do znalezienia, ale znajduje się na `git: //git.linux- ipv6.org / gitroot / iputils.git`. Mam nadzieję, że komuś pomoże. Kiedy skończę z tym, opublikuję łatkę, jest jeszcze sporo do zrobienia, ale nie wydaje się to nie do pokonania.
Kevin Vermeer
1
Jeśli dotrzesz gdziekolwiek z budowaniem iputils dla Cygwin, mocno podejrzewam, że reszta społeczności Cygwin też chętnie by to zrobiła.
me_i
@me_and - Zdecydowanie zwolnię, jeśli mi się uda. Jednak podczas gdy kilka pierwszych plików skompilowało się dobrze, po prostu zmieniając #include <linux/filename.h>na #include <cygwin/filename.h>i tym podobne, później odkryłem, że w sterownikach gniazd Cygwin brakuje również funkcji wymaganych przez iputils. Dla Cygwina nie chodzi tylko o budowanie iputils, ale także o Cygwin do pracy z iputils. Spróbuję później, jeśli będę miał trochę wolnego czasu.
Kevin Vermeer