Sommario:

Netcat in Python: 6 passaggi
Netcat in Python: 6 passaggi

Video: Netcat in Python: 6 passaggi

Video: Netcat in Python: 6 passaggi
Video: Catching All Exceptions Will Break Your Code // Python Tips 2024, Luglio
Anonim
Netcat in Python
Netcat in Python

Cos'è netcat? La pagina di manuale per netcat dice quanto segue: "l'utility nc (o netcat) è usata per qualsiasi cosa sotto il sole che coinvolga socket TCP, UDP o UNIX-domain. Può aprire connessioni TCP, inviare pacchetti UDP, ascoltare su arbitrari TCP e UDP, eseguono la scansione delle porte e gestiscono sia IPv4 che IPv6. A differenza di telnet (1), gli script nc separano i messaggi di errore in errori standard invece di inviarli all'output standard, come fa telnet (1) con alcuni"

In sostanza, netcat permette di connettersi ad altri server utilizzando il protocollo TCP o UDP. TCP è l'acronimo di Transmission Control Protocol ed è orientato alla connessione. UDP sta per Universal Datagram Protocol ed è senza connessione. TCP è comunemente utilizzato per le applicazioni Internet, mentre UDP è utilizzato per lo streaming multimediale o le VPN.

Passaggio 1: come iniziamo?

Come iniziamo?
Come iniziamo?

Sopra è come viene chiamato netcat. Puoi vedere che ci sono due argomenti alla fine chiamati "destinazione" e "porta". La destinazione si riferisce a un nome host o indirizzo IP del server a cui stiamo cercando di connetterci, mentre la porta si riferisce alla porta del server a cui stiamo cercando di connetterci.

Passaggio 2: iniziamo

Cominciamo
Cominciamo

Sopra c'è un codice Python iniziale. Come puoi vedere, vogliamo elaborare gli argomenti del programma in modo simile a come fa l'utilità effettiva. Il nome host sarà il primo argomento dopo il nome dell'eseguibile, mentre la porta sarà il secondo argomento dopo il nome dell'eseguibile nella riga di comando.

Passaggio 3: creazione di una connessione

Creare una connessione
Creare una connessione

Creiamo una funzione netcat che possiamo usare. Quello che stiamo facendo fondamentalmente qui è creare un socket e connetterci al server usando i parametri forniti. Per il comando netcat, i parametri correnti sono il nome host e la porta del server a cui stiamo tentando di connetterci. Il socket contiene i parametri "socket. AF_INET" e "socket. SOCK_STREAM" perché per questo tutorial stiamo per default su una connessione TCP.

Passaggio 4: inviamo alcuni contenuti

Inviamo alcuni contenuti
Inviamo alcuni contenuti

Abbiamo esteso la nostra funzione netcat per prendere un terzo parametro, "content". Ci sono molti contenuti qui, quindi analizziamoli per numero di riga.

Riga 14-16: inviamo tutto il contenuto sul socket, aspettiamo un po' e poi chiudiamo il socket a tutti i dati in uscita in modo che il socket sappia che non ci sono più dati in arrivo.

Riga 18-26: creiamo un buffer per memorizzare la risposta del server e mentre il socket riceve dati, aggiungiamo fino a 1024 byte di dati al risultato finché ci sono dati da leggere.

Riga 28-29: vogliamo che questa connessione netcat sia una connessione una tantum, quindi dichiariamo la connessione chiusa e poi chiudiamo la connessione.

Riga 31: questa è una richiesta HTTP standard. Se esegui il codice con gli argomenti della riga di comando "google.com" e "80", vedrai una risposta HTTP corretta

Passaggio 5: consente di avere una connessione aperta

Avere una connessione aperta
Avere una connessione aperta

Il codice sopra (che si trova sotto il codice della sezione precedente) ci consente semplicemente di eseguire più comandi netcat su una connessione pseudo-aperta. (In realtà, ogni volta che esegui un comando, si apre e poi si chiude una nuova connessione TCP, quindi non emula veramente il comportamento di netcat, lo stiamo semplicemente facendo per scopi di apprendimento). Analizziamo anche questa riga per riga:

Riga 31: Vogliamo leggere i comandi indefinitamente per mantenere "l'interattività"

Riga 32: questo è il nostro buffer che memorizzerà il contenuto della nostra richiesta

Righe 36-45: Leggeremo nel buffer finché non leggeremo una riga vuota

Riga 48: chiamiamo semplicemente la nostra funzione netcat con il nome host, la porta e il contenuto appena creato (che è opportunamente codificato)

Riga 50: se il contenuto del nostro buffer contiene "Connection: Close" (che indica che vogliamo chiudere la connessione), interrompiamo semplicemente il ciclo

Passaggio 6: conclusione

Alla fine di questo tutorial dovresti avere un'implementazione minima di netcat funzionante. Lascerò come esercizio all'utente l'implementazione di funzionalità come:

1. supportare altri protocolli

2. correggere il codice per non chiudere ogni volta la connessione

3. aggiungere flag che netcat ha già per modificare il comportamento

Consigliato: