Een onmisbaar instrument voor netwerkbeheer is het Ping-commando in Linux. Misschien heb je eerder ping
gebruikt voor basisprobleemoplossing, maar wat doet dit commando eigenlijk?
Het ping
-commando stuurt verzoeken via het Internet Control Message Protocol (ICMP) naar externe of lokale hosts en wacht op een antwoord. Geen antwoord kan duiden op een probleem met de verbinding of de hosts zelf.
Lees verder en ontdek de praktische manieren om het ping-commando in Linux te gebruiken!
Vereisten
Deze tutorial zal een hands-on demonstratie zijn. Als je wilt meedoen, zorg er dan voor dat je een Linux-computer hebt met een internetverbinding. Deze tutorial maakt gebruik van een Ubuntu 20.04 computer.
Zorg er ook voor dat je al een terminalsessie hebt geopend op je Linux-computer.
Controleren van de lokale netwerkconnectiviteit
Stel je voor dat je een webapplicatie aan het ontwikkelen bent. De test mislukt wanneer je probeert toegang te krijgen tot de applicatie via het loopback-adres van de host (127.0.0.1). Voordat je je haar uittrekt bij het oplossen van het probleem met de applicatie, zorg ervoor dat het TCP/IP-protocol intern werkt met behulp van het ping
-commando.
De standaard loopback-adressen zijn 127.0.0.1 en 0:0:0:0:0:0:0:1 (of ::1) voor respectievelijk IPv4 en IPv6.
Om de connectiviteit van het loopback-adres te controleren, voer het onderstaande ping
-commando uit gevolgd door het loopback-adres in de terminal. Dit commando demonstreert het meest basale gebruik van het ping
-commando in Linux.
En als het loopback-adres goed werkt, zou je een vergelijkbare uitvoer moeten zien als op de onderstaande screenshot.

Als alternatief zou het pingen van de localhost
-hostnaam hetzelfde resultaat moeten opleveren, omdat het standaard naar het loopback-adres verwijst.

Om het ping
-commando te beëindigen, druk op CTRL+C
in de terminal. Anders blijft het ping-commando continu uitgevoerd worden.
Let op: Druk niet op CTRL+Z om het ping-commando te stoppen. Als je dat doet, stopt het commando wel, maar het proces blijft op de achtergrond actief.

Begrip van de uitvoer van het Ping-commando in Linux
Voordat je verder gaat, zou het nuttig zijn om de uitvoer expliciet te begrijpen in plaats van deze alleen te interpreteren als “het werkt”. Raadpleeg de onderstaande afbeelding en de uitleg van de waarden die volgt.

- A (
bytes
) – Shows the ICMP echo request (packet) size in bytes. - B (
from
) – Shows the target host’s IP addressfrom
where theping
command receives the response. - C (
icmp_seq
) – Indicates the order of packet transmission. As you can see, ping sends the ICMP requests in sequence. The value showsicmp_seq=N
, whereN
is the order number. - D (
TTL
) – Shows the ICMP request’s Time-To-Live (TTL) value. The default value is 64, which means that the request can only live up to a maximum of 64 hops and will expire after. The maximum value possible is 255. - E (
time
) – The total time (milliseconds) elapsed the request reached the destination and circled back to the source. This value is also known as the Round Trip Time (RTT). Notice that thetime
values are less than 0.1 milliseconds in this example since the target is the same machine. Thetime
value increases naturally when theping
destinations are remote or have an internet address. - F (
statistics
) – Shows the summary and statistics of theping
command results. The summary shows the number of packets transmitted and received, packet loss percentage, and the total time. The bottom line shows the minimum, average (mean value), maximum, and standard deviation of the total RTT.
Forceren van de internetprotocolversie
De ping-opdracht gebruikt standaard IPv4. Maar wat als je de compatibiliteit van je applicatie met IPv6 wilt testen? Om de ping-opdracht te dwingen IPv6 te gebruiken, moet je de -6 optie specificeren voor je ping-opdracht in Linux, zoals je kunt zien in de onderstaande code.
Zoals je hieronder kunt zien, toont het antwoord aan dat de respons afkomstig is van het IPv6-loopback-adres (::1).

In plaats van de -6 optie dwingt de -4 optie ping om IPv4 te gebruiken. Maar aangezien ping standaard naar IPv4 gaat, hoef je meestal de -4 optie niet op te geven.
Beperking van het aantal antwoorden
In de vorige voorbeelden moest je op CTRL+C drukken om de ping-opdracht te beëindigen, anders zou deze continu blijven draaien.
Met de -c optie kun je het aantal antwoorden specificeren voordat de ping-opdracht stopt. Waarom zou je deze optie gebruiken? In sommige gevallen wil je misschien testen hoe je systeem reageert op 10, 100, 1000 ICMP-pakketten, enzovoort.
Voer de volgende opdracht uit om vijf ICMP-pakketten naar het doelhost te sturen. Vervang 5 door het aantal ICMP-responsen dat je wilt ontvangen voordat je stopt.
Zoals je hieronder kunt zien, stopte de ping-opdracht na het vijfde verzoek (icmd_seq=5), en je hoefde niet op CTRL+C te drukken om het te beëindigen.

Aanpassen van het verzoekinterval
Stel dat je de netwerkverbinding tussen twee apparaten wilt testen, en een daarvan heeft een lage bandbreedte. In dit geval kun je het interval tussen elk verzoek verhogen, zodat het tweede apparaat voldoende tijd heeft om het huidige ICMP-pakket te verwerken.
De ping
-opdracht verzendt standaard het volgende ICMP-verzoek één seconde na voltooiing van het vorige. Om de vertraging aan te passen, moet je de -i
-optie specificeren, gevolgd door de vertraging in seconden.
Bijvoorbeeld, voer de onderstaande ping
-opdracht uit om vijf ICMP-verzoeken te verzenden met een interval van twee seconden tussen de verzoeken.
Nog een voorbeeld, voer de onderstaande ping
-opdracht uit om vijf ICMP-verzoeken te verzenden met een interval van een halve seconde tussen elk verzoek.
Het vergelijken van de resultaten van beide opdrachten met verschillende intervallen laat het verschil zien in de totale tijd
-waarden.

Het simuleren van een Floodaanval
A ping flood is a type of Denial of Service (DoS) attack in which the attacker attempts to overwhelm a targeted device with ICMP packets. The attack aims to overwhelm the targeted machine to respond to so many requests that it becomes overloaded and unavailable to legitimate users.
Je kunt een floodaanval simuleren om te testen hoe je systeem reageert op een aanval. Maak je echter geen zorgen. De ping flood-simulatie is beheerst, en je kunt deze op elk moment stoppen door op CTRL+C te drukken.
Voer de volgende opdracht uit op je lokale machine om te zien hoeveel verzoeken je apparaat per seconde aankan. De -f
-optie betekent dat er snel meerdere ping-pakketten worden verzonden, zonder willekeurige limiet.
Vervang ‘localhost’ door het IP-adres of de hostnaam van de app die je wilt testen. Dit voorbeeld simuleert de ping flood alleen op de lokale host. Laat de ping-opdracht ongeveer vijf seconden lopen en druk vervolgens op CTRL+C
om deze te beëindigen.
De ping -f opdracht vereist dat je de rootgebruiker bent of sudo-bevoegdheden hebt.
Zoals je hieronder kunt zien, slaagde het ping-commando erin om 124,685
ICMP-pakketten te verzenden en te ontvangen binnen 4276
milliseconden met 0%
pakketverlies. Best goed, toch? Maar in een echt gebruiksscenario zul je wat pakketverlies zien. Pakketverlies is onvermijdelijk omdat het netwerk niet perfect is.

Internetconnectiviteit controleren
Iedereen gebruikt op de een of andere manier het internet, toch? Stel dat je probeert een website te laden met je browser, maar de paginalaadtijd voelt traag aan. Het symptoom zou aangeven dat de DNS-resolutie werkt, maar dat iets de netwerksnelheid beïnvloedt.
Het diagnosticeren van het probleem zonder tools van derden zou het gebruik van het ping
-commando omvatten. Het gebruik van het commando is hetzelfde als wanneer je de lokale netwerkconnectiviteit test. Maar in plaats van het loopback-adres te targeten, zou je een openbaar IP-adres of webadres specificeren.
Voer het onderstaande commando uit om een externe openbare website te pingen. Vervang adamtheautomator.com door een ander webadres zoals je wilt.
Direct valt op dat de tijdwaarde relatief hoger is dan wanneer je het localhost pingt. Deze toename in tijd komt doordat het doeladres adamtheautomator.com niet binnen dezelfde host is en zelfs niet op hetzelfde netwerk.
In de vorige stappen slaagt je ping-commando, maar in het echte gebruik zijn er momenten waarop het ping-commando zal mislukken om verschillende mogelijke redenen.
Hier volgen enkele veelvoorkomende fouten en hoe je ze kunt oplossen.
- Bestemmingshost niet bereikbaar – Deze fout betekent dat er geen route is naar de bestemmingshost. Deze fout kan optreden als de host of het domein niet bereikbaar is.
- Time-out voor verzoek – Deze fout betekent dat het verzoek naar de bestemmingshost te lang heeft geduurd (langer dan 4 seconden of 4000 milliseconden) en de verbinding is verlopen. Deze fout kan optreden als de bestemmingshost te druk is om te reageren, als er een firewall de verbinding blokkeert, of als er defecte netwerkapparatuur is (kabel, router, enz.).
- Onbekende host – Deze fout betekent dat de DNS de hostnaam niet kan vertalen naar een IP-adres. Controleer of je de juiste hostnaam hebt ingevoerd. Als je vermoedt dat je router mogelijk niet correct werkt, probeer dan je router opnieuw op te starten.
- TTL verlopen in doorvoer – Deze fout betekent dat het ICMP-verzoek is verlopen voordat het de bestemming heeft bereikt. Je ping-pakket bereikt nul (0) voordat het de bestemmingshost bereikt. In de meeste gevallen kan een verkeerde configuratie in je routeringstabel deze fout veroorzaken. Overweeg om je routeringstabel te controleren om te zien of er een probleem is.
Leuk om te weten: In de gamegemeenschap verwijzen spelers naar ping als hun verbinding met de game-server. Een lage ping betekent een meer responsieve verbinding, vooral in snel bewegende games. Een hoge ping geeft een minder responsieve verbinding aan en kan het spel traag laten aanvoelen.
Sommige Internet Service Providers (ISPs) tonen een zoekpagina in plaats van een foutmelding wanneer je probeert verbinding te maken met een website die niet bestaat. Je kunt een vals-positief resultaat krijgen omdat je een reactie krijgt in plaats van een foutmelding.
Het opslaan van de uitvoer van Ping naar een bestand
De meeste commando’s, zo niet allemaal, tonen alleen de resultaten op het scherm, en het ping
commando in Linux is niet anders. De Linux-terminal heeft ingebouwde uitvoeromleidingsoperatoren waarmee je de uitvoer naar een bestand kunt omleiden.
Deze omleidingsoperatoren zijn de volgende:
het (>
) teken, dat de inhoud van het bestand zal overschrijven, en het;
het (>>
) teken, dat de uitvoer zal toevoegen aan de bestaande inhoud.
Maar waarom zou je de ping-resultaten willen opslaan in een bestand? Voornamelijk voor het bijhouden van gegevens en later analyseren met behulp van een teksteditor of een logparser.
Je kunt ook een spreadsheetprogramma gebruiken om een grafiek te maken die laat zien hoe de pingtijd in de loop van de tijd verandert.
Voer het volgende commando uit om de uitvoer van de ping op te slaan in een bestand. Dit commando schrijft alle standaarduitvoer van het ping
commando naar een bestand met de naam log.txt op de schijf.
Terwijl het ping
commando wordt uitgevoerd, zul je merken dat er geen uitvoer op het scherm wordt weergegeven.
Open nu het bestand log.txt in een teksteditor, zoals nano
. Of toon de inhoud van het bestand door het cat
commando uit te voeren.


Conclusie
In deze tutorial heb je geleerd hoe je de ping-opdracht in Linux kunt gebruiken met verschillende praktische voorbeelden. Je hebt ook geleerd hoe je de uitvoer van ping naar een bestand op de schijf kunt opslaan, zodat je deze later kunt analyseren.
Op dit punt zou je een goed begrip moeten hebben van hoe de ping-opdracht werkt en hoe deze nuttig kan zijn. Maar voordat je overal begint te pingen, zijn er een paar regels die je moet inschakelen in je beveiligingsgroepen om ICMP-verkeer toe te staan.
Bedankt voor het lezen en veel plezier met leren!