Утилита hping3 предназначена для отправки произвольных TCP/IP пакетов, что позволяет выполнять исследование и диагностику сети.
Об утилите
Утилита hping3 — это сетевой инструмент, способный отправлять пакеты TCP/IP и отображать целевые ответы, как это делает программа ping с ICMP.
Эта утилита умеет обрабатывать фрагментацию, отправлять пакеты с произвольными данными и флагами, менять размеры пакетов, и даже может использоваться для передачи файлов. С помощью этой утилиты вы можете выполнять, например, следующие действия:
- проверять правила брандмауэра;
- сканировать порты хоста в сети;
- тестировать производительность сети с использованием различных протоколов;
- передавать файлы в обход брандмауэра;
- выполнять трассировку по определённым портам;
- использовать для изучения TCI/IP.
Утилита устанавливается из стандартных репозиториев:
# apt install hping3
Обычный ping
Выполнить обычный icmp ping можно с помощью опции --icmp
. Дополнительно можем указать количество отправляемых пакетов с момощью опции -c <число>
, без этой опции пинг будет бесконечным. Также можем указать размер данных в пакете с помощью опции -d <число байт>
.
$ sudo hping3 -c 4 -d 100 --icmp 192.168.0.35 HPING 192.168.0.35 (ens18 192.168.0.35): icmp mode set, 28 headers + 100 data bytes len=128 ip=192.168.0.35 ttl=64 id=37431 icmp_seq=0 rtt=3.9 ms len=128 ip=192.168.0.35 ttl=64 id=37468 icmp_seq=1 rtt=3.8 ms len=128 ip=192.168.0.35 ttl=64 id=37559 icmp_seq=2 rtt=3.8 ms len=128 ip=192.168.0.35 ttl=64 id=37662 icmp_seq=3 rtt=3.7 ms --- 192.168.0.35 hping statistic --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 3.7/3.8/3.9 ms
В примере выше мы отправляет 4 пакета icmp с заголовками в 28 байт и 100 байт данных.
Ping TCP порта
Пропинговать TCP/IP порт можно пакетами с флагом syn, это делается опцией --syn
, который нужно указать вместо --icmp
.
Дополнительно мы можем указать порт назначения с помощью опции -p <номер порта>
.
И ещё можем использовать опцию -V
, чтобы получать больше информации:
$ sudo hping3 -V -c 4 -d 200 -p 22 --syn 192.168.0.35 using ens18, addr: 192.168.0.27, MTU: 1500 HPING 192.168.0.35 (ens18 192.168.0.35): S set, 40 headers + 200 data bytes len=44 ip=192.168.0.35 ttl=64 DF id=0 tos=0 iplen=44 sport=22 flags=SA seq=0 win=64240 rtt=7.9 ms seq=1637605271 ack=613658406 sum=637a urp=0 len=44 ip=192.168.0.35 ttl=64 DF id=0 tos=0 iplen=44 sport=22 flags=SA seq=1 win=64240 rtt=7.8 ms seq=1068505220 ack=1772243286 sum=9602 urp=0 len=44 ip=192.168.0.35 ttl=64 DF id=0 tos=0 iplen=44 sport=22 flags=SA seq=2 win=64240 rtt=7.8 ms seq=2426710448 ack=798929700 sum=9602 urp=0 len=44 ip=192.168.0.35 ttl=64 DF id=0 tos=0 iplen=44 sport=22 flags=SA seq=3 win=64240 rtt=7.7 ms seq=4126088940 ack=274957911 sum=9602 urp=0 --- 192.168.0.35 hping statistic --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 7.7/7.8/7.9 ms
Здесь мы отправляем пакеты с флагом S, размер заголовка пакетов равен 40 байтам, а размер данных 200 байтам.
Среднее время за которое пакет был отправлен и вернулся ответ = 7.8 ms.
Сканирование портов
Мы можем просканировать порты с помощью опции --scan
, затем нужно указать диапазон портов или служебное слово known
(все общеизвестные порты). Дополнительно нужно указать какими пакетами выполнять сканирование, начинать исследование лучше с --syn
.
$ sudo hping3 --scan known --syn 192.168.0.35 Scanning 192.168.0.35 (192.168.0.35), port known 264 ports to scan, use -V to see all the replies +----+-----------+---------+---+-----+-----+-----+ |port| serv name | flags |ttl| id | win | len | +----+-----------+---------+---+-----+-----+-----+ 22 ssh : .S..A... 64 0 64240 44 80 http : .S..A... 64 0 64240 44
Из вывода видно что на хосте 192.168.0.35 прослушиваются следующие порты: 22 (ssh) и 80 (http).
Трасировка пакетов
Для того чтоб ывыполнить трассировку до определённого сетевого хоста нужно воспользоваться опцией --traceroute
. Дополнительно вы можете указать протокол, с помощью которого вы хотите выполнять трассировку,
- это может быть icmp, тогда указываем
--icmp
; - или TCP/IP порт, тогда указываем
--syn -p <номер порта>
.
Пример для icmp:
$ sudo hping3 --traceroute --icmp 1.1.1.1 HPING 1.1.1.1 (ens18 1.1.1.1): icmp mode set, 28 headers + 0 data bytes hop=1 TTL 0 during transit from ip=182.168.0.10 name=_gateway hop=1 hoprtt=3.9 ms hop=2 TTL 0 during transit from ip=91.205.125.93 name=UNKNOWN hop=2 hoprtt=3.9 ms hop=3 TTL 0 during transit from ip=217.150.52.254 name=vrz02.vrz25.transtelecom.net hop=3 hoprtt=3.8 ms hop=4 TTL 0 during transit from ip=217.150.55.234 name=mskn15-Lo1.transtelecom.net hop=4 hoprtt=11.8 ms hop=5 TTL 0 during transit from ip=188.43.3.65 name=Cloudflare-msk-gw.transtelecom.net hop=5 hoprtt=15.7 ms len=28 ip=1.1.1.1 ttl=59 id=42837 icmp_seq=5 rtt=15.7 ms len=28 ip=1.1.1.1 ttl=59 id=62159 icmp_seq=6 rtt=15.6 ms len=28 ip=1.1.1.1 ttl=59 id=22257 icmp_seq=7 rtt=15.5 ms --- 1.1.1.1 hping statistic --- 9 packets transmitted, 9 packets received, 0% packet loss round-trip min/avg/max = 3.8/11.3/15.7 ms
Пример для TCP:
$ sudo hping3 --traceroute --syn -p 53 1.1.1.1 HPING 1.1.1.1 (ens18 1.1.1.1): S set, 40 headers + 0 data bytes hop=1 TTL 0 during transit from ip=192.168.0.10 name=_gateway hop=1 hoprtt=3.9 ms hop=2 TTL 0 during transit from ip=91.205.125.93 name=UNKNOWN hop=2 hoprtt=3.8 ms hop=3 TTL 0 during transit from ip=217.150.52.254 name=vrz02.vrz25.transtelecom.net hop=3 hoprtt=3.8 ms hop=4 TTL 0 during transit from ip=217.150.55.234 name=mskn15-Lo1.transtelecom.net hop=4 hoprtt=19.7 ms hop=5 TTL 0 during transit from ip=188.43.3.65 name=Cloudflare-msk-gw.transtelecom.net hop=5 hoprtt=19.7 ms len=44 ip=1.1.1.1 ttl=59 DF id=0 sport=53 flags=SA seq=5 win=64240 rtt=11.6 ms len=44 ip=1.1.1.1 ttl=59 DF id=0 sport=53 flags=SA seq=6 win=64240 rtt=11.6 ms DUP! len=44 ip=1.1.1.1 ttl=59 DF id=0 sport=53 flags=SA seq=5 win=64240 rtt=1067.6 ms len=44 ip=1.1.1.1 ttl=59 DF id=0 sport=53 flags=SA seq=7 win=64240 rtt=11.5 ms DUP! len=44 ip=1.1.1.1 ttl=59 DF id=0 sport=53 flags=SA seq=6 win=64240 rtt=1075.6 ms --- 1.1.1.1 hping statistic --- 9 packets transmitted, 12 packets received, -33% packet loss round-trip min/avg/max = 3.8/273.0/1075.6 ms
Передача текстового файла по ICMP
Передать текстовый файл по ICMP можно таким образом, на первом хосте запускаете ping. Указываете размер данных пакета (-d 200
), чтобы туда влез файл, хотя если не влезет, то просто разделится на несколько пакетов. Подписываете файл с помощью секретной фразы (--sign <фраза>
). И указываете, какой файл отправлять (--file /root/test.txt
). Если файл влезает в 1 пакет, то можем добавить опцию -с 1
.
На принимающей стороне нужно запустить hping3 в режиме прослушивания с помощью опции --listen
. Дополнительно нужно указать интерфейс с помощью опции -I <интерфейс>
, и секретную фразу.
Запускаем на принимающей стороне:
$ sudo hping3 -I eth0 --listen secret --icmp
Запускаем на передающей стороне :
$ sudo hping3 --icmp -c 1 -d 200 --sign secret --file /home/alex/test.txt 192.168.0.35 HPING 192.168.0.35 (ens18 192.168.0.35): icmp mode set, 28 headers + 200 data bytes [main] memlockall(): No such file or directory Warning: can't disable memory paging! len=228 ip=192.168.0.35 ttl=64 id=23726 icmp_seq=0 rtt=3.9 ms --- 192.168.0.35 hping statistic --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 3.9/3.9/3.9 ms
На принимающей стороне видим текст из файла.
Итог
В итоге повторим рассмотренные здесь опции:
--icmp
— отправка icmp пакетов;--syn -p <порт назначения>
— отправка TCP пакетов с флагом SYN;-c <число пакетов>
— количество отправляемых пакетов;-d <размер>
— размер данных в пакете, указывается в байтах;-scan <диапазон портов или known>
— режим сканирования;-I <интерфейс>
— выбор исходящего интерфейса;--sign <секретная фраза>
— подпись с помощью секретной фразы, используется для передачи файлов;--file <файл>
— файл для передачи;--traceroute
— режим трассировки;-V
— более подробный вывод.
Вообще утилита умеет намного больше, но так как я не мануал пишу, а знакомлю вас с утилитой, то на этом всё!
Остальные статьи по утилитам для Linux администраторов вы найдёте здесь.