понедельник, 30 марта 2009 г.

Solaris snoop

Запускаем snoop c опцией вывода в файл:


# snoop -o traff.snoop
Using device /dev/bge0 (promiscuous mode)
947 ^C

Читаем файл:


# snoop -i traff.snoop
1 0.00000 onehost -> sechost TCP D=45945 S=22 Push Ack=2115280484 Seq=3528084879 Len=48 Win=49232 ..
2 0.00034 sechost -> onehost TCP D=22 S=45945 Ack=3528084927 Seq=2115280484 Len=0 Win=306 ..
3 0.46298 onehost -> sechost TCP D=49560 S=3389 Push Ack=2640744155 Seq=289264955 Len=19 ..
4 0.00018 192.168.1.27 -> onehost TCP D=49560 S=3389 Push Ack=2640744155 Seq=289264955 Len=19 ..
...

C помощью опции -N можно создать файл хостов, который потом пригодится:


# snoop -i traff.snoop -N
Creating name file traff.snoop.names

# cat traff.snoop.names
192.168.1.1 onehost
192.168.1.2 sechost

А можно не резолвить имена хостов (с помощью опции -r):


# snoop -i traff.snoop -r
Loading name file traff.snoop.names
1 0.00000 192.168.1.1 -> 192.168.1.2 TCP D=45945 S=22 Push Ack=2115280484 Seq=3528084879 Len=48 Win=49232 ..
2 0.00034 192.168.1.2 -> 192.168.1.1 TCP D=22 S=45945 Ack=3528084927 Seq=2115280484 Len=0 Win=306 ..
3 0.46298 192.168.1.1 -> 192.168.1.2 TCP D=49560 S=3389 Push Ack=2640744155 Seq=289264955 Len=19 ..
4 0.00018 192.168.1.27 -> 192.168.1.1 TCP D=49560 S=3389 Push Ack=2640744155 Seq=289264955 Len=19 ..
...

Ищем пакеты до/от хоста onehost:


# snoop -i traff.snoop onehost

Ищем пакеты между хостами onehost и sechost:


# snoop -i traff.snoop onehost sechost

Ищем пакеты от/до onehost или от/до sechost:


# snoop -i traff.snoop 192.168.1.1 192.168.1.2

Фильтруем по номеру порта (из /etc/services) или IP-адресу или имени хоста:


# snoop -i traff.snoop port 22

# snoop -i traff.snoop onehost sechost port 22

# snoop -i traff.snoop onehost sechost port 20 or port 21

# snoop -i traff.snoop rpc nfs
# snoop -i traff.snoop rpc nfs or rpc mount
# snoop -i traff.snoop onehost sechost port 2049
# snoop -i traff.snoop onehost sechost port 2049 or port 111 or rpc nfs or rpc mount

Фильтруем по порту клиента:


# snoop -i traff.snoop port 31337

# snoop -i traff.snoop onehost sechost port 31337
Loading name file traff.snoop.names
1 0.00000 sechost-> onehost SMTP C port=31337
2 0.00003 onehost -> sechost SMTP R port=31337
3 0.00035 sechost -> onehost SMTP C port=31337

Смотрим пакеты с определенным номером (если слишком большой файл):


# snoop -i traff.snoop -p 3000,3005
Loading name file traff.snoop.names
3000 0.00011 onehost -> sechost TCP D=2049 S=43979 Ack=390431550 Seq=222075593 Len=0 Win=24820
3001 0.00024 onehost -> sechost TCP D=2049 S=43979 Fin Ack=390431550 Seq=222075593 Len=0 Win=24820
3002 0.00033 sechost -> onehost TCP D=43979 S=2049 Ack=222075594 Seq=390431550 Len=0 Win=24820
3003 0.00039 sechost -> onehost TCP D=43979 S=2049 Fin Ack=222075594 Seq=390431550 Len=0 Win=24820
3004 0.00475 onehost -> sechost TCP D=2049 S=43979 Ack=390431551 Seq=222075594 Len=0 Win=24820
3005 0.00021 onehost -> sechost TCP D=2049 S=698 Syn Seq=222184946 Len=0 Win=24820 Options=


Применяем различные фильтры:


# snoop -i traff.snoop arp
1 0.00000 192.168.1.2 -> (broadcast) ARP C Who is 192.168.1.1, 192.168.1.1 ?
2 0.34124 192.168.1.2 -> (broadcast) ARP C Who is 192.168.1.1, 192.168.1.1 ?

# snoop -i traff.snoop icmp
1 0.00000 192.168.1.2 -> 192.168.1.1 ICMP Echo request (ID: 5217 Sequence number: 0)
2 0.04178 192.168.1.2 -> 1192.168.1.1 ICMP Echo request (ID: 5219 Sequence number: 0)

# snoop -i traff.snoop udp
1 0.00000 192.168.1.2 -> 192.168.168.255 NIS C DOMAIN_NONACK sechost
2 2.23892 192.168.1.2 -> 192.168.1.255 NIS C DOMAIN_NONACK sechost (retransmit)

Выводим информацию по протоколу:


# snoop -i nfs.snoop -p23 -V
Loading name file nfs.snoop.names
23 0.00000 onehost -> sechost ETHER Type=0800 (IP), size = 206 bytes
23 0.00000 onehost -> sechost IP D=192.168.1.1 S=192.168.55.106 LEN=192, ID=45661, TOS=0x0, TTL=64
23 0.00000 onehost -> sechost TCP D=2049 S=698 Push Ack=390460868 Seq=222184947 Len=152 Win=24820
23 0.00000 onehost -> sechost RPC C XID=1096378150 PROG=100003 (NFS) VERS=3 PROC=19
23 0.00000 onehost -> sechost NFS C FSINFO3 FH=0222

# snoop -i nfs.snoop -p23 -v
Loading name file nfs.snoop.names
......
ETHER:
IP: ----- IP Header -----
IP:
IP: Version = 4
IP: Header length = 20 bytes
IP: Type of service = 0x00
IP: xxx. .... = 0 (precedence)
IP: ...0 .... = normal delay
IP: .... 0... = normal throughput
IP: .... .0.. = normal reliability
IP: .... ..0. = not ECN capable transport
IP: .... ...0 = no ECN congestion experienced
IP: Total length = 192 bytes
IP: Identification = 45661
IP: Flags = 0x4
IP: .1.. .... = do not fragment
IP: ..0. .... = last fragment
IP: Fragment offset = 0 bytes
IP: Time to live = 64 seconds/hops
IP: Protocol = 6 (TCP)
IP: Header checksum = 2175

Ищем Seq/Ack номер:


# snoop -i traff.snoop -V | grep TCP
1 0.00000 onehost -> sechost TCP D=8080 S=32867 Syn Seq=317534064 Len=0 Win=49640 Options=
2 0.00049 sechost -> onehost TCP D=32867 S=8080 Syn Ack=317534065 Seq=178080057 Len=0 Win=49640 Options=
3 0.00008 onehost -> sechost TCP D=8080 S=32867 Ack=178080058 Seq=317534065 Len=0 Win=49640
4 0.00377 onehost -> sechost TCP D=8080 S=32867 Push Ack=178080058 Seq=317534065 Len=209 Win=49640


Определяем время прохождения пакета:


# snoop -i traff.snoop -ta -p9,13
Loading name file traff.snoop.names
5 18:10:54.71861 onehost -> sechost HTTP (proxy) R port=41579
6 18:10:55.03142 onehost -> sechost HTTP HTTP/1.1 200 OK
7 18:10:55.03168 sechost -> onehost HTTP (proxy) C port=41579
8 18:10:56.37426 onehost -> sechost HTTP (body)
9 18:10:56.47427 sechost -> onehost HTTP (proxy) C port=41579

Определяем время передачи данных по FTP:


# snoop -i ftp.snoop -tr port 20 | tail -1
123 1.347823 192.168.1.1 -> 192.168.1.2 FTP-DATA C port=32725

Итого: 1.347823 sec

Просматриваем содержимое пакета:


# snoop -i traff.snoop -p4 -x0

0.00778 onehost -> sechost HTTP GET http://sunhelp.ru/files/memstat.tar.gz HTTP/1.1

0: 0008 a4d2 5e40 0800 20a0 166a 0800 4500 ....^@.. ..f..Y.
16: 00f9 dc05 4000 4006 b0be 0a0e 025f 819e ...@.@......_..
32: 1f30 8063 1f90 12ed 2f71 0a9d 493a 5018 .N.d..../w..I:P.
48: c1e8 d859 0000 4745 5420 6874 7470 3a2f ...Y..GET http:/