Как да използвате мрежовия инструмент netcat

Съдържание

В този урок ще говорим за a много мощен мрежов инструмент Netcat, обикновено съкратено като nc. Този инструмент се използва чрез командния ред и неговият синтаксис е много прост. Това ще ни позволи да записваме и получаваме данни през гнезда (TCP или UDP). Той има много функции и затова можем да го използваме по много начини. Важно е да знаете работата му, тъй като това ще ни позволи да отстраняваме грешки, да тестваме и изследваме в мрежата.

Netcat може да работи в 2 режима:

КлиентВ този режим той ще отговаря за свързването със слушателя (който слуша на конкретен адрес и IP адрес, и който ще трябва да знаем).

Сървър или слушателИзчакайте връзки от клиенти на определен порт.

Ние ще научете как работи Netcat или nc чрез практически примери, което е най -добрият начин за учене. За това ще използвам операционната система Ubuntu 16.04.

Първото нещо, което ще видим, е синтаксисът на netcat:

 nc [опции] [цел] [порт]
Netcat имате много опции, нека да видим някои:

Някои опции за нетбук

  • : Казва на netcat да слуша.
  • -стр: За да посочите пристанището на произход.
  • : За да посочите адреса на източника.
  • : За да позволи "безкрайни" връзки на слушателя (използва се с -l).
  • -или: Netcat отваря порта като UDP вместо TCP (което е по подразбиране).
  • -v: С тази опция тя ще ни показва информация за връзка.
  • -i: За да посочите закъснението за изпращане и получаване. (За секунди).
  • -4: Позволява на Netcat да използва само IPv4.
  • -6: Подобно на предишния, но принуждава да използва IPv6.

Има още опции, които можем да видим, като изпълним следната команда:

 nc -h
По -долу можете да видите на снимката:

Ще започнем с примерите, най -простият ще отиде първо, за да ги усложни, но само малко, ще видите, че е много лесен за използване.

Пример 1
Поставете машината ми да слуша на порт 87:

 sudo nc -l -p 87
ЗабележкаЩе работи същото премахване -стр.

Сега ще установим връзка от друг терминал, тъй като го стартирам на същата машина, използвам localhost като адрес:

 nc локален хост 87
Ако напишем нещо от клиента, който току -що сме отворили, ще го видим и в терминала, който слуша, и по този начин проверяваме дали връзката работи правилно. Но ако пишем на слушателя, първият терминал, той достига и до клиента. След това оставям изображение на слушателя и друго на клиента:

Виждаме, че те общуват така, както искахме в този пример, нека да преминем към друг.

Пример 2
Можем да накараме сървъра или слушателя да запише данните, изпратени от клиента във файл, за това командата, която трябва да се изпълни, не се различава много от тази, видяна в първия пример:

 sudo nc -l 87> тест
Забележкаtest е името на файла, в който ще запишете пристигащата информация.

От страна на клиента командата ще бъде същата като преди:

 nc localhost 87
Следното изображение показва какво се изпълнява на клиента (слушателят слуша преди да се свърже, в противен случай няма да има ефект):

И от страна на сървъра можем да видим, че очевидно нищо не се получава, но единствената сигурност е, че не се показва на екрана и се записва в тестовия файл:

Нека продължим с друг пример.

Пример 3
Ще проверим дали диапазон от портове, за да разберем дали са отворени или не, в този пример диапазонът ще бъде 80-90. Първо отваряме сървър на порт 80, както направихме в първия пример (така че ще видим как работи, когато е отворен и когато не е):

 sudo nc -l 87
И на клиента ще изпълним:
 nc -z -v localhost 80-90
Параметър -z се използва за сканиране, а -v Както видяхме преди за показване на информация (ако не поставим това, няма да се покаже кой порт е отворен и кой не), тогава изображението на клиента:

Отиваме да видим а пример в UDP.

Пример 4
Този пример също е прост, ще слушаме UDP на порт 2016 и ще го принудим да бъде IPv4 адрес:

 sudo nc -l -u -4 2016
И сега караме клиента да се свърже:
 nc -u -4 2016
Не предоставям изображение, тъй като улавянето ще бъде същото като в пример 1, като се променя, разбира се, частта от командата. Нека преминем към пример, в който използваме Python код.

Пример 5
Ще поставим код възможно най -опростен в Python, така че да слуша връзка, да получава данни и да завършва.

 импортира сокет s = socket.socket () s.bind (("192.168.56.1", 1987)) s.listen (1) conn, addr = s.accept () данни = conn.recv (1024) .decode (" utf-8 ") печат (данни) 
Ще стартирам този код в Windows и след това от Linux ще се свържа с него чрез netcat, следното изображение показва клиентската страна на Linux:

И как би изглеждал в Windows:

Ако променим кода нещо, можем да го накараме да изпълни команда и да ни изпрати съдържанието му, но също така можем да върнем черупка, която ще ни позволи да правим много неща, така че нека преминем към следващия пример.

Пример 6
В този пример ще стартирам a код на python На същата Linux машина и аз ще се свържа с netcat, ще проверим дали Shell ( / bin / bash) ни връща. По -долу оставям кода на Python, възможно най -прост и кратък, само за пример.

 импортиране на гнездо, подпроцес 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 = подпроцес.Popen ([" / bin / bash"], stdin = conn, stdout = conn, stder = conn) 
Кодът на Python се изпълнява и се вижда следното (изображението показва как изглежда при свързване от netcat):

Виждаме, че той слуша, когато го изпълняваме, но когато клиентът се свърже, връзката се затваря и ние имаме Shell за нас.

Можем също така да направим код, който се свързва с нашата машина, че ще го поставим да слуша на определен порт, като цяло има много възможности, сега трябва да проучите и "играете" с netcat, което, както видяхте, може да помогне ни в много моменти.

Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка
wave wave wave wave wave