Hur man använder netcat-nätverksverktyget

{title}

I den här tutorialen kommer vi att prata om ett mycket kraftfullt Netcat-nätverksverktyg, ofta förkortat som nc. Detta verktyg används via kommandoraden och syntaxen är mycket enkel. Det gör att vi kan skriva och ta emot data via socklar (TCP eller UDP). Det har många funktioner och därför kan vi använda det på många sätt. Det är viktigt att veta hur det fungerar, eftersom det gör det möjligt för oss att debattera, testa och undersöka på webben.

Netcat kan fungera på två sätt:

kund

I det här läget ansvarar det för att ansluta till lyssnaren (som lyssnar på en specifik adress och IP, och vi måste veta).

Server eller lyssnare

Vänta på klientanslutningar i en viss port.

Vi kommer att lära oss hur du använder Netcat eller nc genom praktiska exempel, vilket är det bästa sättet att lära sig. För detta kommer jag att använda operativsystemet Ubuntu 16.04.

Det första vi kommer att se är syntaxen netcat:

 nc [alternativ] [mål] [port] 
Netcat har många alternativ, låt oss se några:

Vissa netcar-alternativ

  • -l : Berättar netcat att den ska förbli lyssna.
  • -p : Ange källporten.
  • -s : Ange källadressen.
  • -k : För att tillåta "oändliga" anslutningar lyssnaren (används med -l).
  • -u : Netcat öppnar porten som UDP istället för TCP (som är som standard).
  • -v : Med det här alternativet kommer du att visa oss anslutningsinformation.
  • -i : Ange förseningen att skicka och ta emot. (På några sekunder)
  • -4 : Det är för Netcat att bara använda IPv4.
  • -6 : Som den tidigare men tvinga att använda IPv6.

Det finns fler alternativ som vi kan se genom att utföra följande kommando:

 nc -h 
Nedan kan du se på bilden:

{title}

Låt oss börja med exemplen, först kommer de att vara de enklaste, vara komplicerade, men bara lite, kommer du att se att det är väldigt lätt att använda.

Exempel 1
Sätt min maskin för att lyssna på port 87:

 sudo nc-l -p 87 

notera

Officiell kommer fortfarande att ta bort -p .

Nu ska vi upprätta en anslutning från en annan terminal, när jag kör den på samma maskin, använder jag localhost som adress:

 nc localhost 87 
Om vi ​​skriver något från klienten som vi just har öppnat, ser vi det också i terminalen som lyssnar, och så verifierar vi att anslutningen fungerar korrekt. Men om vi skriver i lyssnaren, den första terminalen, når den också kunden. Sedan lämnar jag en bild av lyssnaren och en annan av klienten:

{title}

{title}

Vi ser att de kommunicerar som vi ville i detta exempel, låt oss gå till en annan.

Exempel 2
Vi kan göra att servern eller lyssnaren sparar de data som skickas av klienten i en fil, för detta skiljer kommandot inte mycket från det som ses i det första exemplet:

 sudo nc –l 87> test 

notera

test är namnet på filen där du sparar informationen som kommer.

På klientsidan kommer kommandot att vara detsamma som tidigare:

 nc localhost 87 
Följande bild visar vad som utfördes på klienten (lyssnaren lyssnar innan den ansluter, annars skulle det inte ha någon effekt):

{title}

Och på serversidan kan vi se att tydligen ingenting tas emot, men det enda säkra är att det inte visas på skärmen och sparas i testfilen:

{title}

Låt oss fortsätta med ett annat exempel.

Exempel 3
Vi kommer att kontrollera om ett antal portar, för att veta om de är öppna eller inte, i detta exempel är intervallet 80-90. Först öppnar vi en server på port 80 som vi gjorde i det första exemplet (så vi får se hur det fungerar när den är öppen och när den inte gör det):

 sudo nc -l 87 
Och hos klienten kommer vi att utföra:
 nc -z -v localhost 80-90 
Parametern -z används för att skanna, och -v som vi såg tidigare för att visa information (om vi inte sätter kommer detta inte att visa vilken port som är öppen och vilken inte är), då är klientens bild:

{title}

Låt oss gå vidare för att se ett exempel i UDP .

Exempel 4
Detta exempel är också enkelt, vi kommer att lyssna på UDP i hamn 2016, och vi kommer att tvinga den att vara IPv4-adress:

 sudo nc-l -u -4 2016 
Och nu har vi klienten att ansluta:
 nc -u -4 2016 
Jag tillhandahåller ingen bild, eftersom inspelningen kommer att vara densamma som i exempel 1, det är tydligt att ändra kommandot. Låt oss gå vidare till ett exempel där vi använder kod i Python.

Exempel 5
Vi lägger en kod så enkel som möjligt i Python för att lyssna på en anslutning, ta emot data och avsluta.

 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 ") tryck (data) 
Jag kommer att köra denna kod på Windows och sedan från Linux kommer jag att ansluta med den via netcat, följande bild visar klientsidan på Linux:

{title}

Och vad skulle ses i Windows:

{title}

Om vi ​​ändrar koden något kan vi få den att utföra ett kommando och skicka oss dess innehåll, men vi kan också returnera ett skal, vilket gör att vi kan göra många saker, så låt oss gå vidare till följande exempel.

Exempel 6
I det här exemplet kommer jag att köra en Python-kod på samma Linux-maskin, och jag kommer att ansluta till netcat, vi kommer att verifiera att en Shell returnerar oss (/ bin / bash). Sedan lämnar jag Python-koden, så enkel och kort som möjligt, bara för exemplet.

 import socket, subprocess 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 = subprocess.Popen (["/ bin / bash"], stdin = conn, stdout = conn, stder = conn) 
Python-koden körs och följande visas (bilden visar hur den ser ut när du ansluter från netcat):

{title}

Vi ser att det lyssnas på när det körs, men när en klient är ansluten stängs anslutningen, och vi har ett skal för oss.

{title}

Vi kan också skapa en kod som kommer att ansluta till vår maskin, som vi lyssnar på i en viss port, i allmänhet finns det många möjligheter, nu måste du undersöka och "spela" med netcat, vilket du kan se kan hjälpa oss på många stunder .

  • 0