Snoop - стандартный сниффер Solaris. Он эквивалентен, а по многим параметрам и превосходит TCPdump. Формат файла (RFC 1761) отличен от PCAP, конвертация возможна с помощью Ethereal утилиты editcap.
Наиболее полезные опции:
[ -d device ] # Network interface to snoop (le?, ie?, bf?, tr?)
[ -s snaplen ] # Truncate packets
[ -c count ] # Quit after count packets
[ -P ] # Turn OFF promiscuous mode
[ -D ] # Report dropped packets
[ -S ] # Report packet size
[ -i file ] # Read previously captured packets
[ -o file ] # Capture packets in file
[ -n file ] # Load addr-to-name table from file
[ -N ] # Create addr-to-name table
[ -t r|a|d ] # Time: Relative, Absolute or Delta
[ -v ] # Verbose packet display
[ -V ] # Show all summary lines
[ -p first[,last] ] # Select packet(s) to display
[ -x offset[,length] ] # Hex dump from offset for length
[ -C ] # Print packet filter code
[ -q ] # Suppress printing packet count
[ -r ] # Do not resolve address to name
[ filter expression ]
Смотрим траффик между двумя хостами:
Исследуем broadcast-пакеты:
Смотрим пакеты и заголовки broadcast более детально:
Смотрим пакеты от или до хоста 128.50.1.250, из размер и время:
#snoop -S -ta 128.50.1.250
Смотрим пакеты от или до хоста 128.50 .1 .250 с детальным выводом:
Чтобы не пропустить не один пакет, направляем вывод в файл:
# snoop -o /tmp/snooper -V 128.50.1.250
Исследуем траффик из полученного файла:
Перенаправляем вывод snoop на утилиту egrep, чтобы отфильтровать различные протоколы или какие-либо части траффика.
egrep -iv 'nfs |ack |contin |ftp' игнорирует регистр и выводит все строки за исключением тех, которые содержат 'nfs', 'ack', 'contin', или 'ftp':
# snoop | egrep -iv 'nfs |ack |contin |ftp'
Можно и нужно использовать фильтры, состоящие из серии boolean-примитивов, разделенных операторами AND, OR, NOT.
Наиболее используемые:
- host - имя хоста. Например, использование "pinky" выводит пакеты, получаемые или направляемые на хост pinky, "pinky and dinky" выводит пакеты, бегающие между хостами pinky и dinky.
- inet или inet6 - snoop ищет пакты с IPv4 адресами или, соответственно IPv6 адресами.
- ipaddr или etheraddr - IP или MAC адрес, например:
o "129.144.40.13" - snoop выведет все пакеты с данным IP ;
o "2::9255:a00:20ff:fe73:6e35" - все пакеты с данным IPv6 адресом;
o "8:0:20:f:b1:51" - все пакеты с данным ethernet адресом.
- from или src - указывает, что host, net, ipaddr, etheraddr, port или rpc примитив должен быть только исходным адресом.
to или dst - указывает, что host, net, ipaddr, etheraddr, port или rpc примитив должен быть только адресом назначения.
- ip, ip6, arp, rarp - все пакеты соответствующего типа.
- broadcast - если пакеты относятся к broadcast - то же, что и "ether[2:4] = 0xffffffff".
- multicast - если пакеты относятся к multicast. То же, что и "ether[0] & 1 = 1".
- greater length - если размер пакета больше чем указанный.
- less length - если размер пакета меньше чем указанный.
- udp, tcp, icmp, icmp6, ah, esp - если IP или IPv6 протокол данного типа.
- net net - если адрес - адрес сети.
- port port - если порт назначения или исходный порт - порт. Это может быть номер или имя из /etc/services. tcp или udp примитивы можно использовать для фильтрации TCP или UDP портов.
Например, отфильтруем траффик между funky и pinky для tcp или udp на порт 80:
# snoop funky and pinky and port 80 and tcp or udp
Более эффективный путь:
# snoop funky and pinky and (tcp or udp) and port 80