ICMP: ping/hping, tracert/traceroute

ICMP NOTES

  • ICMP types, а еще лучше описаны все на сайте IANA
    • 0 – echo reply
    • 8 – echo (PING) request
    • 3 – unreahable (net/host/port/etc)
serv:~# netstat -us
IcmpMsg:
InType0: 10144
InType3: 2514
InType8: 540567
OutType0: 540567
OutType3: 2472
OutType8: 10224
<output omitted>
  • обычно блокируются все типы кроме 0 и 8-го, особенно это касается 
    • redirect – redirection, части используется в атаках
    • unreachable типа 3
Пример
0 Net Unreachable [RFC792]
1 Host Unreachable [RFC792]
2 Protocol Unreachable [RFC792]
3 Port Unreachable
PING

Параметры по умолчанию

  • Huawei: не 32 байта, TTL 255, отправляется 4 пакета
  • Windows: 32 bytes, TTL 64 для внешних пакетов и 128 для 127.0.0.1, отправляется 4 пакета
  • Unix: 64 bytes, TTL 64, отправляется анлим пакетов

Ping count и результат вида 1 (success)/0 (fail) на основе количества принятых ответов.

ping -c 1 172.31.8.200 | grep loss | awk '{print $4}'

Ping with timestamp

# UNIX
ping -D 8.8.8.8
fping -c 10 -D 8.8.8.8

# HUMAR READABLE
ping -D google.com | while read str; do dt=$(echo $str | awk '{print $1}' | tr -d '[]'); dt_new=$(date +"%T.%3N" -d @$dt 2>/dev/null); echo "$dt_new --- $str"; done
ping google.com | xargs -L 1 -I '{}' date '+%Y-%m-%d %H:%M:%S.%3N: {}'

Ping with interval less than second

ping -i 0.01 -D 10.10.10.10

Ping по hex адресу (поддерживается как в Windows, так и Linux – каждое число преобразуется из hex в dec)

C:\Users\w>ping 0x329b0117
Pinging 50.155.1.23 with 32 bytes of data:

HPING3

С помощью утилиты можно генерировать трафик, флудить, IP spoofing, DOS’ить (хотя и стандартный чуть умеет – генерировая пакет с миллисекудной скорость между пакетами). Идет как стандартная утилита в Kali Linux.

hping3 --flood -p 80 -S 192.168.1.1
hping3 -c 10000 -d 120 -S -w 64 -p 21 --flood --rand-source 192.168.1.37
tracert/traceroute
  • Более подробно (чем ниже) разница между tracert и traceroute описана тут.

как работает tracert – Посылаются запросы (traceroute default udp/with -I icmp, tracert icmp only) к каждому узлу с увеличивающимся TTL, каждый промежуточный узел возвращает TTL expered, а в конце должна прийти ошибка о недоступности порта (traceroute: endpoint PORT unreachable/TCP ack) или ответ icmp (tracert: end point ICMP reply) тогда все ок трассировка завершена.

В дистрибутивах Linux по умолчанию traceroute использует UDP пакеты. Вы можете использовать ІСМР пакеты включив флаг -І.
http://www.infocentr.ru/~bugaga/tcpip/adv35.html 
Разница в том, что traceroute посылает UDP-датаграммы, a tracert - эхо-запросы ICMP. Программа tracert работает аналогично traceroute, но для определения маршрута используются не UDP-датаграммы, а эхо-запросы протокола ICMP (как в программе ping). В результате хост-получатель возвращает эхо-ответ ICMP, а не сообщение о недоступности порта. Промежуточные маршрутизаторы по-прежнему возвращают сообщение «истекло время в пути».
http://en.wikipedia.org/wiki/Traceroute On Unix-like operating systems, the traceroute utility by default uses User Datagram Protocol (UDP) datagrams with destination port numbers from 33434 to 33534. 
http://sysadmins.ru/post8292431.html
подскажите кто знает: traceroute на Nortel Passport, особенно на 8600, посылает UDP или ICMP пакеты? был бы снифер, вопроса бы не возникло. Впрочем, нашлась документация, в ней написано -
UDP... cpdump -ni fxp0 ! stp and ! arp 12:07:54.482522 IP 10.90.90.90.37048 > 10.90.90.99.33435: UDP, length 12 12:07:54.482548 IP 10.90.90.99 > 10.90.90.90: ICMP 10.90.90.99 udp port 33435 unreachable, length 36

Причем для ICMP/tracert был даже отдельный тип ICMP – 30ый.

Type 30 — Traceroute (Deprecated)
Reference
[RFC1393][RFC6918]

Кроме того утилита traceroute позволяет сделать трассировку с указанием порта назначения как TCP, так и UDP. С использованием TCP SYN пакетов:

sudo traceroute -T -p 22 -w 1 -n 100.0.0.2

C использованием UDP пакетов:

sudo traceroute -U -p 22 -w 1 -n 100.0.0.2


– Почему некоторые сайты не пингуются, но трассировка до них доходит нормально, ведь и ping и tracert используют ICMP?
Traceroute может использовать кроме ICMP в зависимости от ОС разные протоколы, тогда как PING лишь ICMP. Лочим ICMP, а трассу кидаем без использования ICMP.

 

Leave a Reply