一、tcpdump -i eth0 port 11751 and src host 192.168.1.34 -x -s0網絡
二、抓包的顯示如上圖,這個二進制顯示了所有封包的內容,頭部是MAC,即數據鏈路層的數據,這個打印的時候-x選項不顯示了。tcp
2)第二部分是IP包,格式以下:大數據
IP包頭字段說明
版本:4位,指定IP協議的版本號。
首部長度(IHL):4位,IP協議首部的長度,指明IPv4協議首部長度的字節數包含多少個32位。因爲IPv4的首部可能包含可變數量的可選項,因此這個字段能夠用來肯定IPv4數據報中數據部分的偏移位置。IPv4首部的最小長度是20個字節,所以IHL這個字段的最小值用十進制表示就是5 (5x4 = 20字節)。就是說,它表示的是首部的總字節數是4字節的倍數。
服務類型:定義IP協議包的處理方法,它包含以下子字段
過程字段:3位,設置了數據包的重要性,取值越大數據越重要,取值範圍爲:0(正常)~ 7(網絡控制) 延遲字段:1位,取值:0(正常)、1(期特低的延遲) 流量字段:1位,取值:0(正常)、1(期特高的流量) 可靠性字段:1位,取值:0(正常)、1(期特高的可靠性) 成本字段:1位,取值:0(正常)、1(期特最小成本) 未使用:1位 長度:IP包的總長
認證:標識字段惟一地標識主機發送的每一份數據報。一般每發送一份報文它的值就會加1 標誌:是一個3位的控制字段,包含:
保留位:1位
不分段位:1位,取值:0(容許數據報分段)、1(數據報不能分段)
更多段位:1位,取值:0(數據包後面沒有包,該包爲最後的包)、1(數據包後面有更多的包)spa
段偏移量:當數據分組時,它和更多段位(MF, More fragments)進行鏈接,幫助目的主機將分段的包組合。
TTL:表示數據包在網絡上生存多久,每經過一個路由器該值減一,爲0時將被路由器丟棄。
協議:8位,這個字段定義了IP數據報的數據部分使用的協議類型。經常使用的協議以下表:.net
校驗和:16位,是IPv4數據報包頭的校驗和。
源IP地址:
目的IP地址:code
3)第三部分是具體傳輸的協議,這裏是tcp協議,格式以下:blog
顯示TCP首部的數據格式。若是不計任選字段,它一般是20個字節。ip
三、根據協議二進制字段過濾ssl
1) tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net x.x.x.x'路由
打印TCP會話中的的開始和結束數據包, 而且數據包的源或目的不是本地網絡上的主機.(nt: x.x.x.x, 實際使用時要真正替換成本地網絡的名字))
2) tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
打印全部源或目的端口是80, 網絡層協議爲IPv4, 而且含有數據,而不是SYN,FIN以及ACK-only等不含數據的數據包.(ipv6的版本的表達式可作練習)
(nt: 可理解爲, ip[2:2]表示整個ip數據包的長度, (ip[0]&0xf)<<2)表示ip數據包包頭的長度(ip[0]&0xf表明包中的IHL域, 而此域的單位爲32bit, 要換算
成字節數須要乘以4, 即左移2. (tcp[12]&0xf0)>>4 表示tcp頭的長度, 此域的單位也是32bit, 換算成比特數爲 ((tcp[12]&0xf0) >> 4) << 2,
即 ((tcp[12]&0xf0)>>2). ((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0 表示: 整個ip數據包的長度減去ip頭的長度,再減去
tcp頭的長度不爲0, 這就意味着, ip數據包中確實是有數據.對於ipv6版本只需考慮ipv6頭中的'Payload Length' 與 'tcp頭的長度'的差值, 而且其中表達方式'ip[]'需換成'ip6[]'.)
3) tcpdump 'gateway snup and ip[2:2] > 576'
打印長度超過576字節, 而且網關地址是snup的IP數據包
4) tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
打印全部IP層廣播或多播的數據包, 但不是物理以太網層的廣播或多播數據報
5)tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
打印除'echo request'或者'echo reply'類型之外的ICMP數據包( 好比,須要打印全部非ping 程序產生的數據包時可用到此表達式 .
(nt: 'echo reuqest' 與 'echo reply' 這兩種類型的ICMP數據包一般由ping程序產生))
四、根據數據部分過濾
1)計算數據的起始位置
ip首部的長度爲((ip[0]&0xf)<<2))即ip[0]=0x45,即長度爲20,因此IP頭部到第二行的0115結束,後面就是具體傳送協議的數據了,這裏是tcp數據。
tcp首部的長度 ((tcp[12]&0xf0)>>2)),其中tcp[12]=0x80,計算長度爲20,因此tcp頭部的長度是20,從8018開始數20字節到c7b2結束。
因此tcp數據開始的地方是tcp[12+tcp首部長度]=tcp[20],即從0e00開始。
2)根據數據過濾,好比數據第一個字節tcp[32]==0xe,這樣添加過濾條件過濾便可。
其中ip[2:2] 是從2字節(16bit)位開始,通過2字節(16bit),也就是ip頭部的16-32位。
tcp依次類推