Vraag:
Kan geen verbinding maken met internet in bash met Mac OS
Zeyan Zhong
2019-05-28 19:15:47 UTC
view on stackexchange narkive permalink

Mijn browser werkt echter perfect met het gebruik van internet, toen ik dit commando probeerde te gebruiken in bash:

  ping -q -w1 -c1 google.com &> / dev / null && echo online || echo offline
 

Het geeft me "offline" resultaten. Ik heb ook een andere in een ander netwerk geprobeerd:

  ping -c 3 www.google.com
 

Het retourneert:

  PING www.google.com (74.125.193.147): 56 databytes
Time-out aanvragen voor icmp_seq 0
Time-out aanvragen voor icmp_seq 1

--- www.google.com ping-statistieken ---
3 pakketten verzonden, 0 pakketten ontvangen, 100,0% pakketverlies
 

Al deze lijken erop te wijzen dat de terminal geen verbinding kon maken met internet. Ik heb geprobeerd wifi en LAN-kabel te gebruiken, de resultaten zijn hetzelfde.

Ik moet een programma draaien dat verbinding met een server vereist, ik vraag me af of je oplossingen hebt om het weer online te zetten. Ik gebruik macOS 10.13 en probeer vanaf de opdrachtregel te bepalen of een netwerkverbinding mogelijk is.

Is dit mogelijk?

** Bewerk ** uw vraag om dit op te lossen.Voeg ook toe welke browser u gebruikt en de uitvoer van `curl https: // google.com /`.
Ik gebruik chroom.Hier is de uitvoer 301 Verplaatst

301 Verplaatst

Het document is verplaatst hier .
Als `curl` werkt, vermoed ik dat uw ISP heeft gefilterd
Drie antwoorden:
bmike
2019-05-28 22:34:25 UTC
view on stackexchange narkive permalink

Ik gebruik liever het hulpprogramma voor systeemconfiguratie om te testen op bereikbaarheid in plaats van ping / host / nslookup of een andere proxy te gebruiken om te bepalen of een netwerkentiteit al dan niet bereikbaar is.

  scutil -r google.com
Bereikbaar
 

De voordelen hiervan zijn dat als je VPN-verbindingen, inbel-, modem- of routeringsconflicten hebt, dit daadwerkelijk zal testen of je het apparaat kunt bereiken en niet alleen de in de cache opgeslagen hostnaam, enz. ervaring. (het is ook een stuk moeilijker om de indirectie, bestanden, logica te verknoeien en je krijgt een direct antwoord terug in het Engels)

Net als alle goede opdrachtregelprogramma's, retourneert het 0 om u te laten weten dat het antwoord dat het geeft zeker is en een foutmelding als u problemen ondervindt bij het testen van de bereikbaarheid.

  -r [-W] {knooppuntnaam | adres | lokaal adres extern adres}
     Controleer de netwerkbereikbaarheid van de opgegeven hostnaam, IP
     adres, of een paar lokale en externe IP-adressen. Een of meer van
     de volgende strings worden naar de standaarduitvoer gerapporteerd.

     Niet bereikbaar De opgegeven naam / adres van het knooppunt kan niet zijn
                           bereikt met de huidige netwerkconfiguratie
                           tie.

     Bereikbaar Het opgegeven knooppuntnaam / adres kan worden bereikt
                           met behulp van de huidige netwerkconfiguratie.

     Transient Connection De opgegeven naam / adres van het knooppunt kan worden bereikt
                           via een tijdelijke (bijvoorbeeld PPP) verbinding.

     Verbinding vereist De opgegeven naam / adres van het knooppunt is bereikbaar
                           met de huidige netwerkconfiguratie maar een
                           verbinding moet eerst tot stand worden gebracht. Als een
                           Deze status wordt bijvoorbeeld geretourneerd voor een
                           inbelverbinding die momenteel niet actief was
                           maar kan netwerkverkeer voor het doel afhandelen
                           systeem.
Verbinding Automatisch De opgegeven naam / adres van het knooppunt is bereikbaar
                           met de huidige netwerkconfiguratie maar een
                           verbinding moet eerst tot stand worden gebracht. Ieder
                           verkeer omgeleid naar de opgegeven naam / adres
                           zal de verbinding tot stand brengen.

     Lokaal adres De opgegeven naam / adres van het knooppunt is een
                           ated met een netwerkinterface op het systeem.

     Direct bereikbare adressen
                           Netwerkverkeer naar het opgegeven knooppunt
                           naam / adres gaat niet via een gateway maar
                           wordt rechtstreeks naar een van de interfaces op
                           het systeem.

     De bereikbaarheid kan ook worden gecontroleerd door de -W (horloge)
     optie. Dit zal ertoe leiden dat de huidige status wordt gerapporteerd als
     evenals de status wanneer / als de netwerkconfiguratie verandert.

     Een exitstatus nul wordt geretourneerd wanneer de bereikbaarheidstatus is
     correct gerapporteerd. Een exitstatus anders dan nul wordt geretourneerd als
     fouten worden gedetecteerd met een fout gerapporteerd als standaardfout.
 

Aangezien Apple's index van man-pagina's een PITA is om te gebruiken, is hier een hopelijk stabielere link naar de volledige man-pagina online: https://ss64.com/osx/scutil.html

Als bonus - hier is nog een fatsoenlijke Q&A met betrekking tot scutil en het controleren van de resolutie: nslookup & graven mislukt; ping, traceroute en scutil -r work

Dit heeft echt niet dezelfde betekenis als het commando waar de vraag over ging.De vraag draait om het controleren of je een internetverbinding hebt door een pakket naar Google te sturen en te kijken of je een reactie terugkrijgt.Uw antwoord verzendt geen pakketjes en zegt ook niet of u al dan niet een internetverbinding hebt.Dus afhankelijk van waar dit voor moet worden gebruikt, kan het het systeem voor de gek houden door aan te nemen dat er een internetverbinding is, maar dat is het echt niet.Natuurlijk in de praktijk [...]
[...] op systemen voor thuisgebruikers betekent het bereiken van google.com meestal dat ze een internetverbinding hebben.Maar alleen meestal.
@jksoegaard Ik waardeer de opmerkingen zo.Ik zal proberen hiermee te rotzooien en dradenhark om te bevestigen dat er geen pakketten achterblijven in een test met mijn configuratie.Ik heb nooit betrapt dat 'scutil' ongelijk had, ik heb niet geprobeerd het te breken of echt te valideren.Bedankt voor het planten van een bug!
De manier waarop de scutil-bereikbaarheidstest werkt, is specifiek door geen pakket uit te sturen, maar in plaats daarvan te testen of een pakket _ zou_ worden verzonden als er een verzoek werd gedaan.Het is op dezelfde manier als de Reachability API werkt op iOS.
Dus ik moet mijn antwoord echt aanpassen, aangezien een deel onjuist of misleidend lijkt.
jksoegaard
2019-05-28 20:07:06 UTC
view on stackexchange narkive permalink

Uw probleem is dat u ongeldige opties gebruikt voor het ping-commando.Het lijkt waarschijnlijk dat je een opdrachtregel hebt gekopieerd die bedoeld is voor gebruik op Linux, en hebt geprobeerd deze ongewijzigd te gebruiken op macOS.

Het specifieke probleem hier is dat Linux "-w" gebruikt om time-outs op te geven, terwijl macOS "-t" gebruikt.Dit betekent dat uw opdrachtregel in plaats daarvan deze zou moeten zijn:

  ping -q -t1 -c1 google.com &> / dev / null && echo online ||echo offline
 
Zou `ping -c 3 www.google.com` in ieder geval niet moeten werken?
Nou, hij schreef dat hij het op een "ander netwerk" had geprobeerd.Dat netwerk lijkt geen internetverbinding te hebben, of heeft alleen een firewall / gefilterde internetverbinding.Ik heb de fout in de opdrachtregel die hij probeert te gebruiken, gecorrigeerd, dus daarom heb ik me niet geconcentreerd op het helpen van hem ook met zijn debug-opdrachten.
Ik heb geprobeerd ping -q -t1 -c1 google.com &> / dev / null && echo online ||echo offline, het komt ook uit als "offline".
@ZeyanZhong Probeer het zonder de uitvoer om te leiden naar / dev / null, zodat u daadwerkelijk kunt zien wat er gebeurt: `ping -q -t1 -c1 google.com`
@GordonDavisson Dit is de uitvoer: PING google.com (74.125.193.101): 56 databytes --- google.com ping-statistieken --- 1 verzonden pakketten, 0 pakketten ontvangen, 100,0% pakketverlies
Probeer `traceroute google.com`
Cuspy Code
2019-05-29 23:12:13 UTC
view on stackexchange narkive permalink

Uw commando ping -c 3 www.google.com zou 3 internetresponspakketten van het type ICMP ECHO REPLY moeten hebben geproduceerd.Het ping-commando verzendt ECHO-pakketten met behulp van het ICMP-protocol en de antwoorden (indien aanwezig) zijn ECHO REPLY-pakketten.De curl-opdracht daarentegen verzendt HTTP-pakketten met behulp van het TCP-protocol.Aangezien de laatste werkt en de eerste niet, is er waarschijnlijk iets tussen uw machine en www.google.com dat het ICMP-protocol blokkeert.Veel verkeerd geconfigureerde firewalls doen dit, dus daar zou ik op zoek gaan naar de oorzaak.

Het blokkeren van ICMP is een slechte gewoonte omdat het ervoor zorgt dat zaken als Path MTU Discovery niet meer werken (MTU = Maximum Transmission Unit size).Dit voorkomt dat het meeste verkeer werkt als de MTU op afstand kleiner is dan de lokale MTU.Het is dus een buitengewoon slecht idee om ICMP in de firewall te blokkeren.



Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 4.0-licentie waaronder het wordt gedistribueerd.
Loading...