Inhoudsopgave:

Netcat in Python: 6 stappen
Netcat in Python: 6 stappen

Video: Netcat in Python: 6 stappen

Video: Netcat in Python: 6 stappen
Video: Intro to Replacing Netcat - Black Hat Python - ep. 4 2024, November
Anonim
Netcat in Python
Netcat in Python

Wat is netcat? De handleiding voor netcat zegt het volgende: "het hulpprogramma nc (of netcat) wordt gebruikt voor zowat alles onder de zon met betrekking tot TCP-, UDP- of UNIX-domeinsockets. Het kan TCP-verbindingen openen, UDP-pakketten verzenden, luisteren naar willekeurige TCP- en UDP-poorten, scannen van poorten en omgaan met zowel IPv4 als IPv6. In tegenstelling tot telnet(1), nc scripts netjes, en scheidt foutmeldingen op standaardfout in plaats van ze naar standaarduitvoer te sturen, zoals telnet(1) doet met sommige"

In wezen stelt netcat u in staat om verbinding te maken met andere servers via het TCP- of UDP-protocol. TCP staat voor Transmission Control Protocol en is verbindingsgericht. UDP staat voor Universal Datagram Protocol en is verbindingsloos. TCP wordt vaak gebruikt voor internettoepassingen, terwijl UDP wordt gebruikt voor mediastreaming of VPN's.

Stap 1: Hoe beginnen we?

Hoe beginnen we?
Hoe beginnen we?

Hierboven is hoe netcat wordt genoemd. U kunt zien dat er aan het einde twee argumenten zijn genaamd "bestemming" en "poort". De bestemming verwijst naar een hostnaam of ip-adres van de server waarmee we verbinding proberen te maken, terwijl de poort verwijst naar de poort van de server waarmee we verbinding proberen te maken.

Stap 2: Laten we beginnen

Laten we beginnen
Laten we beginnen

Hierboven staat wat beginnende python-code. Zoals u kunt zien, willen we de argumenten voor het programma op dezelfde manier verwerken als het daadwerkelijke hulpprogramma. De hostnaam is het eerste argument na de naam van het uitvoerbare bestand, terwijl de poort het tweede argument is na de naam van het uitvoerbare bestand in de opdrachtregel.

Stap 3: Een verbinding maken

Een verbinding maken
Een verbinding maken

Laten we een netcat-functie maken die we kunnen gebruiken. Wat we hier in feite doen, is een socket maken en verbinding maken met de server met behulp van de gegeven parameters. Voor het netcat-commando zijn de huidige parameters de hostnaam en poort van de server waarmee we verbinding proberen te maken. De socket bevat de parameters "socket. AF_INET" en "socket. SOCK_STREAM" omdat we voor deze tutorial standaard een TCP-verbinding gebruiken.

Stap 4: Laten we wat inhoud verzenden

Laten we wat inhoud verzenden
Laten we wat inhoud verzenden

We hebben onze netcat-functie uitgebreid met een derde parameter, 'content'. Er is hier veel inhoud, dus laten we het uitsplitsen op regelnummer.

Regel 14-16: we sturen alle inhoud over de socket, we wachten even, en dan sluiten we de socket voor alle uitgaande gegevens, zodat de socket weet dat er geen gegevens meer komen.

Regel 18-26: we creëren een buffer om de serverreactie op te slaan, en terwijl de socket gegevens ontvangt, voegen we maximaal 1024 bytes aan gegevens toe aan het resultaat, zolang er gegevens zijn om te lezen.

Regel 28-29: we willen dat deze netcat-verbinding een eenmalige verbinding is, dus verklaren we de verbinding gesloten en sluiten vervolgens de verbinding.

Regel 31: Dit is een standaard HTTP-verzoek. Als u de code uitvoert met de opdrachtregelargumenten "google.com" en "80", dan ziet u een correct

Stap 5: Laten we een open verbinding hebben

Laten we een open verbinding hebben
Laten we een open verbinding hebben

De bovenstaande code (die zich onder de code uit de vorige sectie bevindt) stelt ons eenvoudig in staat om meerdere netcat-opdrachten uit te voeren via een pseudo-open verbinding. (In werkelijkheid, elke keer dat je een commando uitvoert, opent en sluit het een nieuwe TCP-verbinding, dus het emuleert niet echt het gedrag van netcat, we doen dit gewoon voor leerdoeleinden). Laten we dit ook regel voor regel opsplitsen:

Regel 31: We willen commando's voor onbepaalde tijd lezen om "interactiviteit" te behouden

Regel 32: Dit is onze buffer die de inhoud van ons verzoek zal opslaan

Regel 36-45: We lezen in de buffer totdat we een lege regel lezen

Regel 48: we roepen gewoon onze netcat-functie aan met de hostnaam, poort en nieuw gemaakte inhoud (die correct is gecodeerd)

Regel 50: als de inhoud van onze buffer ooit "Connection: Close" bevat (wat aangeeft dat we de verbinding willen sluiten), breken we gewoon uit de lus

Stap 6: Conclusie

Aan het einde van deze tutorial zou je een minimaal werkende netcat-implementatie moeten hebben. Ik zal het als een oefening aan de gebruiker overlaten om functies te implementeren zoals:

1. ondersteuning van andere protocollen

2. de code repareren om de verbinding niet elke keer te sluiten

3. vlaggen toevoegen die netcat al heeft om het gedrag te wijzigen

Aanbevolen: