Hoe de netcat-netwerktool te gebruiken

Inhoudsopgave

In deze tutorial gaan we het hebben over a zeer krachtige Netcat-netwerktool, gewoonlijk afgekort als nc. Deze tool wordt gebruikt via de opdrachtregel en de syntaxis is heel eenvoudig. Hiermee kunnen we gegevens schrijven en ontvangen via sockets (TCP of UDP). Het heeft veel functies en daarom kunnen we het op veel manieren gebruiken. Het is belangrijk om de werking ervan te kennen, omdat het ons in staat zal stellen fouten op te sporen, te testen en te onderzoeken op het netwerk.

Netcat kan in 2 standen werken:

CliëntIn deze modus is het verantwoordelijk voor het verbinden met de luisteraar (die luistert op een specifiek adres en IP, en dat moeten we weten).

Server of luisteraarWacht op verbindingen van clients op een bepaalde poort.

Wij gaan leer hoe Netcat of nc werkt aan de hand van praktijkvoorbeelden, wat de beste manier is om te leren. Hiervoor zal ik het besturingssysteem Ubuntu 16.04 gebruiken.

Het eerste dat we gaan zien, is de netcat-syntaxis:

 nc [opties] [doel] [poort]
Netcat je hebt veel opties, laten we er een paar bekijken:

Enkele netcar-opties

  • -l: Vertelt netcat om te luisteren.
  • -P: Om de haven van herkomst aan te geven.
  • -s: Om het bronadres aan te geven.
  • -k: Om "oneindige" verbindingen toe te staan ​​voor de luisteraar (gebruikt met -l).
  • -of: Netcat opent de poort als UDP in plaats van als TCP (wat standaard is).
  • -v: Met deze optie toont het ons verbindingsinformatie.
  • -I: Om de vertraging voor het verzenden en ontvangen aan te geven. (In seconden).
  • -4: Staat Netcat toe om alleen IPv4 te gebruiken.
  • -6: Net als de vorige, maar dwingt om IPv6 te gebruiken.

Er zijn meer opties die we kunnen zien door het volgende commando uit te voeren:

 nc -h
Hieronder zie je op de foto:

We beginnen met de voorbeelden, de eenvoudigste zal eerst gaan, om ze ingewikkelder te maken, maar een klein beetje, je zult zien dat het heel gemakkelijk te gebruiken is.

voorbeeld 1
Zet mijn machine om te luisteren op poort 87:

 sudo nc -l -p 87
OpmerkingHet zou hetzelfde werken als verwijderen -P.

Nu gaan we een verbinding tot stand brengen vanaf een andere terminal, aangezien ik het op dezelfde machine gebruik, gebruik ik localhost als het adres:

 nc localhost 87
Als we iets schrijven van de client die we zojuist hebben geopend, zien we het ook in de terminal die luistert, en dus controleren we of de verbinding correct werkt. Maar als we naar de luisteraar, de eerste terminal, schrijven, bereikt deze ook de klant. Vervolgens laat ik een afbeelding van de luisteraar en een andere van de klant achter:

We zien dat ze communiceren zoals we wilden in dit voorbeeld, laten we voor een ander gaan.

Voorbeeld 2
We kunnen de server of luisteraar de door de client verzonden gegevens in een bestand laten opslaan, hiervoor verschilt de uit te voeren opdracht niet veel van die in het eerste voorbeeld:

 sudo nc -l 87> test
Opmerkingtest is de naam van het bestand waarin u de informatie die binnenkomt opslaat.

Aan de clientzijde zal het commando hetzelfde zijn als voorheen:

 nc localhost 87
De volgende afbeelding laat zien wat er op de client wordt uitgevoerd (de luisteraar luistert voordat hij verbinding maakt, anders zou het geen effect hebben):

En aan de serverkant kunnen we zien dat er blijkbaar niets wordt ontvangen, maar de enige zekerheid is dat het niet op het scherm wordt weergegeven en wordt opgeslagen in het testbestand:

Laten we doorgaan met een ander voorbeeld.

Voorbeeld 3
We gaan controleren of een reeks poorten, om te weten of ze open zijn of niet, in dit voorbeeld 80-90 zal zijn. Eerst openen we een server op poort 80 zoals we deden in het eerste voorbeeld (dus we zullen zien hoe het werkt wanneer het open is, en wanneer niet):

 sudo nc -l 87
En op de klant zullen we uitvoeren:
 nc -z -v localhost 80-90
Parameter -z wordt gebruikt voor het scannen, en de -v Zoals we eerder zagen om informatie te tonen (als we dit niet plaatsen, zal het niet laten zien welke poort open is en welke niet), dan is de afbeelding van de client:

We gaan een zien voorbeeld in UDP.

Voorbeeld 4
Dit voorbeeld is ook eenvoudig, we gaan luisteren naar UDP op poort 2016 en we gaan het dwingen om een ​​IPv4-adres te zijn:

 sudo nc -l -u -4 2016
En nu laten we de klant verbinden:
 nc -u -4 2016
Ik geef geen afbeelding, omdat de opname hetzelfde zal zijn als in voorbeeld 1, waarbij natuurlijk het deel van de opdracht wordt gewijzigd. Laten we verder gaan met een voorbeeld waarin we Python-code gebruiken.

Voorbeeld 5
We gaan een zo eenvoudig mogelijke code in Python zetten, zodat deze naar een verbinding luistert, gegevens ontvangt en eindigt.

 import socket s = socket.socket () s.bind ("192.168.56.1", 1987)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) .decode (" utf-8 ") afdrukken (gegevens) 
Ik ga deze code op Windows uitvoeren en dan vanuit Linux maak ik er verbinding mee via netcat, de volgende afbeelding toont de clientzijde op Linux:

En hoe het eruit zou zien op Windows:

Als we de code iets wijzigen, kunnen we ervoor zorgen dat het een commando uitvoert en ons de inhoud ervan stuurt, maar we kunnen ook een shell retourneren, waarmee we veel dingen kunnen doen, dus laten we verder gaan met het volgende voorbeeld.

Voorbeeld 6
In dit voorbeeld ga ik een uitvoeren python-code Op dezelfde Linux-machine, en ik ga verbinding maken met netcat, gaan we controleren of een Shell (/bin/bash) ons retourneert. Hieronder laat ik de Python-code, zo eenvoudig en kort mogelijk, alleen voor het voorbeeld.

 import socket, subproces s = socket.socket (socket.AF_INET) s.setsockopt (socket.IPPROTO_IP, socket.SO_REUSEADDR, 1) s.bind (("", 1987)) s.listen (1) conn, addr = s .accept () p = subproces.Popen (["/ bin / bash"], stdin = conn, stdout = conn, stder = conn) 
De Python-code wordt uitgevoerd en het volgende is te zien (de afbeelding laat zien hoe het eruitziet wanneer verbinding wordt gemaakt vanaf netcat):

We zien dat het luistert wanneer we het uitvoeren, maar wanneer een klant verbinding maakt, wordt de verbinding verbroken en hebben we een Shell voor ons.

We zouden ook een code kunnen maken die verbinding maakt met onze machine, die we op een bepaalde poort zullen laten luisteren, over het algemeen zijn er veel mogelijkheden, nu moet je onderzoeken en "spelen" met netcat, wat zoals je hebt gezien kan helpen ons op vele momenten.

Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave