天天看點

tcpdump/HTTP協定實踐

<b>tcpdump/HTTP協定</b><b>實踐</b>

500)this.width=500;" border="0" /&gt;

用戶端:

CLOSED-&gt;SYN_SENT-&gt;ESTABLISHED-&gt;FIN_WAIT_1-&gt;FIN_WAIT_2-&gt;TIME_WAIT-&gt;CLOSED

服務端:

CLOSED-&gt;LISTEN-&gt;SYN收到-&gt;ESTABLISHED-&gt;CLOSE_WAIT-&gt;LAST_ACK-&gt;CLOSED

# tcpdump host 192.168.64.71 and port 80 -n

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth2, link-type EN10MB (Ethernet), capture size 96 bytes

10:13:01.617505 IP 10.1.9.11.58384 &gt; 192.168.64.71.80: <b>S</b>yn 3718379515:3718379515(0) win 65535 <b>用戶端發起連接配接請求</b>

10:13:01.617631 IP 192.168.64.71.80 &gt; 10.1.9.11.58384: <b>S</b>yn 261066897:261066897(0) ack 3718379516 win 5840 <b> </b><b>服務端響應連接配接請求</b>

10:13:01.617766 IP 10.1.9.11.58384 &gt; 192.168.64.71.80: . ack 1 win 65535

10:13:01.618011 IP 10.1.9.11.58384 &gt; 192.168.64.71.80: <b>P</b>ush 1:612(611) ack 1 win 65535 <b>用戶端向服務端發送資料</b><b>(HTTP</b><b>請求</b><b>)</b>

10:13:01.618023 IP 192.168.64.71.80 &gt; 10.1.9.11.58384: . ack 612 win 6721

10:13:01.618486 IP 192.168.64.71.80 &gt; 10.1.9.11.58384: <b>P</b>ush 1:329(328) ack 612 win 6721<b>服務端向用戶端回送資料</b><b>(HTTP</b><b>響應</b><b>)</b>

10:13:01.618510 IP 192.168.64.71.80 &gt; 10.1.9.11.58384: <b>P</b>ush 329:1303(974) ack 612 win 6721

10:13:01.619638 IP 10.1.9.11.58384 &gt; 192.168.64.71.80: . ack 1303 win 64233

10:13:11.574352 IP 10.1.9.11.58384 &gt; 192.168.64.71.80: <b>F</b>in 612:612(0) ack 1303 win 64233 <b>用戶端先發起關閉連接配接操作</b>

10:13:11.574455 IP 192.168.64.71.80 &gt; 10.1.9.11.58384: <b>F</b>in 1303:1303(0) ack 613 win 6721 <b>服務端響應用戶端的關閉連接配接操作</b>

10:13:11.574991 IP 10.1.9.11.58384 &gt; 192.168.64.71.80: . ack 1304 win 64233 <b>用戶端進入</b><b>TIME_WAIT</b><b>狀态</b>

?         服務端(192.168.64.71.80)向用戶端(10.1.9.11.58384)回送的響應分了兩個tcp包:

       第一個包發送了328位元組,第二個包發送了974位元組

?         關閉連接配接由用戶端(10.1.9.11.58384)首先發起,是以用戶端(192.168.64.71.80)需要經曆一個TIME_WAIT過程

Site found: www.tcpdump.com=192.168.64.71

Connecting to 192.168.64.71

Connected to 192.168.64.71

GET http:// www.tcpdump.com/

&gt; Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*

&gt; User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)

&gt; Host: tsf.oa.com

Request sent. 611 bytes

Data available. 974/974 bytes

<a>HTTP/1.1 200 OK</a>

Date: Sun, 10 Aug 2008 02:27:08 GMT

Server: Apache/2.0.59 (Unix) DAV/2 PHP/5.2.1 SVN/1.4.6

Last-Modified: Wed, 21 May 2008 01:19:21 GMT

ETag: "298227-3ce-62ec9840"

Accept-Ranges: bytes

Content-Length: <b>974</b>

Keep-Alive: timeout=15, max=100

Connection: Keep-Alive

Content-Type: text/html; charset=GB2312

200 Request complete

從上面的抓包結果來看,Apache将HTTP響應頭和資料部分是分成兩兩部分發送的,而且TCP/IP協定棧沒有再對其分包,也就是每個send調用都将資料發送完畢。

顯示包的内容:

tcpdump -i eth1 -n -vv -x -e -s 1600 # 僅二進制

tcpdump -i eth1 -n -vv -X -e -s 1600 # 二進制和文本

-s 指定顯示多少位元組的包内容

<a></a>

 HTTP響應頭共328位元組。

附:常用指令

A.檢視端口被誰占用

lsof -i:port,如:lsof -i:80

B.檢視tcp監聽端口

netstat -lpnt

C.檢視udp監聽端口

netstat -lpnu

D.檢視本機IP

netstat -ie

E.lsof進階用法

lsof -i [46][protocol][@hostname|hostaddr][:service|port]

46表示ipv4和ipv6,protocol取值為tcp或udp,

hostname主機名,hostaddr為IP位址,

service為/etc/service中定義的service名,可以不止一個,

port也可以不止一個

示例1:lsof -i4

示例2:lsof -i [email protected]:7778

更詳細細節可以“man lsof”搜尋“hostname”。

1.監聽指定網卡

tcpdump -i eth1

2.監聽指定UDP端口

tcpdump udp port 10888

3.監聽指定TCP端口

tcpdump tcp port 80

4.監聽A和B或A和C間的通訊

tcpdump host A and \(B or C \)

如:tcpdump host 127.0.0.1 and \(127.0.0.1 or 110.240.110.18 \)

5.監聽A的所有通訊,但不包括A和B的

tcpdump ip A and not B

6.監聽A發出的所有包

tcpdump -i eth1 src host A

7.監聽所有發送到B的包

tcpdump -i eth1 dst host B

8.監聽A收到或發出的所有http包

tcpdump tcp port 80 and host A

9.列出tcpdump能夠監聽的網卡

tcpdump -D

10.監聽所有網卡,要求2.2或更高版本核心

tcpdump -i any

11.詳細顯示捕獲的資訊

tcpdump -v

更詳細可以使用tcpdump -vv和tcpdump -vvv

12.以十六進制和ASCII方式列印包,除了連接配接層頭

tcpdump -v -X

13.以十六進制和ASCII方式列印包,包括連接配接層頭

tcpdump -v -XX

14.限制捕獲100個包

tcpdump -c 100

15.将記錄寫入檔案

tcpdump -w filename.log

16.使用IP代替域名

tcpdump -n

17.捕獲每個包的100位元組而不是預設的68位元組

tcpdump -s 500

如果要捕獲所有位元組則為tcpdump -s 0

18.捕獲所有廣播或多點傳播包

tcpdump -n "broadcast or multicast"

19.捕獲所有icmp和arp包

tcpdump -v "icmp or arp"

20.捕獲arp包

tcpdump -v arp

21.捕獲目标位址是192.168.0.1,端口是80或443的包

tcpdump -n "dst host 192.168.0.1 and (dst port 80 or dst port 443)"

22.捕獲目标端口号在1-1023間的UDP包

tcpdump -n udp dst portrange 1-1023

如果是tcp則改成:tcpdump -n tcp dst portrange 1-1023

23.捕獲目标端口号為23的包

tcpdump dst port 23

24.捕獲目标網絡為192.168.1.0/24的包

tcpdump -n dst net 192.168.1.0/24

25.捕獲源網絡為192.168.1.0/24的包

tcpdump -n src net 192.168.1.0/24