Jak można przetestować połączenie internetowe bez pingowania jakiejś strony internetowej? Mam na myśli, co jeśli jest połączenie, ale strona nie działa? Czy istnieje sprawdzenie połączenia ze światem?
bash
connection
ping
Lauriys
źródło
źródło
Odpowiedzi:
Bez pingów
-q : tryb ciszy
--spider : nie odbieraj, po prostu sprawdź dostępność strony
$? : kod powrotu powłoki
0 : kod powłoki „Wszystko OK”
Bez wget
źródło
nc
aby upewnić się, że upłynie limit czasu . coś w stylunc google.com 80 -w 10
Pinguj domyślną bramę:
źródło
function ping_gw() { ... && return 0 || return 1 }
a następnie użyć w następujący sposób:ping_gw || (echo "no network, bye" && exit 1)
ifconfig down wlan0
i nadal mam domyślną bramę i można ją pingować, mimo że w rzeczywistości nie mogę dotrzeć do świata zewnętrznego.Super Podziękowania dla użytkownika somedrew za ich post tutaj: https://bbs.archlinux.org/viewtopic.php?id=55485 dnia 2008-09-20 02:09:48
Oto mój skrypt do testowania połączenia sieciowego innego niż pętla zwrotna. Używam poniższego w innym skrypcie, który mam do okresowego testowania, czy moja witryna jest dostępna. Jeśli NIE jest dostępne, wyskakujące okienko ostrzega mnie o problemie.
Poniższy skrypt uniemożliwia mi otrzymywanie wyskakujących wiadomości co pięć minut, gdy mój laptop nie jest podłączony do sieci.
Uwaga dla nowych użytkowników basha: ostatnia instrukcja „if” sprawdza, czy NIE [!] Jest w trybie online i kończy działanie, jeśli tak jest. Aby uzyskać więcej informacji, zobacz man bash i wyszukaj wyrażenie „Wyrażenia można łączyć”.
PS Wydaje mi się, że ping nie jest tutaj najlepszym rozwiązaniem, ponieważ ma na celu przetestowanie połączenia z określonym hostem, a NIE sprawdzenie, czy istnieje połączenie z jakąkolwiek siecią .
PPS Powyższe działa na Ubuntu 12.04. / Sys może nie istnieć w niektórych innych dystrybucjach. Zobacz poniżej:
źródło
cat /sys/class/net/wwan0/carrier
Nie działa na ubuntu 14.04 LTS.2>/dev/null
po,cat /sys/class/net/$interface/carrier
aby nie wyświetlać błędów w przypadku wyłączenia sieci.Działa to zarówno w systemie MacOSX, jak i Linux:
źródło
ping: invalid option -- w
)fping google.com
lub po prostufping 8.8.8.8
robi magię z bonusem, otrzymujesz kod statusu bez potrzeby testowania ("google.com is alive
") ...W Bash, używając jego opakowania sieciowego przez / dev / { udp , tcp } / host / port :
(
:
to Bash no-op, ponieważ chcesz tylko przetestować połączenie, ale nie przetwarzać).źródło
Napisałem wcześniej skrypty, które po prostu używają telnetu do łączenia się z portem 80, a następnie przesyłają tekst:
a następnie dwie sekwencje CR / LF.
Pod warunkiem, że otrzymasz odpowiedź HTTP, możesz ogólnie założyć, że witryna działa.
źródło
Najlepsza odpowiedź pomija fakt, że możesz mieć idealnie stabilne połączenie z domyślną bramą, ale nie oznacza to automatycznie, że możesz rzeczywiście dotrzeć do czegoś w Internecie. OP pyta, jak może przetestować połączenie ze światem. Dlatego proponuję zmienić pierwszą odpowiedź, zmieniając adres IP bramy na znany adres IP (xyzw), który znajduje się poza siecią LAN.
Tak więc odpowiedź brzmiałaby:
Usunięcie również niekorzystnych znaków odwrotnych do podstawiania poleceń [1] .
Jeśli chcesz tylko upewnić się, że jesteś połączony ze światem przed wykonaniem kodu, możesz również użyć:
źródło
upewnij się, że Twoja sieć zezwala na ruch TCP przychodzący i wychodzący, możesz odzyskać publiczny adres IP za pomocą następującego polecenia
źródło
Wykonaj następujące polecenie, aby sprawdzić, czy witryna internetowa działa i jaki komunikat o stanie wyświetla serwer sieciowy:
$ curl -Is http://www.google.com |
head -1 HTTP/1.1 200 OK
Kod stanu „200 OK” oznacza, że żądanie powiodło się i witryna internetowa jest osiągalna.
źródło
curl -Is http://www.google.com | head -1 | grep 200; if [[ $? -eq 0 ]]; then; echo "Online"; else; echo "Offline"; fi;
Jeśli twój lokalny serwer nazw jest wyłączony,
to łatwy do zapamiętania adres IP, który jest zawsze aktywny (w rzeczywistości jest to nawet serwer nazw).
źródło
Top głosowało odpowiedź nie działa dla MacOS więc dla tych na mac, ja z powodzeniem przetestowane w ten sposób:
testowano na MacOS High Sierra 10.12.6
źródło
route
polecenie na,route -n get default 2> /dev/null | grep gateway
aby uniknąć zapisywania błędu w stderr w trybie offline.Ten skrypt bash stale sprawdza dostęp do Internetu i wydaje dźwięk, gdy Internet jest dostępny.
źródło
najkrótsza droga:
fping 4.2.2.1
=> „4.2.2.1 żyje”Wolę to, ponieważ jest to szybsze i mniej szczegółowe wyjście niż
ping
, wadą jest to, że będziesz musiał go zainstalować.możesz użyć dowolnego publicznego DNS zamiast określonej witryny internetowej.
fping -q google.com && echo "do something because you're connected!"
-q
zwraca kod zakończenia, więc pokazuję tylko przykład uruchomienia czegoś, co jest online.do zainstalowania na komputerze Mac:
brew install fping
; na ubuntu:sudo apt-get install fping
źródło
Ping został zaprojektowany tak, aby robić dokładnie to, czego szukasz. Jeśli jednak witryna blokuje echo ICMP, zawsze możesz wykonać telnet na porcie 80 jakiejś lokacji, wget lub curl.
źródło
Sprawdzanie strony indeksu Google to inny sposób:
źródło
Podobnie jak odpowiedź @ Jesse , ta opcja może być znacznie szybsza niż jakiekolwiek rozwiązanie używające
ping
i być może nieco bardziej wydajna niż odpowiedź @ Jesse .Wyjaśnienie:
To polecenie używa
find
with-exec
do uruchamiania polecenia na wszystkich plikach, które nie są wymienione*lo*
w/sys/class/net/
. Powinny to być łącza do katalogów zawierających informacje o dostępnych interfejsach sieciowych na komputerze.Uruchomione polecenie jest
sh
poleceniem, które sprawdza zawartość plikucarrier
w tych katalogach. Wartość$interface/carrier
ma 3 znaczenia - Cytując :Pierwsza opcja nie została uwzględniona w odpowiedzi @ Jesse .
sh
Komenda jest rozłożony na zewnątrz:cat
jest używany do sprawdzania zawartościcarrier
i przekierowywania wszystkich danych wyjściowych na standardowe wyjście, nawet jeśli nie powiedzie się, ponieważ plik nie jest czytelny. Jeśligrep -q
znajdzie"1"
wśród tych plików, oznacza to, że jest podłączony co najmniej 1 interfejs. Kod wyjściagrep -q
będzie ostatecznym kodem wyjścia.Stosowanie
Na przykład, używając statusu wyjścia tego polecenia, możesz go użyć do uruchomienia gnubiff w swoim
~/.xprofile
tylko wtedy, gdy masz połączenie z Internetem.Odniesienie
/sys/class/net/
źródło
Pong nie oznacza, że usługa internetowa na serwerze jest uruchomiona; oznacza to po prostu, że serwer odpowiada na echo ICMP. Poleciłbym użyć curl i sprawdzić jego wartość zwracaną.
źródło
Jeśli Twoim celem jest sprawdzenie dostępu do Internetu , wiele z istniejących odpowiedzi na to pytanie jest błędnych. Kilka rzeczy, o których powinieneś wiedzieć:
Mając to na uwadze, uważam, że najlepszą strategią jest skontaktowanie się z kilkoma witrynami za pośrednictwem połączenia HTTPS i zwrócenie wartości true, jeśli którakolwiek z tych witryn odpowie.
Na przykład:
Stosowanie:
Kilka uwag na temat tego podejścia:
źródło
if wait $pid;
. Nie mam pojęcia, dlaczego to nie działa w twoim systemie. Czy na pewno używasz basha?wait
i rozumiem, że kod powrotu jest rzeczywiście testowany. Ponownie skopiowałem Twój kod i dziś działa - ups! Musiałem coś schrzanić ostatnim razem, chociaż nie rozumiem, co i jak. Niemniej jednak mea culpa. Przeprosiny.Za pomocą tego polecenia:
.
źródło
Jest to znacznie szybsze niż jakiekolwiek zamieszczone tutaj rozwiązanie i może być również używane do testowania określonego hosta .
Sztuczka polega na rozwiązaniu adresu IP przy użyciu mniej obciążonego solwera DNS niż ten używany przez
ping
:źródło