Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
pig — Uno strumento di creazione di pacchetti per Linux. | Kitploit
Strumenti/GitHubGitHub/rafael-santiago/pig
Evasione IDS/IPSSicurezza di RetePenetration Testing
GitHubrafael-santiago/pig

pig

Uno strumento di creazione di pacchetti per Linux.

Vedi Repository
479415 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Pig

Pig (che può essere inteso come Packet intruder generator) è uno strumento Linux per la creazione di pacchetti. Puoi usare Pig per testare il tuo IDS/IPS tra le altre cose.

Pig porta un mucchio di firme di attacco ben note già pronte per essere utilizzate e puoi espandere questa raccolta con cose più specifiche secondo le tue esigenze.

Fino ad ora è possibile creare firme IPv4 con livello di trasporto basato su TCP, UDP e ICMP. Puoi anche creare firme basate sul protocollo ARP, oltre a costruire il pacchetto a partire dal suo frame Ethernet.

Se sei arrivato qui tramite il mio articolo su 2600 del numero SPRING 2016 issue continua a leggere le seguenti sezioni della documentazione perché questo piccolo Pig si è evoluto da allora.

Come clonare questo repo?

È molto semplice:

root@kitploit:~
[email protected]:~/src# git clone https://github.com/rafael-santiago/pig pig
[email protected]:~/src# cd pig
[email protected]:~/src/pig# git submodule update --init

Come compilarlo?

Devi usare Hefesto per compilare pig. Dopo aver seguito i passaggi per mettere Hefesto in funzione sul tuo sistema, spostati nella sottodirectory pig chiamata src ed esegui il seguente comando:

root@kitploit:~
[email protected]:~/src/pig/src# hefesto

Dopo questo comando dovresti trovare il binario pig nel percorso src/bin. Puoi usare il binario relativamente da src/bin o installarlo.

Se per qualche motivo hai problemi di compilazione, dovresti provare a leggere alcune osservazioni presenti in BUILD.md.

How to install it?

Per installare devi essere nella sottodirectory src e chiamare:

root@kitploit:~
[email protected]:~/src/pig/src# hefesto --install

Per disinstallare, essendo nella sottodirectory src, devi chiamare:

root@kitploit:~
[email protected]:~/src/pig/src# hefesto --uninstall

I file pigsty

I file Pigsty sono file di testo semplice in cui puoi definire un insieme di firme di pacchetti. C'è una sintassi specifica da seguire. Ecco un esempio di file pigsty:

root@kitploit:~
[ signature   =      "Hello",
  ip.version  =            4,
  ip.ihl      =            5,
  ip.tos      =            0,
  ip.src      = 192.30.70.10,
  ip.dst      =  192.30.70.3,
  ip.protocol =           17,
  udp.dst     =         1008,
  udp.src     =        32000,
  udp.payload =    "Hello!!" ]

Fondamentalmente, tutti i dati della firma devono essere tra parentesi quadre: [ ... ].

All'interno di quest'area le informazioni sono fornite tramite lo schema field = data.

Se hai un po' di esperienza con le Reti di Computer, è certo che la maggior parte dei campi elencati nella Tabella 1 hanno un forte significato per te. Devi usare questi campi per creare le tue successive firme.

Tabella 1: I campi delle firme di pig.

Quando crei una firma non devi specificare tutti i dati. Se specifichi solo le parti più rilevanti del pacchetto, le parti rimanenti verranno riempite con valori predefiniti. I checksum vengono sempre ricalcolati.

Suggerimento: dai un'occhiata alla sottodirectory pigsty. Troverai molti file di firma e vedrai che è abbastanza semplice definirne di nuovi.

Specificare gli indirizzi IP geograficamente

Sì, è possibile. Per utilizzare questa funzione devi solo specificare i valori elencati nella Tabella 2 nei campi di tipo ip adddress.

Tabella 2: IP per area geografica.

Valore da usare

Specificare i propri indirizzi

In qualsiasi campo di tipo ip address dovresti usare user-defined-ip come valore. Nota che in questo caso devi usare l'opzione della riga di comando --targets. Vedi la sezione Using pig per maggiori informazioni.

Contribuisci inviando più firme di pacchetti

Se crei file pigsty che ritieni siano rilevanti al di là del tuo ambiente, apri una pull request per includere questi file utili qui. Grazie in anticipo!

Using pig

L'uso di Pig è molto semplice, è necessario fornire quattro opzioni di base che sono:

  • --signatures
  • --gateway
  • --net-mask
  • --lo-iface

Vuoi saperne di più su ogni opzione, eh?... Allora andiamo:

  • L'opzione --signatures riceve un elenco di percorsi di file verso file pigsty.
  • L'opzione --gateway è dove specifichi l'indirizzo del tuo gateway. Tieni presente che pig genera o almeno cerca di generare anche i frame ethernet. Per questo motivo l'indirizzo del gateway è piuttosto importante per comporre correttamente i dati del layer-1.
  • L'opzione --net-mask per questioni di routing deve ricevere la tua maschera di rete.
  • L'opzione --lo-iface è il posto in cui dovresti indicare il nome dell'interfaccia di rete locale che utilizzerai per "far uscire" i pacchetti generati.
  • L'opzione --no-gateway indica che nessun pacchetto verrà inviato al di fuori della rete.

Supponendo che vogliamo generare traffico basato su DDoS:

root@kitploit:~
[email protected]:~# pig --signatures=pigsty/ddos.pigsty\
> --gateway=10.0.2.2\
> --net-mask=255.255.255.0 --lo-iface=eth0

Ora vogliamo fare un po' di caos:

root@kitploit:~
[email protected]:~# pig --signatures=pigsty/ddos.pigsty,pigsty/attackresponses.pigsty,\
> pigsty/badtraffic.pigsty,pigsty/backdoors.pigsty\
> --gateway=10.0.2.2 --net-mask=255.255.255.0 --lo-iface=eth0

Opzioni extra

Definire timeout tra l'invio delle firme

Per farlo usa l'opzione --timeout=<millisec>

Soppressione dell'eco

Usa l'opzione --no-echo.

Definire i target

Usa l'opzione --targets. Puoi specificare un elenco basato su IP esatti, maschere IP e CIDR.

Guarda questo:

root@kitploit:~
[email protected]:~# pig --signatures=pigsty/local-mess.pigsty\
> --targets=192.30.70.3,192.30.70.*,192.30.70.0/9\
> --gateway=10.0.2.2\
> --net-mask=255.255.255.0\
> --lo-iface=eth0

Non utilizzare il gateway

Questo è utile quando le firme caricate non invieranno dati al di fuori della rete corrente. Per segnalarlo devi usare l'opzione --no-gateway. Quando viene usata l'opzione --no-gateway non è necessario specificare l'indirizzo del gateway perché i pacchetti non fluiranno al di fuori del segmento corrente. Di conseguenza, anche comunicare la maschera di rete diventa irrilevante.

Ad esempio:

root@kitploit:~
[email protected]:~# pig --signatures=pigsty/local_traffic.pigsty --no-gateway --lo-iface=eth2

Nell'esempio sopra, il frame ethernet non sarà più responsabilità di pig. Per questo motivo pig non si lamenterà dell'assenza delle opzioni --gateway e --net-mask.

L'opzione --no-gateway è molto comoda nei casi in cui devi generare traffico ARP. Dai un'occhiata a questo altro documento che spiega come eseguire l'ARP spoofing con pig.

Inviare una sola firma e tornare indietro

Forse hai bisogno di inviare una sola firma e poi tornare al chiamante per verificare cosa è successo. Questo tipo di requisito è comune quando usi questa applicazione come supporto per test di sistema o test unitari. Quindi, se ne hai bisogno dovresti provare a usare l'opzione --single-test:

root@kitploit:~
[email protected]:~# pig --signature=pigsty/syn-scan.pigsty --targets=127.0.0.1 --single-test\
> --gateway=10.0.2.2 --net-mask=255.255.255.0 --lo-iface=eth0

Dopo l'esecuzione di questo comando, pig selezionerà solo una firma dal file syn-scan.pigsty e proverà a inviarla per poi uscire. Se si verifica un errore durante il processo, pig uscirà con codice di uscita uguale a 1, altrimenti pig uscirà con codice di uscita uguale a 0.

Specificare la modalità di attraversamento del pigsty

La modalità operativa base di pig è un loop infinito che sputa tonnellate di pacchetti nella rete rispettando un timeout precedentemente definito.

Puoi definire come pig attraversa i pacchetti caricati per inviarli usando l'opzione --loop=<mode>. Fino ad ora le modalità sono due: random (predefinita) e sequential.

La modalità sequential reitererà le firme quando raggiunge la fine dell'elenco delle firme di pacchetti caricati.

Le sotto-attività

Le sotto-attività sono attività minori utili correlate alla creazione di pacchetti che sono incluse in pig per aiutarti durante la tua sessione di creazione. Queste attività possono essere accessibili usando l'opzione --sub-task=<task-name>.

Per il fatto di essere praticamente dei sottoprogrammi, le sotto-attività hanno le loro peculiarità e per questo motivo i dettagli su di esse sono nei loro manuali. Dai un'occhiata alla Tabella 3 per seguirli.

Tabella 3: Le sotto-attività di pig.

Trucchi di Pig

Dal frame Ethernet al livello più alto...

Fino ad ora puoi costruire pacchetti basati su IPv4 con UDP o TCP nel loro livello di trasporto. Puoi anche costruire pacchetti ARP.

Tuttavia, puoi ancora costruire pacchetti a partire dal frame Ethernet. La cosa interessante è la possibilità di costruire virtualmente qualsiasi cosa sopra il payload di Ethernet.

Ad esempio, anche se pig fino ad ora non offre supporto per la costruzione di IPv6 "cucinato", puoi comunque costruirlo usando un pigsty basato su Ethernet grezzo. Guarda:

root@kitploit:~
[ eth.hwdst = "5C:AC:4C:AA:F5:B5",
  eth.hwsrc = "08:95:2A:AD:D6:4F",
  eth.type = 0x86DD,
  eth.payload = "\x60\x00\x00\x00\x00\x20\x3a\xff\xfe\x80\x00\x00\x00\x00\x00\x00\x0a\x95\x2a\xff\xfe\xad\xd6\x4f\xfe\x80\x00\x00\x00\x00\x00\x00\x55\x51\x00\xc2\x18\x0f\xdb\x46\x88\x00\x32\x01\xe0\x00\x00\x00\xfe\x80\x00\x00\x00\x00\x00\x00\x0a\x95\x2a\xff\xfe\xad\xd6\x4f\x02\x01\x08\x95\x2a\xad\xd6\x4f",
  signature = "IPv6 from Sparta" ]
]

Tenendo conto che l'inclusione degli indirizzi MAC di destinazione e sorgente all'interno di un "pigsty Ethernet" è opzionale, possiamo svolgere il lavoro anche senza usare alcun campo di riempimento.

È utile quando devi testare nuovi protocolli nel tuo ambiente, tra le altre cose divertenti e anomale. In questo modo grezzo, pig può continuare a esserti utile.

Testare pig da zero

Salva i seguenti dati come "oink.pigsty":

root@kitploit:~
[ signature   =           "oink",
  ip.version  =                4,
  ip.ihl      =                5,
  ip.tos      =                0,
  ip.src      =        127.0.0.1,
  ip.dst      =  user-defined-ip,
  ip.protocol =               17,
  udp.dst     =             1008,
  udp.src     =            32000,
  udp.payload =        "Oink!!\n" ]

Su un altro tty esegui netcat in modalità UDP in ascolto di connessioni sulla porta 1008:

root@kitploit:~
[email protected]:~# nc -u -l -p 1008

Ora esegui pig usando il file "oink.pigsty", indicando come target il loopback:

root@kitploit:~
[email protected]:~# pig --signatures=oink.pigsty --targets=127.0.0.1\
> --gateway=10.0.2.2 --net-mask=255.255.255.0 --lo-iface=eth0

Il netcat dovrebbe iniziare a ricevere diversi oink e... sì, complimenti!! pig è operativo sul tuo sistema! ;)

Prova a sniffare la tua rete per ottenere maggiori informazioni su questi pacchetti UDP che stanno circolando sulle tue interfacce...

Buon divertimento!

Scarica lo strumento
CampoSignificaProtocolloTipo di datoDefinizione di esempio
signatureIl nome della firma-stringsignature = "Udp flood"
eth.hwdstMAC Dest. EthernetEthernetMACeth.hwdst = "00:de:ad:be:ef:00"
eth.hwsrcMAC Sorgente EthernetEthernetMACeth.hwsrc = "00:de:ad:be:ef:00"
eth.typeTipo EtherEthernetnumbereth.type = 0x0800
eth.payloadPayload EthernetEthernetstringeth.payload = "f\x00ob\x04r"
ip.versionVersione IPIPnumberip.version = 4
ip.ihlLunghezza intestaz. InternetIPnumberip.ihl = 5
ip.tosTipo di servizioIPnumberip.tos = 0
ip.tlenLunghezza totaleIPnumberip.tlen = 20
ip.idID pacchettoIPnumberip.id = 0xbeef
ip.flagsFlag IPIPnumberip.flags = 4
ip.offsetOffset di frammentazioneIPnumberip.offset = 0
ip.ttlTime to liveIPnumberip.ttl = 64
ip.protocolProtocolloIPnumberip.protocol = 6
ip.checksumChecksumIPnumberip.checksum = 0
ip.srcIndirizzo sorgenteIPip addressip.src = 192.30.70.3
ip.dstIndirizzo destinazioneIPip addressip.dst = 192.30.70.3
ip.payloadPayload IP grezzoIPstringip.payload = "\x01\x02"
tcp.srcPorta sorgenteTCPnumbertcp.src = 80
tcp.dstPorta destinazioneTCPnumbertcp.dst = 21
tcp.seqnoNumero di sequenzaTCPnumbertcp.seqno = 10202
tcp.acknoNumero di acknowledgementTCPnumbertcp.ackno = 10200
tcp.sizeLunghezza TCPTCPnumbertcp.size = 4
tcp.reservCampo riservato TCPTCPnumbertcp.reserv = 0
tcp.urgFlag urg. TCPTCPbittcp.urg = 0
tcp.ackFlag ack. TCPTCPbittcp.ack = 1
tcp.pshFlag psh. TCPTCPbittcp.psh = 0
tcp.rstFlag rst. TCPTCPbittcp.rst = 0
tcp.synFlag syn. TCPTCPbittcp.syn = 0
tcp.finFlag fin. TCPTCPbittcp.fin = 0
tcp.wsizeDimensione finestra TCPTCPnumbertcp.wsize = 0
tcp.checksumChecksumTCPnumbertcp.checksum = 0
tcp.urgpPuntatore urgenteTCPnumbertcp.urgp = 0
tcp.payloadPayloadTCPstringtcp.payload = "\x01abc"
udp.srcPorta sorgenteUDPnumberudp.src = 53
udp.dstPorta destinazioneUDPnumberudp.dst = 7
udp.sizeLunghezza UDPUDPnumberudp.size = 8
udp.checksumChecksumUDPnumberudp.checksum = 0
udp.payloadPayloadUDPnumberudp.payload = "boo!"
icmp.typeTipo ICMPICMPnumbericmp.type = 0
icmp.codeCodice ICMPICMPnumbericmp.code = 0
icmp.checksumChecksumICMPnumbericmp.checksum = 0
icmp.payloadPayloadICMPstringicmp.payload = "ping!"
arp.hwtypeTipo hardware ARPARPnumberarp.hwtype = 0x1
arp.ptypeTipo protocollo ARPARPnumberarp.ptype = 0x0800
arp.hwlenLunghezza hardware ARPARPnumberarp.hwlen = 6
arp.opcodeCodice operazione ARPARPnumberarp.opcode = 2
arp.hwsrcIndirizzo hardware sorgente ARPARPMACarp.hwsrc = "de:ad:be:ef:0:0"
arp.psrcIndirizzo protocollo sorgente ARPARPip addressarp.psrc = 192.30.70.3
arp.hwdstIndirizzo hardware destinazione ARPARPMACarp.hwdst = "de:ad:be:ef:0:0"
arp.pdstIndirizzo protocollo destinazione ARPARPip addressarp.pdst = 192.30.70.3
Significa
north-american-ipIndirizzi IP dal Nord America
south-american-ipIndirizzi IP dal Sud America
asian-ipIndirizzi IP dall'Asia
european-ipIndirizzi IP dall'Europa
Sotto-attivitàCosa fa?Manuale
pcap-importImporta pacchetti da un file PCAP in un file pigstycat doc/pcap-import.md
shellEsegue pig in modalità interattivacat doc/shell.md