Съдържание:

Netcat в Python: 6 стъпки
Netcat в Python: 6 стъпки

Видео: Netcat в Python: 6 стъпки

Видео: Netcat в Python: 6 стъпки
Видео: Python for Automating Information Security: What Is Netcat? | packtpub.com 2024, Ноември
Anonim
Netcat в Python
Netcat в Python

Какво е netcat? На страницата с ръководството за netcat се казва следното: „Помощната програма nc (или netcat) се използва за почти всичко под слънцето, включващо сокети за TCP, UDP или UNIX домейн. Тя може да отваря TCP връзки, да изпраща UDP пакети, да слуша по произволен начин. TCP и UDP портове, извършват сканиране на портове и се справят както с IPv4, така и с IPv6. За разлика от telnet (1), nc скриптове добре и разделят съобщенията за грешка на стандартна грешка, вместо да ги изпращат към стандартен изход, както telnet (1) прави с някои"

По същество, netcat ви позволява да се свързвате с други сървъри, използвайки TCP или UDP протокол. TCP означава Протокол за управление на предаването и е ориентиран към връзката. UDP означава Универсален протокол за дейтаграма и е без връзка. TCP обикновено се използва за интернет приложения, докато UDP се използва за поточно предаване на медии или VPN.

Стъпка 1: Как да започнем?

Как да започнем?
Как да започнем?

По -горе е как се нарича netcat. Можете да видите, че в края има два аргумента, наречени „дестинация“и „порт“. Дестинацията се отнася до име на хост или ip адрес на сървъра, към който се опитваме да се свържем, докато портът се отнася до порта на сървъра, към който се опитваме да се свържем.

Стъпка 2: Нека започнем

Нека да започнем
Нека да започнем

По -горе е някакъв начален код на python. Както можете да видите, ние искаме да обработим аргументите на програмата подобно на действителната помощна програма. Името на хоста ще бъде първият аргумент след името на изпълнимия файл, докато портът ще бъде вторият аргумент след името на изпълнимия файл в командния ред.

Стъпка 3: Създаване на връзка

Създаване на връзка
Създаване на връзка

Нека създадем функция netcat, която можем да използваме. Това, което основно правим тук, е да създадем гнездо и да се свържем със сървъра, като използваме дадените параметри. За командата netcat текущите параметри са името на хоста и порта на сървъра, към който се опитваме да се свържем. Сокетът съдържа параметрите "socket. AF_INET" и "socket. SOCK_STREAM", защото по подразбиране използваме TCP връзка за този урок.

Стъпка 4: Нека изпратим малко съдържание

Позволяваме да изпращаме малко съдържание
Позволяваме да изпращаме малко съдържание

Разширихме нашата функция netcat, за да вземем трети параметър, „съдържание“. Тук има много съдържание, така че нека го разделим по номер на ред.

Ред 14-16: изпращаме цялото съдържание през сокета, изчакваме малко и след това затваряме сокета за всички изходящи данни, така че сокетът да знае, че няма да идват повече данни.

Ред 18-26: създаваме буфер за съхраняване на отговора на сървъра и докато сокетът получава данни, ние добавяме до 1024 байта данни към резултата, стига да има данни за четене.

Ред 28-29: искаме тази netcat връзка да бъде еднократна, затова обявяваме връзката за затворена и след това затваряме връзката.

Ред 31: Това е стандартна HTTP заявка. Ако стартирате кода с аргументите на командния ред „google.com“и „80“, тогава ще видите подходящ HTTP отговор

Стъпка 5: Нека имаме отворена връзка

Нека имаме отворена връзка
Нека имаме отворена връзка

Горният код (който се намира под кода от предишния раздел) просто ни позволява да изпълняваме множество команди netcat през псевдоотворена връзка. (В действителност всеки път, когато изпълнявате команда, тя се отваря и след това затваря нова TCP връзка, така че тя наистина не подражава на поведението на netcat, ние просто правим това за учебни цели). Нека разделим и този ред по ред:

Ред 31: Искаме да четем команди за неопределено време, за да поддържаме „интерактивност“

Ред 32: Това е нашият буфер, който ще съхранява съдържанието на нашата заявка

Ред 36-45: Ще четем в буфера, докато не прочетем празен ред

Ред 48: ние просто извикваме нашата функция netcat с името на хоста, порта и новосъздаденото съдържание (което е правилно кодирано)

Ред 50: ако съдържанието на нашия буфер някога съдържа "Connection: Close" (което показва, че искаме да затворим връзката), ние просто излизаме от цикъла

Стъпка 6: Заключение

В края на този урок трябва да имате минимална работна реализация на netcat. Ще оставя като упражнение на потребителя да внедри функции като:

1. поддържащи други протоколи

2. определяне на кода да не затваря връзката всеки път

3. добавяне на флагове, които netcat вече трябва да промени поведението

Препоръчано: