В този урок ще говорим за 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, което, както видяхте, може да помогне ни в много моменти.
Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка