www.hping.org
Программа hping2 может генерировать почти любые пакеты TCP/IP, адресованные указанному в командной строке хосту. Программа распространяется свободно на условиях лицензии GPL.
Программа hping2 является мощным инструментом тестирования сетей и может передавать пакеты IP с заданными параметрами, выводя на экран полученные от адресата отклики, подобно программам, работающим с откликами ICMP. Hping2 поддерживает фрагментацию, позволяет задавать произвольное содержимое поля данных пакета, менять размер пакетов и может использоваться для передачи файлов, инкапсулированных с использованием поддерживаемых протоколов. Используя hping2, вы сможете решить множество задач, включая:
-
тестирование межсетевых экранов;
-
сканирование портов с широким выбором вариантов сканирования;
-
проверка производительности сети для различных протоколов;
-
проверка передачи пакетов с различным размером и TOS (тип обслуживания);
-
проверка передачи фрагментированных пакетов;
-
определение Path MTU;
-
передача файлов даже через враждебно настроенные брандмауэры;
-
трассировка пакетов для различных протоколов;
-
определение ОС удаленных хостов;
-
аудит стека TCP/IP.
Кроме того, программа может оказать существенную помощью при изучении протоколов стека TCP/IP.
Синтаксис
hping2 [-hvnqVDzZ012WrfxykQbFSRPAUXYjJBuTG] [-c count] [-i wait] [--fast] [-I interface] [-9 signature] [-a host] [-t ttl] [-N ip id] [-H ip protocol] [-g fragoff] [-m mtu]
[-o tos] [-C icmp type] [-K icmp code] [-s source port] [-p[+][+] dest port][-w tcp window] [-O tcp offset] [-M tcp sequence number] [-L tcp ack] [-d data size] [-E filename]
[-e signature] [--icmp-ipver version] [--icmp-iphlen length] [--icmp-iplen length]
[--icmp-ipid id] [--icmp-ipproto protocol] [--icmp-cksum checksum] [--icmp-ts]
[--icmp-addr] [--tcpexitcode] [--tcp-timestamp] [--tr-stop] [--tr-keep-ttl] [--tr-no-rtt] [--rand-dest] [--rand-source] [--beep] hostname
Опции
Опции общего назначения
Таблица 1 Опции hping2 общего назначения
Опция
|
Описание
|
-h
|
--help
|
Выводит на экран краткую справку о работе с программой.
|
-v
|
--version
|
Выводит на экран номер версии программы и сведения об используемых API
|
-c
|
--count
|
Задает прекращение работы программы после передачи или приема заданного числа пакетов. После передачи последнего пакета hping2 будет ждать отклика в течение заданного в секундах периода COUNTREACHED_TIMEOUT. Значение периода ожидания можно установить, отредактировав заголовочный файл hping2.h.
|
-i
|
--interval
|
Задает период повтора передачи пакетов в секундах или микросекундах (префикс u перед значением интервала). По умолчанию интервал передачи составляет 1 секунду. При использовании hping2 для передачи файлов эта опция оказывает существенное влияние на реальную скорость передачи. Существенное влияние период передачи может оказывать и на сканирование в режимах idle/spoofing.
|
|
--fast
|
Псевдоним для -i u10000, обеспечивающий передачу пакетов с периодом 10 мсек.
|
|
--faster
|
Псевдоним для -i u1, обеспечивающий передачу пакетов с периодом 1 мксек.
|
|
--flood
|
Задает передачу пакетов с максимально возможной скоростью без ожидания приема откликов.
|
-n
|
--numeric
|
Отключает преобразование IP-адресов в символьные имена.
|
-q
|
--quiet
|
Отключает вывод всей информации за исключением стартовой и финишной строки.
|
-I
|
--interface
|
Указывает программе hping2 интерфейс, который будет использоваться для передачи пакетов.
В системах Linux и BSD программа hping2 по умолчанию передает пакеты в интерфейс, используемый для принятого по умолчанию маршрута. В других системах и при отсутствии принятого по умолчанию маршрута hping2 будет использовать первый реальный (не loopback) интерфейс.
|
-V
|
--verbose
|
Задает вывод максимального количества информации. Отклики TCP при использовании этой опции имеют вид:
len=46 ip=192.168.1.1 flags=RA DF seq=0 ttl=255 id=0 win=0
rtt=0.4 ms tos=0 iplen=40 seq=0 ack=1380893504 sum=2010 urp=0
|
-D
|
--debug
|
Включает режим отладки, позволяющий отыскать и разрешить некоторые проблемы, возникающие при работе с hping2. При включенной отладке программа выводит дополнительную информацию об интерфейсе и его параметрах, канальном уровне, разборе опций командной строки, фрагментации и др.
|
-z
|
--bind
|
Позволяет менять для передаваемых пакетов значение поля TTL с помощью клавиш CTRL+Z.
|
-Z
|
--unbind
|
Отключает возможность изменения времени жизни пакетов с помощью CTRL+Z.
|
|
--beep
|
Включает подачу звукового сигнала при поступлении каждого входящего пакета (за исключением сообщений ICMP об ошибках).
|
Опции выбора протокола
По умолчанию программа генерирует пакеты TCP, адресованные в порт 0, использующие окно размером 64 и не имеющие каких-либо флагов TCP. Такие пакеты могут быть весьма полезны для скрытого “прощупывания” удаленного хоста, особенно если последний спрятан за брандмауэром, отбрасывающим пакеты ICMP. Более того, адресованные в порт 0 пакеты без опций зачастую не протоколируются в журнальных файлах проверяемой системы.
Таблица 2 Опции hping2 для выбора протокола
Опция
|
Описание
|
-0
|
--rawip
|
Режим RAW IP, при котором hping2 будет передавать заголовки IP с прицепленными к ним данными, указанными опцией --signature и/или –file. Опция --ipproto дополнительно позволяет задать значение поля протокола IP.
|
-1
|
--icmp
|
Режим ICMP – по умолчанию программа будет передавать пакеты ICMP echo-request, но вы можете выбрать тип и код ICMP с помощью опций --icmptype и --icmpcode.
|
-2
|
--udp
|
Режим UDP – по умолчанию hping2 будет передавать пакеты UDP, адресованные в порт 0. Для управления параметрами заголовков UDP могут служить опции –baseport, --destport, --keep.
|
-8
|
-–scan
|
Режим сканирования. Эта опция должна использоваться с аргументом, описывающим группу портов для сканирования. Номера портов в группе разделяются запятыми, при сканировании непрерывного множества портов можно указывать границы диапазона, используя в качестве разделителя дефис (-). Ключевое слово all задает сканирование всех портов в диапазоне от 0 до 65535, а ключевое слово known задает сканирование всех портов из файла /etc/services.
При задании группы портов можно использовать все варианты одновременно. Например, команда
hping --scan 1-1000,8888,known
обеспечивает сканирование портов диапазона 1 – 1000, порта 8888 и портов, указанных в файле /etc/services. Допускается при задании группы портов использовать знак инверсии (!). Например, команда
hping --scan '1-1024,!known'
обеспечивает сканирование всех портов диапазона 1-1024, за исключением портов, указанных в файле /etc/services.
Программа hping в этом режиме похожа на обычный сканер портов, однако вы сохраняете возможности использования других опций. Например, для SYN-сканирования вы можете задать в командной строке опцию -S. Обеспечивается возможность изменения размера окна TCP, времени жизни пакетов (TTL), фрагментации IP и т. п.
В отличие от многих сканеров hping выводит некоторые интересные сведения о принятых пакетах, включая IP ID, TCP win, TTL и т. п. Не забывайте принимать во внимание эту дополнительную информацию.
|
-9
|
--listen
|
Режим прослушивания - hping2 ждет пакеты, соответствующие заданной сигнатуре (параметр опции) и выводит дамп таких пакетов от завершения сигнатуры до конца пакета.
|
Опции IP
Таблица 3 Опции hping2 для протокола IP
Опция
|
Описание
|
-a
|
--spoof
|
Эта опция позволяет указывать в передаваемых пакетах подставной адрес отправителя, заданный параметром опции. В таких случаях следует помнить, что отклики на ваши пакеты также будут передаваться на подставной адрес и вы не сможете их увидеть. Режим сканирования spoofed/idle позволяет решить эту проблему.
|
|
--rand-source
|
Эта опция позволяет использовать для передаваемых пакетов случайные адреса отправителя. Такой режим может быть полезен при тестировании правил межсетевых экранов и других таблиц, основанных на адресах отправителей.
|
|
--rand-dest
|
Эта опция обеспечивает генерацию пакетов со случайным адресом получателя. Адреса выбираются из диапазона, заданного в командной строке. Например, команда
hping 10.0.0.x ––rand-dest
будет генерировать пакеты, адресованные хостам сети 10.0.0.0/24, а команда
hping x.x.x.x ––rand-dest
будет использовать все адресное пространство IPv4. Если вам трудно определить диапазон адресов, попытайтесь использовать опцию --debug. При использовании этой опции отклики будут приниматься от всего диапазона адресатов.
Отметим, что при использовании этой опции hping не сможет корректно определить интерфейс для передачи пакетов и вам следует использовать опцию –i для указания выходного интерфейса.
|
-t
|
--ttl
|
Задает время жизни генерируемых пакетов (TTL). Эта опция весьма полезна при совместном использовании с опциями --traceroute и --bind.
|
-N
|
--id
|
Задает значение идентификатора IP ID. По умолчанию программа использует случайные значения поля идентификации IP или ID = getpid() & 0xFF (при включенной фрагментации).
|
-H
|
--ipproto
|
Переводит стек IP в режим RAW.
|
-W
|
--winid
|
Обеспечивает корректное отображение идентификаторов IP для откликов от систем Windows.
|
-r
|
--rel
|
Задает вывод значений инкремента идентификаторов вместо самих идентификаторов (см. HPING2-HOWTO). Отметим, что значение инкремента не рассчитывается просто как id[N] – id[N-1], а учитывает потерю пакетов.
|
-f
|
--frag
|
Задает режим фрагментации пакетов, который может быть полезен для тестирования стека IP или проверки пакетных фильтров. По умолчанию используются фрагменты размером 16 байтов. Для установки другого размера фрагментов можно использовать опцию --mtu (см. ниже).
|
-x
|
--morefrag
|
Устанавливает флаг наличия других фрагментов (more fragments)IP. Эта опция полезна в тех случаях, когда хотите получать от тестируемого хоста сообщения ICMP time-exceeded в процессе сборки фрагментов.
|
-y
|
--dontfrag
|
Устанавливает флаг запрета фрагментирования. Эту опцию можно использовать для определения Path MTU.
|
-g
|
--fragoff
|
Задает смещение фрагмента.
|
|
--mtu
|
Задает значение виртуального MTU, отличное от 16, для использования при включенном режиме фрагментации. Пакеты будут делиться на фрагменты автоматически, если их размер превышает значение виртуального MTU.
|
-o
|
--tos
|
Задает шестнадцатеричное значение поля TOS (Type Of Service – тип обслуживания.). Перечень возможных значения можно получить по команде hping --tos help.
|
-G
|
--rroute
|
Задает режим записи маршрута (Record route). В каждом передаваемом пакете устанавливается флаг RECORD_ROUTE, а для возвращенных пакетов выводится содержимое буфера маршрута. Отметим, что размеров заголовка IP достаточно лишь для 9 маршрутных записей и все последующие хосты будут игнорировать или отбрасывать эту опцию. При использовании hping запись маршрута возможна даже в тех случаях, когда тестируемый хост фильтрует пакеты ICMP. Опция записи маршрута относится к протоколу IP, а не ICMP, поэтому запись маршрута возможна даже в режимах TCP и UDP.
|
Опции ICMP
Таблица 4 Опции hping2 для протокола ICMP
Опция
|
Описание
|
-C
|
--icmptype
|
Задает для генерируемых пакетов тип ICMP (по умолчанию - echo request).
|
-K
|
--icmpcode
|
Задает для генерируемых пакетов код ICMP (по умолчанию - 0).
|
|
--icmp-ipver
|
Задает номер версии IP в заголовке пакета IP, содержащемся в поле данных ICMP (по умолчанию – 4).
|
|
--icmp-iphlen
|
Задает размер заголовка пакета IP, содержащегося в поле данных ICMP (по умолчанию – 5; 5 слов по 32 бита = 20 байтов).
|
|
--icmp-iplen
|
Задает значение поля размер пакета IP для заголовка IP, содержащегося в поле данных ICMP. По умолчанию используется реальный размер пакета.
|
|
--icmp-ipid
|
Задает значение поля IP ID для заголовка IP, содержащегося в поле данных ICMP. По умолчанию используется случайное значение.
|
|
--icmp-ipproto
|
Задает значение поля протокола IP для заголовка IP, содержащегося в поле данных ICMP (по умолчанию – TCP).
|
|
--icmp-cksum
|
Задает контрольную сумму пакета ICMP (по умолчанию используется реальное значение контрольной суммы).
|
|
--icmp-ts
|
Псевдоним для --icmptype 13 (передача запросов ICMP timestamp).
|
|
--icmp-addr
|
Псевдоним для --icmptype 17 (передача запросов ICMP address mask).
|
Опции TCP/UDP
Таблица 5 Опции hping2 для протоколов TCP/UDP
Опция
|
Описание
|
-s
|
--baseport
|
Программа hping2 использует порт отправителя для предсказания порядковых номеров откликов. Нумерация начинается с заданного этим параметром значения и увеличивается на такую же величину для каждого передаваемого пакета. При получении пакета порядковый номер может быть рассчитан как replies.dest.port – base.source.port. По умолчанию для базового порта отправителя используется случайный номер и данная опция позволяет задать желаемое значение номера порта. Если вы не хотите, чтобы номер порта увеличивался для каждого переданного пакета, используйте опцию -k (--keep).
|
-p
|
--destport
|
[+][+]dest port
Эта опция задает порт получателя (по умолчанию – 0). Если номер порта задан с префиксом + (например, +1024) номер порта получателя будет увеличиваться с каждым принятым откликом, а префикс ++ задает увеличение номера порта для каждого передаваемого пакета. По умолчанию порт получателя можно менять в интерактивном режиме с помощью клавиш CTRL+z.
|
|
--keep
|
Сохраняет номер порта отправителя для передаваемых пакетов (см. --baseport).
|
-w
|
--win
|
Задает размер окна TCP (по умолчанию – 64).
|
-O
|
--tcpoff
|
Задает смещение данных в пакете TCP. Обычно используется смещение в четверть размера заголовка TCP.
|
-M
|
-–tcpseq
|
Задает порядковый номер TCP.
|
-L
|
--tcpack
|
Задает передачу подтверждений TCP ACK.
|
-Q
|
--seqnum
|
Эта опция может использоваться для сбора порядковых номеров, генерируемых проверяемым хостом – это полезно при анализе предсказуемости порядковых номеров. Ниже показан пример вывода по команде hping2 --seqnum:
HPING uaz (eth0 192.168.4.41): S set, 40 headers + 0 data bytes
2361294848 +2361294848
2411626496 +50331648
2545844224 +134217728
2713616384 +167772160
2881388544 +167772160
3049160704 +167772160
3216932864 +167772160
3384705024 +167772160
3552477184 +167772160
3720249344 +167772160
В первой колонке указывается порядковый номер, а во второй разница порядковых номеров с предыдущим пакетом.
|
-b
|
--badcksum
|
Задает передачу пакетов UDP/TCP с некорректной контрольной суммой.
|
|
--tcp-timestamp
|
Включает опцию TCP timestamp и пытается предсказать частоту обновления временных меток и время работы проверяемого хоста (uptime).
|
-F
|
--fin
|
Устанавливает флаг TCP FIN.
|
-S
|
--syn
|
Устанавливает флаг TCP SYN.
|
-R
|
--rst
|
Устанавливает флаг TCP RST.
|
-P
|
--push
|
Устанавливает флаг TCP PUSH.
|
-A
|
--ack
|
Устанавливает флаг TCP ACK.
|
-U
|
--urg
|
Устанавливает флаг TCP URG.
|
-X
|
--xmas
|
Устанавливает флаг TCP Xmas.
|
-Y
|
--ymas
|
Устанавливает флаг TCP Ymas.
|
Опции для всех протоколов
Таблица 6 Опции hping2 для всех протоколов
Опция
|
Описание
|
-d
|
--data
|
Задает размер генерируемых пакетов без учета заголовков. Hping2 показывает размер генерируемых пакетов в первой строке вывода.
|
-E
|
--file
|
Задает использование указанного файла в качестве источника информации для поля данных генерируемых пакетов.
|
-e
|
--sign
|
Задает включение указанной в качестве параметра сигнатуры в начало поля данных генерируемых пакетов. Если размер сигнатуры превышает размер поля данных, выдается сообщение об ошибке. Если вы не указали размер поля данных, hping будет создавать пакеты с размером заданной сигнатуры (без учета заголовков). Эта опция может без риска пользоваться вместе с опцией --file – оставшаяся после включения сигнатуры часть поля данных пакета будет заполнена информацией из файла.
|
-j
|
--dump
|
Задает вывод шестнадцатеричного дампа принятых пакетов.
|
-J
|
--print
|
Задает вывод дампа ASCII для принятых пакетов.
|
-B
|
--safe
|
Включает безопасный протокол передачи файлов, который обеспечивает повторную передачу потерянных пакетов. Например, для передачи файла с хоста A на хост B /etc/passwd на хосте A следует ввести команду
hping2 host_b --udp -p 53 -d 100 --sign signature --safe --file /etc/passwd
а на хосте B
hping2 host_a --listen signature --safe --icmp
|
-u
|
--end
|
При использовании вместе с опцией --file эта опция обеспечивает выдачу сообщения при достижении конца файла (EOF).
|
-T
|
--traceroute
|
Включает режим трассировки (Traceroute). При использовании этой опции hping2 будет увеличивать значение TTL всякий раз при получении от промежуточных узлов сообщения ICMP о достижении нулевого значения TTL. Эта опция неявно предполагает наличие опций --bind и --ttl 1. Вы можете указать иное время жизни пакетов с помощью опции --ttl.
Начиная с версии 2.0.0 программа обеспечивает при использовании данной опции вывод значений RTT.
|
|
--tr-keep-ttl
|
Сохраняет фиксированное значение TTL для режима traceroute, что позволяет осуществлять мониторинг одного интервала (hop) используемого маршрута. Например, для контроля пятого интервала и изменений RTT можно воспользоваться командой hping2 host --traceroute --ttl 5 --tr-keep-ttl.
|
|
--tr-stop
|
Эта опция задает завершение работы при получении первого пакета, отличного от сообщения ICMP time exceeded. Это позволяет эмулировать поведение утилиты traceroute.
|
|
--tr-no-rtt
|
Отключает расчет и вывод RTT в режиме traceroute.
|
|
--tcpexitcode
|
Задает завершение работы с кодом tcp->th_flag. Эта опция полезна при использовании программы в сценариях, которым требуется информация об откликах проверяемого хоста.
|
Формат вывода для протокола TCP
Стандартный формат вывода для пакетов TCP имеет вид:
len=46 ip=192.168.1.1 flags=RA DF seq=0 ttl=255 id=0 win=0 rtt=0.4 ms
-
ip – IP адрес отправителя.
-
flags – флаги TCP (R - RESET, S - SYN, A - ACK, F – FIN, P - PUSH, U - URGENT, X - 0x40, Y – 0x80).
-
DF – флаг запрета фрагментирования в заголовке IP.
-
seq – порядковый номер пакета (для пакетов TCP/UDP устанавливается с использованием номера порта отправителя, для ICMP совпадает с порядковым номером).
-
id – значение поля идентификации IP ID.
-
win – размер окна TCP.
-
rtt – время кругового обхода в миллисекундах.
При использовании опции -V будут выводиться дополнительные поля, как показано ниже:
len=46 ip=192.168.1.1 flags=RA DF seq=0 ttl=255 id=0 win=0 rtt=0.4 ms tos=0 iplen=40 seq=0 ack=1223672061 sum=e61d urp=0
-
tos – поле типа обслуживания заголовка IP.
-
iplen – поле размера из заголовка IP.
-
seq – порядковый номер пакета из заголовка TCP.
-
ack – порядковый номер подтверждения из заголовка TCP.
-
sum – контрольная сумма из заголовка TCP.
-
urp – значение флага срочности из заголовка TCP.
Формат вывода для пакетов UDP
Стандартный формат вывода для пакетов UDP имеет форму:
len=46 ip=192.168.1.1 seq=0 ttl=64 id=0 rtt=6.0 ms
Значение полей вывода совпадает со значением одноименных полей для протокола TCP.
Формат вывода для пакетов ICMP
Для пакетов ICMP информация выводится в формате, подобном показанному ниже:
ICMP Port Unreachable from ip=192.168.1.1 name=nano.marmoc.net
Каждая строка вывода начинается с идентификатора протокола ICMP, за которым следует тип сообщения ICMP. В поле ip указывается IP-адрес отправителя дейтаграммы IP, содержащей сообщение ICMP, поле name содержит символьное имя хоста-отправителя, определенное с помощью DNS (запись PTR) или ключевое слово UNKNOWN, если имя определить не удалось.
Сообщения ICMP Time exceeded для доставки или сборки фрагментов выводятся с использованием несколько отличающегося формата:
TTL 0 during transit from ip=192.168.1.1 name=nano.marmoc.net
TTL 0 during reassembly from ip=192.70.106.25 name=UNKNOWN
Разница заключается в добавлении поля TTL 0 перед описанием типа сообщения.
Известные проблемы
Даже при указании опций --end и --safe последний пакет, используемый для передачи файла, будет дополнен байтами 0x00.
Данные читаются без учета выравнивания, что может приводить к возникновению проблем в некоторых системах, где поля заголовков TCP/IP не выравниваются по естественн
|