Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
pig — Una herramienta de creación de paquetes para Linux. | Kitploit
Herramientas/GitHubGitHub/rafael-santiago/pig
Evasión de IDS/IPSSeguridad de RedesPruebas de Penetración
GitHubrafael-santiago/pig

pig

Una herramienta de creación de paquetes para Linux.

Ver Repositorio
47941hace 5 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Pig

Pig (que puede entenderse como Packet intruder generator) es una herramienta de creación de paquetes para Linux. Puedes usar Pig para probar tu IDS/IPS, entre otras cosas.

Pig incluye un conjunto de firmas de ataque conocidas listas para usar y puedes ampliar esta colección con cosas más específicas según tus necesidades.

Hasta ahora es posible crear firmas IPv4 con capa de transporte basada en TCP, UDP e ICMP. También puedes crear firmas basadas en el protocolo ARP, además de construir el paquete desde su trama Ethernet.

Si llegaste aquí por mi artículo de 2600 del número SPRING 2016 issue sigue leyendo las siguientes secciones de documentación porque este pequeño Pig ha ido evolucionando desde entonces.

¿Cómo clonar este repositorio?

Es bastante sencillo:

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

¿Cómo compilarlo?

Necesitas usar Hefesto para compilar pig. Después de seguir los pasos para poner Hefesto en funcionamiento en tu sistema, dirígete al subdirectorio pig llamado src y ejecuta el siguiente comando:

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

Después de este comando deberías encontrar el binario pig en la ruta src/bin. Puedes usar el binario de manera relativa desde src/bin o instalarlo.

Si por alguna razón tienes problemas de compilación, deberías leer algunos comentarios presentes en BUILD.md.

¿Cómo instalarlo?

Para instalarlo debes estar dentro del subdirectorio src y ejecutar:

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

Para desinstalarlo, estando dentro del subdirectorio src, debes ejecutar:

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

Los archivos pigsty

Los archivos pigsty son archivos de texto plano donde puedes definir un conjunto de firmas de paquetes. Hay una sintaxis específica que debe seguirse. Observa un ejemplo de un archivo 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!!" ]

Básicamente, todos los datos de la firma deben ir entre corchetes: [ ... ].

Dentro de esta área, la información se proporciona mediante el esquema campo = dato.

Si tienes algo de experiencia con Redes de Computadoras, seguramente la mayoría de los campos listados en la Tabla 1 tienen un significado claro para ti. Debes usar estos campos para crear tus futuras firmas.

Tabla 1: Campos de firma de pig.

Al crear una firma no es necesario especificar todos los datos. Si especificas solo las partes más relevantes del paquete, las partes restantes se rellenarán con valores predeterminados. Los checksums se siempre recalculan.

Consejo: echa un vistazo al subdirectorio pigsty. Encontrarás muchos archivos de firmas y verás que es bastante simple definir nuevas.

Especificar direcciones IP geográficamente

Sí, es posible. Para usar esta función solo debes especificar los valores listados en la Tabla 2 en los campos de tipo dirección IP.

Tabla 2: IPs por área geográfica.

Valor a usar

Especificar mis propias direcciones

Debes usar en cualquier campo de tipo dirección IP el valor user-defined-ip. Ten en cuenta que necesitas usar la opción de línea de comandos --targets en este caso. Consulta la sección Usando pig para más información.

Contribuir enviando más firmas de paquetes

Si creas archivos pigsty que consideres relevantes más allá de tu propio entorno, abre un pull request para incluir estos archivos útiles aquí. ¡Gracias de antemano!

Usando pig

El uso de Pig es muy sencillo, siendo necesario proporcionar cuatro opciones básicas:

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

¿Quieres saber más sobre cada opción, eh?... Pues vamos allá:

  • La opción --signatures recibe una lista de rutas de archivos hacia archivos pigsty.
  • La opción --gateway es donde especificas la dirección de tu puerta de enlace. Ten en cuenta que pig genera o al menos intenta generar las tramas ethernet también. Debido a esto, la dirección de la puerta de enlace es bastante importante para componer correctamente los datos de la capa-1.
  • La opción --net-mask para problemas de enrutamiento debe recibir tu máscara de red.
  • La opción --lo-iface es el lugar donde debes informar el nombre de la interfaz de red local que usarás para "drenar" los paquetes generados.
  • La opción --no-gateway indica que ningún paquete se enviará fuera de la red.

Suponiendo que queremos generar tráfico basado en DDos:

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

Ahora queremos desordenar todo:

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

Opciones adicionales

Definir tiempos de espera entre los envíos de firmas

Para ello usa la opción --timeout=<milisegundos>

Suprimir eco

Usa la opción --no-echo.

Definir objetivos

Usa la opción --targets. Puedes especificar una lista basada en IPs exactas, máscaras IP y CIDRs.

Mira esto:

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

No usar la puerta de enlace

Esto es útil cuando las firmas cargadas no enviarán datos fuera de la red actual. Para señalarlo necesitas usar la opción --no-gateway. Cuando se usa la opción --no-gateway no necesitas especificar la dirección de la puerta de enlace porque los paquetes no fluirán fuera del segmento actual. Como resultado, informar la máscara de red también se vuelve irrelevante.

Por ejemplo:

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

En el ejemplo anterior, la trama ethernet ya no será responsabilidad de pig. Por esta razón pig no se quejará de la falta de las opciones --gateway y --net-mask.

La opción --no-gateway es bastante útil en casos donde necesitas generar tráfico ARP. Echa un vistazo a este otro documento que explica cómo realizar spoofing ARP con pig.

Enviar solo una firma y regresar

Quizás necesites enviar solo una firma y luego volver al llamador para verificar qué sucedió después. Este tipo de requisito es común cuando usas esta aplicación como soporte para pruebas de sistema o pruebas unitarias. Por lo tanto, si necesitas hacer esto, deberías probar la opción --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

Después de ejecutar este comando, pig seleccionará solo una firma del archivo syn-scan.pigsty e intentará enviarla y luego saldrá. Si ocurre algún error durante el proceso, pig saldrá con código de salida igual a 1; de lo contrario, pig saldrá con código de salida igual a 0.

Especificar el modo de recorrido de pigsty

El modo de operación básico de pig se trata de un bucle infinito que escupe toneladas de paquetes a la red respetando un tiempo de espera previamente definido.

Puedes definir cómo pig recorre los paquetes cargados para enviarlos usando la opción --loop=<modo>. Hasta ahora los modos son dos: random (el predeterminado) y sequential.

El modo sequential volverá a iterar las firmas cuando llegue al final de la lista de firmas de paquetes cargadas.

Las subtareas

Las subtareas son tareas menores útiles relacionadas con la creación de paquetes que vienen incluidas en pig para ayudarte en tu sesión de creación. Estas tareas se pueden acceder mediante la opción --sub-task=<nombre-de-tarea>.

Debido a que prácticamente son subprogramas, las subtareas tienen sus propias idiosincrasias y, por lo tanto, los detalles sobre ellas se encuentran en su propio manual. Echa un vistazo a la Tabla 3 para continuar.

Tabla 3: Las subtareas de pig.

Trucos de pig

Desde la trama Ethernet hasta la capa superior...

Hasta ahora puedes construir paquetes basados en IPv4 con UDP o TCP en su capa de transporte. También puedes construir paquetes ARP.

Sin embargo, aún puedes construir paquetes comenzando desde la trama Ethernet. Lo bueno de esto es la posibilidad de construir virtualmente cualquier cosa sobre la carga útil de Ethernet.

Por ejemplo, aunque pig hasta ahora no ofrece soporte para la construcción de IPv6 "cocinado", aún puedes construirlo usando un pigsty basado en Ethernet en bruto. Mira:

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" ]

Teniendo en cuenta que la inclusión de las direcciones MAC de destino y origen dentro de un "pigsty Ethernet" es opcional, podemos realizar el trabajo incluso sin usar ningún campo de relleno.

Esto es útil cuando tienes que probar nuevos protocolos en tu entorno, entre otras cosas divertidas y anómalas. De esta manera en bruto, pig puede seguir siendo útil para ti.

Probando pig desde cero

Guarda los siguientes datos como "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" ]

En otro tty ejecuta netcat en modo UDP escuchando conexiones en el puerto 1008:

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

Ahora ejecuta pig usando el archivo "oink.pigsty", informando como objetivo el 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

El netcat debería comenzar a recibir varios oinks y... sí, ¡felicidades! ¡pig está funcionando en tu sistema! ;)

Intenta snifear tu red para obtener más información sobre estos paquetes UDP que están fluyendo por tus interfaces...

¡Diviértete!

Descargar herramienta
CampoSignificadoProtocoloTipo de datoDefinición de ejemplo
signatureEl nombre de la firma-stringsignature = "Udp flood"
eth.hwdstMAC destino EthernetEthernetMACeth.hwdst = "00:de:ad:be:ef:00"
eth.hwsrcMAC origen EthernetEthernetMACeth.hwsrc = "00:de:ad:be:ef:00"
eth.typeTipo EtherEthernetnúmeroeth.type = 0x0800
eth.payloadCarga útil EthernetEthernetstringeth.payload = "f\x00ob\x04r"
ip.versionVersión IPIPnúmeroip.version = 4
ip.ihlLongitud del encabezado IPIPnúmeroip.ihl = 5
ip.tosTipo de servicioIPnúmeroip.tos = 0
ip.tlenLongitud totalIPnúmeroip.tlen = 20
ip.idID del paqueteIPnúmeroip.id = 0xbeef
ip.flagsBanderas IPIPnúmeroip.flags = 4
ip.offsetDesplazamiento de fragmentoIPnúmeroip.offset = 0
ip.ttlTiempo de vidaIPnúmeroip.ttl = 64
ip.protocolProtocoloIPnúmeroip.protocol = 6
ip.checksumChecksumIPnúmeroip.checksum = 0
ip.srcDirección origenIPdirección IPip.src = 192.30.70.3
ip.dstDirección destinoIPdirección IPip.dst = 192.30.70.3
ip.payloadCarga útil IPIPstringip.payload = "\x01\x02"
tcp.srcPuerto origenTCPnúmerotcp.src = 80
tcp.dstPuerto destinoTCPnúmerotcp.dst = 21
tcp.seqnoNúmero de secuenciaTCPnúmerotcp.seqno = 10202
tcp.acknoNúmero de acuse de reciboTCPnúmerotcp.ackno = 10200
tcp.sizeLongitud TCPTCPnúmerotcp.size = 4
tcp.reservCampo reservado TCPTCPnúmerotcp.reserv = 0
tcp.urgBandera urg. TCPTCPbittcp.urg = 0
tcp.ackBandera ack. TCPTCPbittcp.ack = 1
tcp.pshBandera psh. TCPTCPbittcp.psh = 0
tcp.rstBandera rst. TCPTCPbittcp.rst = 0
tcp.synBandera syn. TCPTCPbittcp.syn = 0
tcp.finBandera fin. TCPTCPbittcp.fin = 0
tcp.wsizeTamaño de ventana TCPTCPnúmerotcp.wsize = 0
tcp.checksumChecksumTCPnúmerotcp.checksum = 0
tcp.urgpPuntero urgenteTCPnúmerotcp.urgp = 0
tcp.payloadCarga útilTCPstringtcp.payload = "\x01abc"
udp.srcPuerto origenUDPnúmeroudp.src = 53
udp.dstPuerto destinoUDPnúmeroudp.dst = 7
udp.sizeLongitud UDPUDPnúmeroudp.size = 8
udp.checksumChecksumUDPnúmeroudp.checksum = 0
udp.payloadCarga útilUDPnúmeroudp.payload = "boo!"
icmp.typeTipo ICMPICMPnúmeroicmp.type = 0
icmp.codeCódigo ICMPICMPnúmeroicmp.code = 0
icmp.checksumChecksumICMPnúmeroicmp.checksum = 0
icmp.payloadCarga útilICMPstringicmp.payload = "ping!"
arp.hwtypeTipo de hardware ARPARPnúmeroarp.hwtype = 0x1
arp.ptypeTipo de protocolo ARPARPnúmeroarp.ptype = 0x0800
arp.hwlenLongitud de hardware ARPARPnúmeroarp.hwlen = 6
arp.opcodeCódigo de operación ARPARPnúmeroarp.opcode = 2
arp.hwsrcDirección hw origen ARPARPMACarp.hwsrc = "de:ad:be:ef:0:0"
arp.psrcDirección proto origen ARPARPdirección IParp.psrc = 192.30.70.3
arp.hwdstDirección hw destino ARPARPMACarp.hwdst = "de:ad:be:ef:0:0"
arp.pdstDirección proto destino ARPARPdirección IParp.pdst = 192.30.70.3
Significado
north-american-ipDirecciones IP de Norteamérica
south-american-ipDirecciones IP de Sudamérica
asian-ipDirecciones IP de Asia
european-ipDirecciones IP de Europa
Subtarea¿Qué hace?Manual
pcap-importImporta paquetes de un archivo PCAP a un archivo pigstycat doc/pcap-import.md
shellEjecuta pig en modo interactivocat doc/shell.md