Znalazłem skrypty, które mówią, że sprawdzają łączność z Internetem. Niektórzy sprawdzają adres IP, jeśli interfejs jest włączony, ALE nie sprawdza połączenia z Internetem. Znalazłem takie, które używają ping w ten sposób: if [ 'ping google.com -c 4 | grep time' != "" ]; then
ale czasami może to być niewiarygodne, ponieważ sam ping może się zawiesić z jakiegoś powodu (np. Czekając na zablokowane IO).
Wszelkie sugestie na temat właściwego / niezawodnego sposobu sprawdzania łączności z Internetem za pomocą skryptów? Czy muszę korzystać z niektórych pakietów?
Musi być w stanie okresowo sprawdzać, cron
na przykład, a następnie zrobić coś, gdy połączenie zostanie zerwane, jak na przykład invokeifup --force [interface]
$ ethtool <dev> | awk '$0 ~ /link detected/{print $3}'
>/dev/null
>/dev/null
przekierowuje standardowe wyjście do/dev/null
Z urządzeniem zerowego , który unieszkodliwia go, ponieważ nie jest pożądany w tym przypadku (wszyscy dbamy o to wartości wyjściowe poleceń). Zamiast tego zecho
linii pobierane są bardziej odpowiednie dane wyjściowe .Gorąco polecam przed użyciem
ping
w celu ustalenia łączności. Jest zbyt wielu administratorów sieci, którzy wyłączają ICMP (protokół, którego używa) ze względu na obawy związane z atakami ping powodziowymi pochodzącymi z ich sieci.Zamiast tego korzystam z szybkiego testu niezawodnego serwera na porcie, którego można się spodziewać:
Korzysta z netcat (
nc
) w trybie skanowania portów , szybkim wciskaniu (-z
to tryb zero-I / O [używany do skanowania] ) z szybkim limitem czasu (-w 1
trwa maksymalnie jedną sekundę). Sprawdza Google na porcie 443 (HTTPS).Użyłem HTTPS zamiast HTTP jako próby ochrony przed niewoli portali i przezroczystych serwerów proxy, które mogą odpowiadać na porcie 80 (HTTP) dla dowolnego hosta. Jest to mniej prawdopodobne w przypadku korzystania z portu 443, ponieważ wystąpiłoby niedopasowanie certyfikatu, ale nadal tak się dzieje.
Jeśli chcesz się temu przeciwstawić, musisz zweryfikować bezpieczeństwo połączenia:
Spowoduje to sprawdzenie połączenia (zamiast oczekiwania na przekroczenie limitu czasu przez openssl), a następnie nawiązanie połączenia SSL, wpisanie na etapie weryfikacji. Po cichu kończy działanie („prawda”), jeśli weryfikacja była „OK” lub kończy się z błędem („fałsz”), wówczas zgłaszamy znalezisko.
źródło
-d
np.,nc -dzw1
aby nie nasłuchiwał STDIN i zawieszał się w skrypcie w nieskończoność. i może użyć 8.8.8.8 zamiast google.com, aby zapisać wyszukiwanie.nc -dzw1 8.8.8.8 443
-d
w swoich skryptach, być może dlatego, że nigdy nie miałem nieużywanego potoku. To powinno być bezpieczne do dodania.-w 1
nadal kosztuje sekundę, gdy nie ma łączności, choć być może masznc
gdzieś jakiś niejasny problem. Jeśli masz zainstalowaną najnowszą wersję nmap, możesz zamiast tego zrobić,ncat --send-only --recv-only -w 334ms
aby skrócić ten czas awarii do jednej trzeciejnc
(odkryłem, że 334 ms to dobry czas oczekiwania).Stworzyłem skrypt, który wykorzystuje wiele sposobów sprawdzania połączenia internetowego (ping, nc i curl, dzięki Adamowi Katzowi, Gillesowi i Archemarowi). Mam nadzieję, że ktoś uzna to za przydatne. Możesz go edytować według własnych upodobań / zoptymalizować.
Sprawdza bramę, DNS i połączenie internetowe (używając curl, nc i ping). Umieść to w pliku, a następnie uruchom go (zwykle
sudo chmod +x filename
)źródło
$GW
?/sbin/ip route | awk '/default/ { print $3 }'
pobiera adres bramy z (mam nadzieję) głównego interfejsu. Jeśli chcesz, możesz samodzielnie ustawić adres IP bramy.w Internecie jest wiele adresów IP, lekkim podejściem jest pingowanie niektórych z nich
bardziej kompletną odpowiedzią może być uzyskiwanie stron
wget
gdzie
źródło
dzięki twojemu wkładowi od każdego użytkownika i innej sieci udało mi się ukończyć ten skrypt w ciągu 3 dni. i zostawię go za darmo dla jego użycia.
ten skrypt automatyzuje odnawianie adresu IP w przypadku utraty połączenia, robi to uporczywie.
pastebin: https://pastebin.com/wfSkpgKA
źródło
eth0
, ale nie jest to wspomniane.) (2) Używanie języka angielskiego. (3) doprowadzanie wszystkich zmiennych powłoki (na przykład"$HOST"
,"$LINE1"
i"$LOG"
) w cudzysłowach. (4) UstawLINE2
albo nie używaj go. (Podejrzewam, że maszLINE1
/LINE2
mylić zinet4
/inet6
.) ... (ciąg dalszy)