Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
pig — Инструмент для формирования сетевых пакетов в Linux. | Kitploit
Инструменты/GitHubGitHub/rafael-santiago/pig
Обход IDS/IPSСетевая безопасностьТестирование на Проникновение
GitHubrafael-santiago/pig

pig

Инструмент для формирования сетевых пакетов в Linux.

Репозиторий
4794135 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Pig

Pig (что можно понять как Packet intruder generator — генератор вторжений пакетов) — это инструмент для создания пакетов в Linux.
Вы можете использовать Pig для тестирования ваших IDS/IPS и прочих средств.

Pig содержит набор готовых известных сигнатур атак, который можно расширить более специфичными вещами в соответствии с вашими требованиями.

На данный момент можно создавать сигнатуры IPv4 с транспортным уровнем на основе TCP, и . Также можно создавать сигнатуры на основе протокола , а также собирать пакет, начиная с его кадра .

UDP
ICMP

ARP
Ethernet

Если вы попали сюда по моей статье в 2600 из выпуска SPRING 2016 issue,
продолжайте читать следующие разделы документации, потому что этот маленький Pig с тех пор развивался.

Как клонировать этот репозиторий?

Это очень просто:

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

Как собрать?

Для сборки pig нужно использовать Hefesto. После выполнения
шагов по установке Hefesto в вашей системе перейдите в подкаталог pig с именем src и выполните
следующую команду:

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

После этой команды вы должны найти бинарный файл pig по пути src/bin. Вы можете использовать бинарник относительно
src/bin или установить его.

Если по какой-то причине у вас возникли проблемы со сборкой, попробуйте прочитать некоторые замечания в BUILD.md.

Как установить?

Для установки нужно находиться внутри подкаталога src и выполнить:

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

Для удаления, находясь в подкаталоге src, выполните:

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

Файлы pigsty

Файлы Pigsty — это обычные текстовые файлы, в которых можно определить набор сигнатур пакетов. Существует определённый синтаксис,
который необходимо соблюдать. Вот пример файла 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!!" ]

В основном все данные сигнатуры должны находиться между квадратными скобками: [ ... ].

Внутри этой области информация задаётся по схеме поле = данные.

Если у вас есть опыт работы с компьютерными сетями, то большинство полей, перечисленных в Таблице 1,
вероятно, имеют для вас ясное значение. Вы должны использовать эти поля для создания своих сигнатур.

Таблица 1: Поля сигнатур pig.

ПолеЗначениеПротоколТип данныхПример определения
signatureИмя сигнатуры-строкаsignature = "Udp flood"
eth.hwdstMAC назначения EthernetEthernetMACeth.hwdst = "00:de:ad:be:ef:00"
eth.hwsrcMAC источника EthernetEthernetMACeth.hwsrc = "00:de:ad:be:ef:00"
eth.typeEther typeEthernetчислоeth.type = 0x0800
eth.payloadПолезная нагрузка EthernetEthernetстрокаeth.payload = "f\x00ob\x04r"
ip.versionВерсия IPIPчислоip.version = 4
ip.ihlДлина заголовка InternetIPчислоip.ihl = 5
ip.tosТип сервисаIPчислоip.tos = 0
ip.tlenОбщая длинаIPчислоip.tlen = 20

При создании сигнатуры необязательно указывать все данные. Если указать только наиболее важные части пакета,
остальные части будут заполнены значениями по умолчанию. Контрольные суммы всегда пересчитываются.

Совет: загляните в подкаталог pigsty. Вы найдёте там множество файлов сигнатур и увидите, что
определять новые очень просто.

Указание IP-адресов по географическому признаку

Да, это возможно. Чтобы использовать эту возможность, просто укажите значения, перечисленные в Таблице 2,
в полях типа IP-адрес.

Таблица 2: IP-адреса по географическим зонам.

Используемое значениеЗначение
north-american-ipIP-адреса из Северной Америки
south-american-ipIP-адреса из Южной Америки
asian-ipIP-адреса из Азии
european-ipIP-адреса из Европы

Указание собственных адресов

В любом поле типа IP-адрес следует использовать значение user-defined-ip. Обратите внимание, что в этом случае
нужно использовать параметр командной строки --targets. Подробнее см. в разделе Использование pig.

Внесите свой вклад, отправляя новые сигнатуры пакетов

Если вы создаёте файлы pigsty, которые, по вашему мнению, актуальны не только в вашем окружении, откройте pull request,
чтобы включить эти полезные файлы сюда. Заранее спасибо!

Использование pig

Использование Pig очень простое — необходимо указать четыре основных параметра:

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

Хотите узнать больше о каждом параметре? Тогда поехали:

  • Параметр --signatures принимает список путей к файлам pigsty.
  • Параметр --gateway — это место, где вы указываете адрес вашего шлюза. Имейте в виду, что pig генерирует (или по крайней мере пытается сгенерировать) также кадры Ethernet. Из-за этого адрес шлюза довольно важен для правильного составления данных уровня-1.
  • Параметр --net-mask для вопросов маршрутизации должен получить вашу маску сети.
  • Параметр --lo-iface — это место, где следует указать имя локального сетевого интерфейса, который вы будете использовать для «слива» сгенерированных пакетов.
  • Параметр --no-gateway указывает, что никакие пакеты не будут отправляться за пределы сети.

Предположим, мы хотим генерировать трафик на основе DDoS:

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

Теперь мы хотим всё перемешать:

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

Дополнительные параметры

Определение тайм-аутов между отправками сигнатур

Для этого используйте параметр --timeout=<мс>

Подавление эха

Используйте параметр --no-echo.

Определение целей

Используйте параметр --targets. Вы можете указать список на основе точных IP-адресов, масок IP и CIDR.

Взгляните:

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-gateway. При использовании параметра --no-gateway не нужно указывать адрес шлюза,
потому что пакеты не будут выходить за пределы текущего сегмента. Соответственно, указывать маску сети также становится неактуально.

Например:

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

В приведённом выше примере кадр Ethernet больше не будет ответственностью pig. По этой причине pig не будет жаловаться
на отсутствие параметров --gateway и --net-mask.

Параметр --no-gateway очень удобен в случаях, когда нужно сгенерировать трафик ARP. Посмотрите другой
документ, объясняющий, как выполнить ARP-спуфинг с pig.

Отправка только одной сигнатуры и возврат

Возможно, вам нужно отправить только одну сигнатуру и затем вернуться к вызывающему коду, чтобы проверить, что произошло после. Такое
требование часто возникает, когда это приложение используется как поддержка для системных тестов или модульных тестов. Поэтому, если вам нужно
это сделать, попробуйте использовать параметр --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

После выполнения этой команды pig выберет только одну сигнатуру из файла syn-scan.pigsty, попытается отправить её и завершит работу.
Если в процессе произойдёт ошибка, pig завершится с кодом выхода, равным 1, в противном случае pig завершится
с кодом выхода, равным 0.

Указание режима обхода pigsty

Основной режим работы pig — это бесконечный цикл, который выплевывает тонны пакетов в сеть с соблюдением ранее
заданного тайм-аута.

Вы можете определить, как pig перебирает загруженные пакеты для их отправки, используя параметр --loop=<mode>. На данный момент
доступны два режима: random (по умолчанию) и sequential.

Режим sequential будет повторять сигнатуры при достижении конца списка загруженных сигнатур пакетов.

Подзадачи

Подзадачи — это полезные небольшие задачи, связанные с созданием пакетов, которые встроены в pig для помощи вам
в сеансе создания. Эти задачи можно вызвать с помощью параметра --sub-task=<task-name>.

По сути, подзадачи являются подпрограммами, имеют свои собственные особенности, и поэтому
подробности о них приведены в их собственных руководствах. См. Таблицу 3 для перехода к ним.

Таблица 3: Подзадачи pig.

ПодзадачаЧто она делает?Руководство
pcap-importИмпорт пакетов из PCAP-файла в файл pigstycat doc/pcap-import.md
shellЗапуск pig в интерактивном режимеcat doc/shell.md

Трюки с Pig

От кадра Ethernet до самого верхнего уровня...

До сих пор вы можете собирать пакеты на основе IPv4 с UDP или TCP на транспортном уровне. Вы также можете собирать
пакеты ARP.

Однако вы также можете собирать пакеты, начиная с кадра Ethernet. Приятно то, что это даёт возможность
создавать практически что угодно поверх полезной нагрузки Ethernet.

Например, даже несмотря на то, что pig пока не предлагает поддержку готовой сборки IPv6, вы всё равно можете собрать
его, используя сырой pigsty на основе Ethernet. Посмотрите:

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

Принимая во внимание, что включение MAC-адресов назначения и источника в «Ethernet pigsty» является
необязательным, мы можем выполнить задачу даже без использования каких-либо расширенных полей.

Это удобно, когда вам нужно тестировать новые протоколы в вашей среде и прочие аномальные забавные вещи. В таком сыром виде
pig может оставаться полезным для вас.

Тестирование pig с нуля

Сохраните следующие данные как "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" ]

На другом tty запустите netcat в UDP-режиме для прослушивания соединений на порту 1008:

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

Теперь запустите pig, используя "oink.pigsty", указав в качестве цели 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

netcat должен начать получать несколько oink, и... да, поздравляю!! pig запущен и работает в вашей системе! ;)

Попробуйте прослушать вашу сеть, чтобы получить больше информации об этих UDP-пакетах, которые циркулируют по вашим интерфейсам...

Получайте удовольствие!

Скачать инструмент
ip.idID пакетаIPчислоip.id = 0xbeef
ip.flagsФлаги IPIPчислоip.flags = 4
ip.offsetСмещение фрагментаIPчислоip.offset = 0
ip.ttlВремя жизниIPчислоip.ttl = 64
ip.protocolПротоколIPчислоip.protocol = 6
ip.checksumКонтрольная суммаIPчислоip.checksum = 0
ip.srcАдрес источникаIPIP-адресip.src = 192.30.70.3
ip.dstАдрес назначенияIPIP-адресip.dst = 192.30.70.3
ip.payloadСырая полезная нагрузка IPIPстрокаip.payload = "\x01\x02"
tcp.srcПорт источникаTCPчислоtcp.src = 80
tcp.dstПорт назначенияTCPчислоtcp.dst = 21
tcp.seqnoПорядковый номерTCPчислоtcp.seqno = 10202
tcp.acknoНомер подтвержденияTCPчислоtcp.ackno = 10200
tcp.sizeДлина TCPTCPчислоtcp.size = 4
tcp.reservЗарезервированное поле TCPTCPчислоtcp.reserv = 0
tcp.urgФлаг urg. TCPTCPбитtcp.urg = 0
tcp.ackФлаг ack. TCPTCPбитtcp.ack = 1
tcp.pshФлаг psh. TCPTCPбитtcp.psh = 0
tcp.rstФлаг rst. TCPTCPбитtcp.rst = 0
tcp.synФлаг syn. TCPTCPбитtcp.syn = 0
tcp.finФлаг fin. TCPTCPбитtcp.fin = 0
tcp.wsizeРазмер окна TCPTCPчислоtcp.wsize = 0
tcp.checksumКонтрольная суммаTCPчислоtcp.checksum = 0
tcp.urgpУказатель срочностиTCPчислоtcp.urgp = 0
tcp.payloadПолезная нагрузкаTCPстрокаtcp.payload = "\x01abc"
udp.srcПорт источникаUDPчислоudp.src = 53
udp.dstПорт назначенияUDPчислоudp.dst = 7
udp.sizeДлина UDPUDPчислоudp.size = 8
udp.checksumКонтрольная суммаUDPчислоudp.checksum = 0
udp.payloadПолезная нагрузкаUDPчислоudp.payload = "boo!"
icmp.typeТип ICMPICMPчислоicmp.type = 0
icmp.codeКод ICMPICMPчислоicmp.code = 0
icmp.checksumКонтрольная суммаICMPчислоicmp.checksum = 0
icmp.payloadПолезная нагрузкаICMPстрокаicmp.payload = "ping!"
arp.hwtypeТип аппаратного обеспечения ARPARPчислоarp.hwtype = 0x1
arp.ptypeТип протокола ARPARPчислоarp.ptype = 0x0800
arp.hwlenДлина аппаратного адреса ARPARPчислоarp.hwlen = 6
arp.opcodeКод операции ARPARPчислоarp.opcode = 2
arp.hwsrcАппаратный адрес источника ARPARPMACarp.hwsrc = "de:ad:be:ef:0:0"
arp.psrcПротокольный адрес источника ARPARPIP-адресarp.psrc = 192.30.70.3
arp.hwdstАппаратный адрес назначения ARPARPMACarp.hwdst = "de:ad:be:ef:0:0"
arp.pdstПротокольный адрес назначения ARPARPIP-адресarp.pdst = 192.30.70.3