Inleiding
Een van de grootste voordelen van het gebruik van Linux is de overvloed aan handige hulpprogramma's die het biedt. De ingebouwde functies zijn meestal voldoende voor de meeste programmeurs om hun werk te doen. Dit betekent dat je meestal geen externe programma's en software hoeft te downloaden. De ingebouwde tools bieden je voldoende functionaliteit. Een van deze handige functies is het hulpprogramma netcat.
Als het gaat om de wereld van netwerktools, is netcat een soort overkrachtig wapen. Het is een ongelooflijk veelzijdig commando dat je voor meerdere doeleinden kunt gebruiken. Je kunt deze enkele tool bijvoorbeeld gebruiken om allerlei soorten bestanden en gegevens te monitoren, te testen en over te dragen via de verbindingen van je systeem. In deze gids zullen we onderzoeken hoe je al deze acties kunt uitvoeren op een VPS met behulp van netcat.
Netcat vinden
Netcat is doorgaans beschikbaar op alle moderne Linux-distributies. Dit betekent dat je het waarschijnlijk al hebt en geen moeite hoeft te doen om het te installeren. In onze handleiding gebruiken we de Ubuntu 12.04 VPS. Je kunt je eigen Ubuntu-server installeren door onze handleiding te volgen. Ubuntu wordt normaal gesproken geleverd met de BSD-variant van het netcat-hulpprogramma. Houd er rekening mee dat als je een andere versie hebt, deze mogelijk net even anders werkt.
De basissyntaxis doornemen
We beginnen met het leren van de algemene syntaxis die werkt in het netcat-hulpprogramma. Je kunt netcat bedienen door een TCP-verbinding te starten. De verbinding moet worden geïnitieerd naar een externe host. Hier is de basissyntaxis voor netcat:
|
1 |
netcat [opties] host poort |
Dit commando zal proberen een TCP-verbinding te starten met een externe host. Met welke host verbinding wordt gemaakt, hangt af van het poortnummer dat je in het commando opgeeft. De verbinding is onversleuteld. Zoals je kunt zien, werkt dit commando op een vergelijkbare manier als het telnet-commando.
Aan de andere kant kun je ook een UDP-verbinding initiëren. Om een UDP-pakket te verzenden in plaats van TCP, moet je de optie -u gebruiken. Dit ziet er als volgt uit:
|
1 |
netcat -u host poort |
Als je wilt, kun je ook een bereik van poorten opgeven. Om dit te doen, moet je een koppelteken tussen de eerste en de laatste poort plaatsen. Hier is een voorbeeld:
|
1 |
netcat host startpoort-eindpoort |
Je kunt hier ook meer vlaggen aan toevoegen. Een ander ding om op te letten is dat je netcat en nc door elkaar kunt gebruiken. Ze starten hetzelfde commando, wat betekent dat ze elkaars aliassen zijn.
Netcat gebruiken voor poortscannen
Om te beginnen gaan we een van de meest voorkomende toepassingen van netcat verkennen. We zullen uitzoeken hoe we het als poortscanner kunnen gebruiken. In de meeste situaties ben je beter af met een tool als nmap. Als je echter alleen eenvoudige poortscans hoeft uit te voeren, is netcat handig. Het kan je helpen om gemakkelijk open poorten te identificeren.
Om netcat als poortscanner te gebruiken, moet je het bereik van de poorten opgeven. Dit doe je met de optie -z. Het systeem scant dan het poortbereik in plaats van een verbinding te proberen. Laten we zeggen dat we poort 1 tot en met poort 1000 willen scannen:
|
1 |
netcat -z -v domain.com 1-1000 |
Naast het -z-commando hebben we ook de optie -v gebruikt. Hiermee kunnen we meer informatie aan het commando geven. Het stelt ons in staat om meer 'verbose' (gedetailleerd) te zijn.
Je krijgt een uitvoer als deze terug:

De uitvoer toont veel informatie voor elke afzonderlijke poort. Je kent de verbindingsstatus van elke poort. Aan de andere kant kun je het IP-adres gebruiken in plaats van de domeinnaam als je deze kent. Dit maakt het proces veel sneller. Hier is een voorbeeld:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 |
We hebben de vlag -n gebruikt om aan te geven dat het systeem wel DNS moet gebruiken om het IP-adres op te lossen.
Normaal gesproken worden de retourberichten naar de standaardfoutuitvoer gestuurd. Om de resultaten sneller te filteren, kun je ze omleiden naar de standaarduitvoer. We gebruiken hiervoor de bash-syntaxis 2>&1. Vervolgens filteren we de resultaten met behulp van grep. Laten we dit toepassen op ons voorbeeld:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep geslaagd |
De uitvoer zal er ongeveer zo uitzien:
![]()
De uitvoer laat zien dat alleen poort 22 open is voor verbinding in het opgegeven bereik. Poort 22 is toevallig de traditionele SSH-poort.
Communicatie via Netcat: hoe werkt het?
Vervolgens zullen we zien hoe je netcat kunt gebruiken om TCP- en UDP-pakketten te verzenden. Niet alleen dat, maar het kan ook pakketten ontvangen op verschillende poorten. Als gevolg van deze mogelijkheid kun je twee netcat-instanties gebruiken om een client-serverrelatie te creëren. In het begin bepaal je de client en de server. Na de initiële configuratie kunnen beide clients pakketten in beide richtingen verzenden en ontvangen.
Natuurlijk moet je netcat op één systeem configureren om te luisteren naar verbindingen op één poort. Hiervoor moet je de parameter -l gebruiken. Hiermee kun je de poort van je keuze als volgt selecteren:
|
1 |
netcat -l 4444 |
Nu zal TCP op deze machine luisteren naar verbindingen op poort 4444. Een belangrijk punt is dat als je een niet-root- of normale gebruiker bent, je geen toegang hebt tot poorten onder de 1000.
Vervolgens moet je een tweede machine configureren om een verbinding tot stand te brengen. Je gebruikt hetzelfde poortnummer en geeft een specifieke domeinnaam op, zoals dit:
|
1 |
netcat domain.com 4444 |
Het uitvoeren van deze opdracht geeft geen uitvoer. Het zal echter wel de verbinding tot stand brengen. Dit betekent dat je berichten kunt gaan verzenden van de ene server naar de andere. Om dit te doen, hoef je alleen maar het bericht te typen en vervolgens op ENTER te drukken. Het bericht verschijnt op beide schermen.
Zodra je klaar bent, kun je de TCP-verbinding sluiten door op CTRL+D te drukken.
Kun je bestanden verzenden met Netcat?
Vervolgens laten we je zien hoe je bestanden kunt verzenden via netcat. Met een TCP-verbinding kun je zowel berichten als andere soorten gegevens verzenden. Om te beginnen moet je één machine selecteren om naar verbindingen te luisteren. In plaats van de informatie in de opdracht te typen, plaatsen we deze echter in een bestand zoals dit:
|
1 |
netcat -l 4444 > received_file |
Op de andere machine moet je een nieuw tekstbestand maken. Hier is de te gebruiken opdracht:
|
1 |
echo "Hallo, dit is een bestand" > original_file |
Om het bestand te verzenden, gebruik je het als invoer voor de verbinding op de computer die luistert:
|
1 |
netcat domain.com 4444 < original_file |
De andere computer zal een nieuw bestand tonen genaamd ‘received_file.’ Het zal alle informatie bevatten die we hebben getypt:
|
1 |
cat received_file |
Je kunt dit hulpprogramma gebruiken en er een bestandsoverdrachtprogramma van maken. Stel dat je de inhoud van een map wilt overdragen. We doen dit door een naamloze tarball te maken die we naar het systeem overdragen en uitpakken in de externe map. Op de andere machine moeten we ons voorbereiden om het bestand te ontvangen. We weten dat we het moeten uitpakken en extraheren. Voer hiervoor deze opdracht uit:
|
1 |
netcat -l 4444 | tar xzvf - |
Het koppelteken geeft aan dat tar zal werken op de standaardinvoer. Dit is afkomstig van netcat op de initiële server toen we de initiële verbinding tot stand brachten.
Ten slotte kunnen we de inhoud van de hele map in een tarball plaatsen en deze als volgt via netcat verzenden:
|
1 |
tar -czf - * | netcat domain.com 4444 |
Het koppelteken in de tar-opdracht laat zien dat we het systeem de opdracht geven om de inhoud van de map te tarren en te zippen. Het geeft ook de opdracht om het resultaat naar de standaarduitvoer te schrijven. Het bestand gaat via de TCP-verbinding naar de andere kant. De ontvangende server zal het decomprimeren en opslaan in de huidige externe map.
Net zo gemakkelijk kun je ook andere soorten gegevens via netcat overdragen. Veel mensen gebruiken de dd-opdracht om schijven te kopiëren en over te dragen. Voor een andere manier om gegevens en bestanden over te dragen, kun je kijken naar onze handleiding die laat zien hoe je de veiligheid kunt waarborgen bij het overdragen van bestanden met SFTP.
Netcat gebruiken als een webserver
Een andere nuttige functie van netcat is dat je het kunt gebruiken om je pagina's te testen. Laten we zeggen dat we een server gebruiken om een HTML-bestand als dit te maken:
|
1 |
nano index.html |
Dit is de HTML-code die het bestand bevat:
|
1 2 3 4 5 6 7 8 9 10 |
<html> <head> <title>Testpagina</title> </head> <body> <h1>Kopniveau 1</h1> <h2>Subkop</h2> <p>Normale tekst hier</p> </body> </html> |
Voer dit in het bestand in, sla het op en sluit het. Gewoonlijk is poort 80 de standaard webpoort. Als een normale, niet-rootgebruiker selecteren we poort 8888. Ervan uitgaande dat je de pagina eenmalig wilt aanbieden en controleren, gebruik je dit commando:
|
1 |
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888 |
Om de inhoud van het bestand te visualiseren, ga je naar je browser. Bezoek het volgende:
|
1 |
http://server_IP:8888 |
Je kunt nu de pagina zien die je met het HTML-bestand hebt gecodeerd:

Zodra je de pagina ophaalt, wordt de netcat-verbinding gesloten. Dit betekent dat het vernieuwen van de pagina een foutmelding geeft in plaats van de inhoud. Dit komt omdat we deze hebben geconfigureerd om de pagina slechts één keer aan te bieden. Als je verbindingen wilt blijven ontvangen om de pagina onbeperkt te bekijken, gebruik je een andere code:
|
1 |
while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done |
Hier hebben we het laatste commando in een oneindige lus geplaatst. Als je de lus wilt stoppen, hoef je alleen maar CTRL-C te typen. Nu kun je je pagina en de weergave ervan blijven bekijken, zelfs nadat de eerste verbinding is gesloten. Dit is echter de maximale functionaliteit die je kunt halen uit het gebruik van het netcat-hulpprogramma als webserver. Probeer het niet te gebruiken om echte websites te hosten, aangezien het geen enkele beveiliging biedt. In plaats daarvan kun je onze handleidingen bekijken over hoe je webserversoftware zoals Nginx installeert of Apache.
Conclusie
In deze handleiding hebben we het hulpprogramma netcat behandeld en de veelzijdigheid ervan als tool op Ubuntu besproken. Zoals we in de bovenstaande secties hebben behandeld, kun je het gebruiken voor communicatie, gegevensoverdracht en het aanbieden van pagina's. Het werkt perfect voor snelle interacties tussen servers via TCP/UDP-verbindingen. Het is een zeer nuttige functie voor veel basisfunctionaliteit en diagnostiek.
Veel computerplezier!
Reacties
Nog geen reacties. Wees de eerste.