導航:首頁 > 凈水問答 > tcpdump按協議過濾

tcpdump按協議過濾

發布時間:2022-09-24 20:45:42

Ⅰ TCPDUMP 抓包 怎麼查看 抓的包的內容

1、tcpmp檢測登錄linux系統輸入tcpmp,如果找不到表示沒有安裝。也可以用rpm查詢。

Ⅱ tcpmp規則過濾抓包及結果篩選查看

1、抓取指定IP地址數據包

2、抓取主機與特定IP(192.168.1.200 或192.168.1.201)通信包

3、抓取主機與特定IP(192.168.1.200 )之外的通信包

4、抓取特定埠數據包

5、抓取特定網段數據包

6、抓取特定協議數據包

7、條件組合過濾抓包

8、常用邏輯表達式
非 : ! or "not"
且 : && or "and"
或 : || or "or"

1、不解析域名以IP地址顯示第三列的內容,sort -u去重

2、篩選源IP為192.168.1.100的包

3、篩選目的IP為192.168.1.100的包

4、篩選埠為50的包

5、以16進制顯示埠80的包信息

Ⅲ 如何讀懂tcpmp的輸出

tcpmp 是 Linux 下的抓包工具,使用參數比較多,輸出條目比較細。
tcpmp的命令行格式
tcpmp [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ]
[ -i 網路介面 ] [ -r 文件名] [ -s snaplen ]
[ -T 類型 ] [ -w 文件名 ] [表達式 ]

tcpmp的參數選項
-A:以ASCII編碼列印每個報文(不包括鏈路層的頭),這對分析網頁來說很方便;
-a:將網路地址和廣播地址轉變成名字;
-c<數據包數目>:在收到指定的包的數目後,tcpmp就會停止;
-C:用於判斷用 -w 選項將報文寫入的文件的大小是否超過這個值,如果超過了就新建文件(文件名後綴是1、2、3依次增加);
-d:將匹配信息包的代碼以人們能夠理解的匯編格式給出;
-dd:將匹配信息包的代碼以c語言程序段的格式給出;
-ddd:將匹配信息包的代碼以十進制的形式給出;
-D:列出當前主機的所有網卡編號和名稱,可以用於選項 -i;
-e:在輸出行列印出數據鏈路層的頭部信息;
-f:將外部的Internet地址以數字的形式列印出來;
-F<表達文件>:從指定的文件中讀取表達式,忽略其它的表達式;
-i<網路界面>:監聽主機的該網卡上的數據流,如果沒有指定,就會使用最小網卡編號的網卡(在選項-D可知道,但是不包括環路介面),linux 2.2 內核及之後的版本支持 any 網卡,用於指代任意網卡;
-l:如果沒有使用 -w 選項,就可以將報文列印到 標准輸出終端(此時這是默認);
-n:顯示ip,而不是主機名;
-N:不列出域名;
-O:不將數據包編碼最佳化;
-p:不讓網路界面進入混雜模式;
-q:快速輸出,僅列出少數的傳輸協議信息;
-r<數據包文件>:從指定的文件中讀取包(這些包一般通過-w選項產生);
-s<數據包大小>:指定抓包顯示一行的寬度,-s0表示可按包長顯示完整的包,經常和-A一起用,默認截取長度為60個位元組,但一般ethernetMTU都是1500位元組。所以,要抓取大於60位元組的包時,使用默認參數就會導致包數據丟失;
-S:用絕對而非相對數值列出TCP關聯數;
-t:在輸出的每一行不列印時間戳;
-tt:在輸出的每一行顯示未經格式化的時間戳記;
-T<數據包類型>:將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網路管理協議);
-v:輸出一個稍微詳細的信息,例如在ip包中可以包括ttl和服務類型的信息;
-vv:輸出詳細的報文信息;
-x/-xx/-X/-XX:以十六進制顯示包內容,幾個選項只有細微的差別,詳見man手冊;
-w<數據包文件>:直接將包寫入文件中,並不分析和列印出來;
expression:用於篩選的邏輯表達式;

tcpmp的表達式
表達式是一個邏輯表達式,tcpmp利用它作為過濾報文的條件,如果一個報文滿足表達式的條件,則這個報文將會被捕獲。如果沒有給出任何條件,則網路上所有的信息包將會被截獲。
在表達式中一般如下幾種類型的關鍵字:
關於類型的關鍵字,主要包括host,net,port
例如,
host 210.27.48.2,指明 210.27.48.2是一台主機,net 202.0.0.0 指明202.0.0.0是一個網路地址,port 23 指明埠號是23。
如果沒有指定類型,預設的類型是host.
關於傳輸方向的關鍵字:src,dst,dst or src,dst and src
例如,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的網路地址是202.0.0.0 。如果沒有指明方向關鍵字,則預設是src or dst關鍵字。
關於協議的關鍵字:fddi,ip,arp,rarp,tcp,udp
Fddi指明是在FDDI(分布式光纖數據介面網路)上的特定的網路協議,實際上它是"ether"的別名,fddi和e ther具有類似的源地址和目的地址,所以可以將fddi協議包當作ether的包進行處理和分析。
其他的幾個關鍵字就是指明了監聽的包的協議內容。如果沒有指定任何協議,則tcpmp將會監聽所有協議的信息包。
邏輯運算符關鍵字
非運算 'not ' '! '
與運算 'and','&&'
或運算 'or' ,'||'
這些關鍵字可以組合起來構成強大的組合條件來滿足人們的需要,下面舉幾個例子來說明。
其他重要關鍵字
除了這三種類型的關鍵字之外,其他重要的關鍵字如下:gateway, broadcast,less,greater。
案例
想要截獲所有210.27.48.1 的主機收到的和發出的所有的數據包:
tcpmp host 210.27.48.1
想要截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通信,使用命令
tcpmp host 210.27.48.1 and \(210.27.48.2 or 210.27.48.3\)
如果想要獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的ip包,使用命令:
tcpmp ip host 210.27.48.1 and ! 210.27.48.2
如果想要獲取主機210.27.48.1接收或發出的telnet包,使用如下命令:
tcpmp tcp port 23 host 210.27.48.1
輸出結果介紹
下面我們介紹幾種典型的tcpmp命令的輸出信息
數據鏈路層頭信息
使用命令tcpmp --e host ice
ice 是一台裝有linux的主機,她的MAC地址是0:90:27:58:af:1a
H219是一台裝有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5b:46
命令的輸出結果如下所示:
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telnet 0:0(0) ack 22535 win 8760 (DF)
分析:
21:50:12 是顯示的時間
847509 是ID號
eth0 < 表示從網路介面eth0 接受該數據包
eth0 > 表示從網路介面設備發送數據包
8:0:20:79:5b:46 是主機H219的MAC地址,它表明是從源地址H219發來的數據包
0:90:27:58:af:1a 是主機ICE的MAC地址,表示該數據包的目的地址是ICE
ip 是表明該數據包是IP數據包,
60 是數據包的長度,
h219.33357 > ice.telnet 表明該數據包是從主機H219的33357埠發往主機ICE的TELNET(23)埠
ack 22535 表明對序列號是222535的包進行響應
win 8760 表明發送窗口的大小是8760
ARP包的TCPDUMP輸出信息
使用命令#tcpmp arp
得到的輸出結果是:
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
分析:
22:32:42 時間戳
802509 ID號
eth0 > 表明從主機發出該數據包
arp 表明是ARP請求包
who-has route tell ice 表明是主機ICE請求主機ROUTE的MAC地址
0:90:27:58:af:1a 是主機ICE的MAC地址。
TCP包的輸出信息
用TCPDUMP捕獲的TCP包的一般輸出信息是:
src > dst: flagsdata-seqnoackwindowurgentoptions

src > dst 表明從源地址到目的地址
flags 是TCP包中的標志信息,S 是SYN標志, F(FIN), P(PUSH) , R(RST) "."(沒有標記)
data-seqno 是數據包中的數據的順序號
ack 是下次期望的順序號
window 是接收緩存的窗口大小
urgent 表明數據包中是否有緊急指針
options 是選項
用TCPDUMP捕獲的UDP包的一般輸出信息是:
route.port1 > ice.port2: udplenth

UDP十分簡單,上面的輸出行表明從主機ROUTE的port1埠發出的一個UDP數據包到主機ICE的port2埠,類型是UDP, 包的長度是lenth
wireshark查看
要讓wireshark能分析tcpmp的包,關鍵的地方是 -s 參數, 還有要保存為-w文件,例如下面的例子:
./tcpmp -i eth0 -s 0 -w SuccessC2Server.pcaphost 192.168.1.20 # 抓該主機的所有包,在wireshark中過濾
./tcpmp -i eth0 'dst host 239.33.24.212' -w raw.pcap # 抓包的時候就進行過濾

wireshark的過濾,很簡單的,比如:
tcp.port eq 5541
ip.addr eq 192.168.2.1
過濾出來後, 用fllow tcp 查看包的內容。
其他
device eth0/eth1 entered promiscuous mode
message日誌中提示:
kernel: device eth0 entered promiscuous mode
kernel: device eth0 left promiscuous mode
網卡進入了混雜模式。一般對通信進行抓包分析時進入混雜模式(tcpmp)。(默認網卡啟用了混雜模式的)
關閉混雜模式:ifconfig eth0 -promisc
啟用混雜模式:ifconfig eth0 promisc
TCP協議的KeepAlive機制與HeartBeat心跳包:http://www.nowamagic.net/academy/detail/23350382
TCP Keepalive HOWTO:http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/

Ⅳ 用tcpmp抓包,過濾規則有些看不懂,求高手解答

  1. tcp頭開始偏移20個位元組後的兩個位元組為0x4745或0x4854的包。如果沒有可選項的TCP包,應該是指版TCP發送的數據權數據開頭兩個位元組為0x4745或0x4854的包

  2. 抓ARP響應包:arp && arp[6:2]==0002

Ⅳ tcpmp 命令的常用選項:二

code>tcpmp用於捕獲和分析網路流量。系統管理員可以使用它來查看實時流量或將輸出保存到文件中並在以後進行分析。下面列出5個常用選項

-r選項

如果你導出了一個 .pcap 文件,你就會知道不能使用文本編輯器來讀取文件內容。因此,你應該使用-r file.pcap選項。它讀取現有捕獲的文件並將它們顯示出來。

# 導出.pcap文件[root@localhost ~]# tcpmp -c 4 -i any port 53 -nn -w dns.pcap -vdropped privs to tcpmptcpmp: listening on any, link-type LINUX _SLL (Linux cooked), capture size 262144 bytes4 packets captured8 packets received by filter0 packets dropped by kernel# 使用-r選項讀取.pcap文件[root@localhost ~]# tcpmp -r dns.pcap reading from file dns.pcap, link-type LINUX_SLL (Linux cooked)dropped privs to tcpmp19:33:54.533792 IP localhost.localdomain.48048 > _gateway.domain: 30912+ A? www.. (25)19:33:54.533835 IP localhost.localdomain.48048 > _gateway.domain: 51681+ AAAA? www.. (25)19:33:54.537733 IP _gateway.domain > localhost.localdomain.48048: 51681 NXDomain 0/1/0 (100)19:33:54.539312 IP _gateway.domain > localhost.localdomain.48048: 30912 NXDomain 0/1/0 (100)

host 選項

如果要過濾特定主機的流量,可以使用host選項後面添加ip 或者主機名來捕獲特定主機的數據包。

[root@localhost ~]# tcpmp host redhat.com -i any -c5

dropped privs to tcpmp

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

listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

20:27:19.762717 IP localhost.localdomain.59096 > redirect.redhat.com.https: Flags [S], seq 2565597156, win 29200, options [mss 1460,sackOK,TS val 178658343 ecr 0,nop,wscale 7], length 0

20:27:19.977742 IP redirect.redhat.com.https > localhost.localdomain.59096: Flags [S.], seq 1933719472, ack 2565597157, win 64240, options [mss 1460], length 0

20:27:19.977773 IP localhost.localdomain.59096 > redirect.redhat.com.https: Flags [.], ack 1, win 29200, length 0

20:27:19.983584 IP localhost.localdomain.59096 > redirect.redhat.com.https: Flags [P.], seq 1:518, ack 1, win 29200, length 517

20:27:19.983781 IP redirect.redhat.com.https > localhost.localdomain.59096: Flags [.], ack 518, win 64240, length 0

5 packets captured

9 packets received by filter

0 packets dropped by kernel

可以使用 src 或 dst 關鍵字告訴 tcpmp 捕獲的數據包是否應包含源地址或目標地址中的主機。列入下面獲取源主機地址為redhat.com的數據包,和獲取目的主機地址為redhat.com的數據包:

[root@localhost ~]# tcpmp src host redhat.com -i any -c5

dropped privs to tcpmp

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

listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

20:29:23.090360 IP redirect.redhat.com.https > localhost.localdomain.59098: Flags [S.], seq 1420240111, ack 1139421965, win 64240, options [mss 1460], length 0

20:29:23.096748 IP redirect.redhat.com.https > localhost.localdomain.59098: Flags [.], ack 518, win 64240, length 0

20:29:23.353159 IP redirect.redhat.com.https > localhost.localdomain.59098: Flags [P.], seq 1:1381, ack 518, win 64240, length 1380

20:29:23.353434 IP redirect.redhat.com.https > localhost.localdomain.59098: Flags [.], seq 1381:2841, ack 518, win 64240, length 1460

20:29:23.353461 IP redirect.redhat.com.https > localhost.localdomain.59098: Flags [P.], seq 2841:3407, ack 518, win 64240, length 566

5 packets captured

9 packets received by filter

0 packets dropped by kernel

[root@localhost ~]# tcpmp dst host redhat.com -i any -c5

dropped privs to tcpmp

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

listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

20:29:35.661917 IP localhost.localdomain.59100 > redirect.redhat.com.https: Flags [S], seq 4207740141, win 29200, options [mss 1460,sackOK,TS val 178783790 ecr 0,nop,wscale 7], length 0

20:29:35.886845 IP localhost.localdomain.59100 > redirect.redhat.com.https: Flags [.], ack 1287594187, win 29200, length 0

20:29:35.892463 IP localhost.localdomain.59100 > redirect.redhat.com.https: Flags [P.], seq 0:517, ack 1, win 29200, length 517

20:29:36.121990 IP localhost.localdomain.59100 > redirect.redhat.com.https: Flags [.], ack 1461, win 32120, length 0

20:29:36.122028 IP localhost.localdomain.59100 > redirect.redhat.com.https: Flags [.], ack 2921, win 35040, length 0

5 packets captured

10 packets received by filter

0 packets dropped by kernel

邏輯運算符

tcpmp 支持and/or/not運算符作為關鍵字,例如,tcpmp -i ens33 「host www.linuxprobe.com and (port 80 or port 443)」。在復合表達式周圍使用引號是很有必要的,這樣 bash  shell 就不會試圖解釋括弧。

[root@localhost ~]# tcpmp -i any "host www.linuxprobe.com and (port 80 or port 443)" -s64 -c5

dropped privs to tcpmp

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

listening on any, link-type LINUX_SLL (Linux cooked), capture size 64 bytes

20:37:12.398299 IP localhost.localdomain.52754 > 140.249.61.18.https: Flags [S], seq 3304304157, win 29200, options [mss 1460,sackOK,TS[|tcp]>

20:37:12.408805 IP 140.249.61.18.https > localhost.localdomain.52754: Flags [S.], seq 2112965730, ack 3304304158, win 64240, options [mss 1460], length 0

20:37:12.408842 IP localhost.localdomain.52754 > 140.249.61.18.https: Flags [.], ack 1, win 29200, length 0

20:37:12.414672 IP localhost.localdomain.52754 > 140.249.61.18.https: Flags [P.], seq 1:518, ack 1, win 29200, length 517

20:37:12.414948 IP 140.249.61.18.https > localhost.localdomain.52754: Flags [.], ack 518, win 64240, length 0

5 packets captured

9 packets received by filter

0 packets dropped by kernel

site.qudong.com/2017/0220/394075.shtml

www.techweb.com.cn/prnews/qiyenews/archives/26181.html

www.zjqiye.net/2016/0226/177817.shtml

net 關鍵字

net 關鍵字可用於捕獲一個網段的數據包。net關鍵字還可以將 src 和 ds與邏輯運算符一起使用,並更精確地過濾包。下面實例是獲取源net為192.168.0.0/16網段,並且目標net不包含192.168.0.0/16網段的數據包。

[root@localhost ~]# tcpmp -i any -n "src net 192.168.0.0/16 and not dst net 192.168.0.0/16" -c4

dropped privs to tcpmp

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

listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

20:43:25.558537 IP 192.168.43.131.34562 > 140.249.61.18.http: Flags [S], seq 3720011773, win 29200, options [mss 1460,sackOK,TS val 4199917698 ecr 0,nop,wscale 7], length 0

20:43:25.571477 IP 192.168.43.131.34562 > 140.249.61.18.http: Flags [.], ack 1199844, win 29200, length 0

20:43:25.571693 IP 192.168.43.131.34562 > 140.249.61.18.http: Flags [P.], seq 0:82, ack 1, win 29200, length 82: HTTP: GET / HTTP/1.1

20:43:25.587514 IP 192.168.43.131.34562 > 140.249.61.18.http: Flags [.], ack 546, win 29975, length 0

4 packets captured

4 packets received by filter

0 packets dropped by kernel

ip6 關鍵字

可以使用 ip6 關鍵字捕獲 IPv6 流量。下面是一個例子:

[root@localhost ~]# tcpmp -i any ip6 host  fe80::9520:7b41:7099:c6f7 -c4

dropped privs to tcpmp

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

listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

22:17:08.182720 IP6 localhost.localdomain > fe80::9520:7b41:7099:c6f7: ICMP6, echo request, seq 12, length 64

22:17:08.183329 IP6 fe80::9520:7b41:7099:c6f7 > localhost.localdomain: ICMP6, echo reply, seq 12, length 64

22:17:09.207102 IP6 localhost.localdomain > fe80::9520:7b41:7099:c6f7: ICMP6, echo request, seq 13, length 64

22:17:09.207555 IP6 fe80::9520:7b41:7099:c6f7 > localhost.localdomain: ICMP6, echo reply, seq 13, length 64

4 packets captured

4 packets received by filter

0 packets dropped by kernel

總結

tcpmp 用於收集有關網路流量數據的出色工具。數據包捕獲為故障排除和安全分析提供了有用的信息。

Ⅵ tcpmp 高級過濾方式

首先了解如何從包頭過濾信息

操作符 : >, <, >=, <=, =, !=

​ 長度4比特。這個欄位的作用是為了描述IP包頭的長度,因為在IP包頭中有變長的可選部分。該部分佔4個bit位,單位為32bit(4個位元組),即本區域值= IP頭部長度(單位為bit)/(8 4),因此,一個IP包頭的長度最長為「1111」,即15 4=60個位元組。IP包頭最小長度為20位元組。

​ 16比特,以位元組為單位描述IP包的總長度(包括頭部和數據兩部分),最大值為65535。第二行中標識符、標志和段偏移量通常聯合使用,用於數據拆分時的分組和重組。

​ 對於上層發來的較大的數據包,往往需要拆分。路由器將一個大包進行拆分後,拆出來的所有部分被標上相同的值,該值即為標識符,用於告訴目的端哪些包屬於同一個大包。

​ 長度3比特。該欄位第一位不使用。第二位是DF(Don't Fragment)位,DF位設為1時表明路由器不能對該上層數據包分段。如果一個上層數據包無法在不分段的情況下進行轉發,則路由器會丟棄該上層數據包並返回一個錯誤信息。第三位是MF(More Fragments)位,當路由器對一個上層數據包分段,則路由器會在除了最後一個分段的IP包的包頭中將MF位設為1。

​ 長度13比特,表示一個數據包在原先被拆分前的大包中的位置。接收端據此來還原和組裝IP包。

​ 表示IP包的生存時間,長度8比特。長度8比特。當IP包進行傳送時,先會對該欄位賦予某個特定的值。當IP包經過每一個沿途的路由器的時候,每個沿途的路由器會將IP包的TTL值減少1。如果TTL減少為0,則該IP包會被丟棄。這個欄位可以防止由於路由環路而導致IP包在網路中不停被轉發。

​ 長度8比特,標識上一層即傳輸層在本次數據傳輸中所使用的協議。比如6代表TCP,17代表UDP等

​ 長度16位。用來做IP頭部的正確性檢測,但不包含數據部分。 因為每個路由器要改變TTL的值,所以路由器會為每個通過的數據包重新計算這個值。

​ 長度32比特,標識IP包的起源地址。

​ 長度32比特,表示IP包的目的地址。

​ 可變長欄位,主要用於測試,由起源設備跟據需要改寫。

​ 因為IP包頭長度(Header Length)部分的單位為32bit,所以IP包頭的長度必須為32bit的整數倍。因此,在可選項後面,IP協議會填充若干個0,以達到32bit的整數倍

一般 的IP頭是20位元組,但IP頭有選項設置,不能直接從偏移21位元組處讀取數據。IP頭有個長度欄位可以知道頭長度是否大於20位元組。

通常第一個位元組的二進制值是:01000101,

分成兩個部分:

如果第一位元組第二部分的值大於5,那麼表示頭有IP選項。

下面介紹有過濾方法

**0100 0101 **: 第一位元組的二進制
0000 1111 : 與操作
<=========
0000 0101 : 結果

正確的過濾方法:

或者

當發送端的MTU大於到目的路徑鏈路上的MTU時就會被分片,分片信息在IP頭的第七和第八位元組:

Bit 0 : 保留,必須是0
Bit 1 : (DF) 0 = 可能分片, 1 = 不分片
Bit 2 : (MF) 0 = 最後的分片, 1 = 還有分片

Fragment Offset 欄位只有在分片的時候才使用。

要抓帶DF位標記的不分片的包,第七位元組的值應該是:

01000000 = 64

最後分片包的開始3位是0,但是有Fragment Offset欄位。

測試分片可以用下面的命令:

TTL欄位在第九位元組,並且正好是完整的一個位元組,TTL最大值是255,二進制為11111111。

可以用下面的命令驗證一下:

首先還是需要知道TCP基本結構

16位源埠號和16位目的埠號。

32位序號

​ 一次TCP通信過程中某一個傳輸方向上的位元組流的每個位元組的編號,通過這個來確認發送的數據有序,比如現在序列號為1000,發送了1000,下一個序列號就是2000。

32位確認號

​ 用來響應TCP報文段,給收到的TCP報文段的序號加1,三握時還要攜帶自己的序號。

4位頭部長度

​ 標識該TCP頭部有多少個4位元組,共表示最長15*4=60位元組。同IP頭部。

6位保留

​ 6位標志。URG(緊急指針是否有效)ACK(表示確認號是否有效)PSH(提示接收端應用程序應該立即從TCP接收緩沖區讀走數據)RST(表示要求對方重新建立連接)SYN(表示請求建立一個連接)FIN(表示通知對方本端要關閉連接)

16位窗口大小

​ TCP流量控制的一個手段,用來告訴對端TCP緩沖區還能容納多少位元組。

16位校驗和

​ 由發送端填充,接收端對報文段執行CRC演算法以檢驗TCP報文段在傳輸中是否損壞。

16位緊急指針

​ 一個正的偏移量,它和序號段的值相加表示最後一個緊急數據的下一位元組的序號。

標志位欄位(U、A、P、R、S、F)

佔6比特。各比特的含義如下:

TCP標記定義在TCP頭的第十四個位元組

tcpmp考慮了一些數字恐懼症者的需求,提供了部分常用的欄位偏移名字:

ICMP類型值有

icmp-echoreply , icmp-unreach , icmp-sourcequench , icmp-redirect , icmp-echo , icmp-routeradvert , icmp-routersolicit , icmp-timxceed , icmp-paramprob , icmp-tstamp , icmp-tstampreply , icmp-ireq , icmp-ireqreply , icmp-maskreq , icmp-maskreply

TCP標記值

tcp-fin , tcp-syn , tcp-rst , tcp-push , tcp-push , tcp-ack , tcp-urg

這樣上面按照TCP標記位抓包的就可以寫直觀的表達式了:

抓取數據區開始為"MAIL"的包,"MAIL"的十六進制為0x4d41494c。

"GET "的十六進制是47455420

"SSH-"的十六進制是0x5353482D

Ⅶ Tcpmp 看這一篇就夠了

tcpmp 是一款強大的網路抓包工具,它使用 libpcap 庫來抓取網路數據包,這個庫在幾乎在所有的 Linux/Unix 中都有。熟悉 tcpmp 的使用能夠幫助你分析調試網路數據,本文將通過一個個具體的示例來介紹它在不同場景下的使用方法。不管你是系統管理員,程序員,雲原生工程師還是 yaml 工程師,掌握 tcpmp 的使用都能讓你如虎添翼,升職加薪。

tcpmp 的常用參數如下:

額外再介紹幾個常用參數:

-A 表示使用 ASCII 字元串列印報文的全部數據,這樣可以使讀取更加簡單,方便使用 grep 等工具解析輸出內容。 -X 表示同時使用十六進制和 ASCII 字元串列印報文的全部數據。這兩個參數不能一起使用。例如:

後面可以跟上協議名稱來過濾特定協議的流量,以 UDP 為例,可以加上參數 udp 或 protocol 17 ,這兩個命令意思相同。

同理, tcp 與 protocol 6 意思相同。

使用過濾器 host 可以抓取特定目的地和源 IP 地址的流量。

也可以使用 src 或 dst 只抓取源或目的地:

使用 tcpmp 截取數據報文的時候,默認會列印到屏幕的默認輸出,你會看到按照順序和格式,很多的數據一行行快速閃過,根本來不及看清楚所有的內容。不過,tcpmp 提供了把截取的數據保存到文件的功能,以便後面使用其他圖形工具(比如 wireshark,Snort)來分析。
-w 選項用來把數據報文輸出到文件:

如果想實時將抓取到的數據通過管道傳遞給其他工具來處理,需要使用 -l 選項來開啟行緩沖模式(或使用 -c 選項來開啟數據包緩沖模式)。使用 -l 選項可以將輸出通過立即發送給其他命令,其他命令會立即響應。

過濾的真正強大之處在於你可以隨意組合它們,而連接它們的邏輯就是常用的 與/AND/&& 、 或/OR/|| 和 非/not/!。

關於 tcpmp 的過濾器,這里有必要單獨介紹一下。
機器上的網路報文數量異常的多,很多時候我們只關系和具體問題有關的數據報(比如訪問某個網站的數據,或者 icmp 超時的報文等等),而這些數據只佔到很小的一部分。把所有的數據截取下來,從裡面找到想要的信息無疑是一件很費時費力的工作。而 tcpmp 提供了靈活的語法可以精確地截取關心的數據報,簡化分析的工作量。這些選擇數據包的語句就是過濾器(filter)!

Host 過濾器用來過濾某個主機的數據報文。例如:

該命令會抓取所有發往主機 1.2.3.4 或者從主機 1.2.3.4 發出的流量。如果想只抓取從該主機發出的流量,可以使用下面的命令:

Network 過濾器用來過濾某個網段的數據,使用的是 CIDR[2] 模式。可以使用四元組(x.x.x.x)、三元組(x.x.x)、二元組(x.x)和一元組(x)。四元組就是指定某個主機,三元組表示子網掩碼為 255.255.255.0,二元組表示子網掩碼為 255.255.0.0,一元組表示子網掩碼為 255.0.0.0。例如,
抓取所有發往網段 192.168.1.x 或從網段 192.168.1.x 發出的流量:

抓取所有發往網段 10.x.x.x 或從網段 10.x.x.x 發出的流量:

和 Host 過濾器一樣,這里也可以指定源和目的:

也可以使用 CIDR 格式:

Proto 過濾器用來過濾某個協議的數據,關鍵字為 proto,可省略。proto 後面可以跟上協議號或協議名稱,支持 icmp, igmp, igrp, pim, ah, esp, carp, vrrp, udp和 tcp。因為通常的協議名稱是保留欄位,所以在與 proto 指令一起使用時,必須根據 shell 類型使用一個或兩個反斜杠(/)來轉義。Linux 中的 shell 需要使用兩個反斜杠來轉義,MacOS 只需要一個。
例如,抓取 icmp 協議的報文:

Port 過濾器用來過濾通過某個埠的數據報文,關鍵字為 port。例如:

截取數據只是第一步,第二步就是理解這些數據,下面就解釋一下 tcpmp 命令輸出各部分的意義。

最基本也是最重要的信息就是數據報的源地址/埠和目的地址/埠,上面的例子第一條數據報中,源地址 ip 是 192.168.1.106,源埠是 56166,目的地址是 124.192.132.54,目的埠是 80。> 符號代表數據的方向。
此外,上面的三條數據還是 tcp 協議的三次握手過程,第一條就是 SYN 報文,這個可以通過 Flags [S] 看出。下面是常見的 TCP 報文的 Flags:

下面給出一些具體的例子,每個例子都可以使用多種方法來獲得相同的輸出,你使用的方法取決於所需的輸出和網路上的流量。我們在排障時,通常只想獲取自己想要的內容,可以通過過濾器和 ASCII 輸出並結合管道與 grep、cut、awk 等工具來實現此目的。
例如,在抓取 HTTP 請求和響應數據包時,可以通過刪除標志 SYN/ACK/FIN 來過濾雜訊,但還有更簡單的方法,那就是通過管道傳遞給 grep。在達到目的的同時,我們要選擇最簡單最高效的方法。下面來看例子。

從 HTTP 請求頭中提取 HTTP 用戶代理:

通過 egrep 可以同時提取用戶代理和主機名(或其他頭文件):

抓取 HTTP GET 流量:

也可以抓取 HTTP POST 請求流量:

注意:該方法不能保證抓取到 HTTP POST 有效數據流量,因為一個 POST 請求會被分割為多個 TCP 數據包。
上述兩個表達式中的十六進制將會與 GET 和 POST 請求的 ASCII 字元串匹配。例如,tcp[((tcp[12:1] & 0xf0) >> 2):4] 首先會確定我們感興趣的位元組的位置[3](在 TCP header 之後),然後選擇我們希望匹配的 4 個位元組。

提取 HTTP 請求的主機名和路徑:

從 HTTP POST 請求中提取密碼和主機名:

提取 Set-Cookie(服務端的 Cookie)和 Cookie(客戶端的 Cookie):

查看網路上的所有 ICMP 數據包:

通過排除 echo 和 reply 類型的數據包使抓取到的數據包不包括標準的 ping 包:

可以提取電子郵件的正文和其他數據。例如,只提取電子郵件的收件人:

抓取 NTP 服務的查詢和響應

通過 SNMP 服務,滲透測試人員可以獲取大量的設備和系統信息。在這些信息中,系統信息最為關鍵,如操作系統版本、內核版本等。使用 SNMP 協議快速掃描程序 onesixtyone,可以看到目標系統的信息:

當抓取大量數據並寫入文件時,可以自動切割為多個大小相同的文件。例如,下面的命令表示每 3600 秒創建一個新文件 capture-(hour).pcap,每個文件大小不超過 200*1000000 位元組:

這些文件的命名為 capture-{1-24}.pcap,24 小時之後,之前的文件就會被覆蓋。

可以通過過濾器 ip6 來抓取 IPv6 流量,同時可以指定協議如 TCP:

從之前保存的文件中讀取 IPv6 UDP 數據報文:

在下面的例子中,你會發現抓取到的報文的源和目的一直不變,且帶有標志位 [S] 和 [R],它們與一系列看似隨機的目標埠進行匹配。當發送 SYN 之後,如果目標主機的埠沒有打開,就會返回一個 RESET。這是 Nmap 等埠掃描工具的標准做法。

本例中 Nmap NSE 測試腳本 http-enum.nse 用來檢測 HTTP 服務的合法 URL。
在執行腳本測試的主機上:

在目標主機上:

向 Google 公共 DNS 發起的出站 DNS 請求和 A 記錄響應可以通過 tcpmp 抓取到:

抓取 80 埠的 HTTP 有效數據包,排除 TCP 連接建立過程的數據包(SYN / FIN / ACK):

通常 Wireshark(或 tshark)比 tcpmp 更容易分析應用層協議。一般的做法是在遠程伺服器上先使用 tcpmp 抓取數據並寫入文件,然後再將文件拷貝到本地工作站上用 Wireshark 分析。
還有一種更高效的方法,可以通過 ssh 連接將抓取到的數據實時發送給 Wireshark 進行分析。以 MacOS 系統為例,可以通過 brew cask install wireshark 來安裝,然後通過下面的命令來分析:

例如,如果想分析 DNS 協議,可以使用下面的命令:

抓取到的數據:

找出一段時間內發包最多的 IP,或者從一堆報文中找出發包最多的 IP,可以使用下面的命令:

cut -f 1,2,3,4 -d '.' : 以 . 為分隔符,列印出每行的前四列。即 IP 地址。
sort | uniq -c : 排序並計數
sort -nr : 按照數值大小逆向排序

本例將重點放在標准純文本協議上,過濾出於用戶名和密碼相關的報文:

最後一個例子,抓取 DHCP 服務的請求和響應報文,67 為 DHCP 埠,68 為客戶機埠。

本文主要介紹了 tcpmp 的基本語法和使用方法,並通過一些示例來展示它強大的過濾功能。將 tcpmp 與 wireshark 進行組合可以發揮更強大的功效,本文也展示了如何優雅順滑地結合 tcpmp 和 wireshark。如果你想了解更多的細節,可以查看 tcpmp 的 man 手冊。

Ⅷ Tcpmp 用法詳解

大部分 Linux 發行版都內置了 Tcpmp 工具。如果沒有,也可以直接使用對應的包管理器進行安裝(如: $ sudo apt-get install tcpmp 和 $ sudo yum install tcpmp )

通過表達式可以對各種不同類型的網路流量進行過濾,以獲取到需要的信息。這也是 tcpmp 強大功能的一個體現。
主要有 3 種類型的表達式:

指定網路介面
# tcpmp -i <dev>

原始信息輸出模式
# tcpmp -ttttnnvvS
更詳細的輸出,不解析主機名和埠名,使用絕對序列號,方便閱讀的時間戳

通過IP地址過濾
# tcpmp host 10.2.64.1

HEX 輸出
# tcpmp -nnvXSs 0 -c1 icmp

通過源地址和目標地址進行過濾
# tcpmp src 10.2.67.203

# tcpmp dst 10.2.67.203

通過子網進行過濾
# tcpmp net 10.2.64.0/24

監聽指定埠號
# tcpmp port 515

指定協議
# tcpdmp icmp

埠范圍
# tcpmp portrange 21-23

通過包大小過濾
# tcpmp less 32
# tcpmp greater 64
# tcpmp <= 128

寫入 PCAP 文件
# tcpmp port 80 -w capture_file

讀取 PCAP 文件
# tcpmp -r capture_file

可以通過命令選項的不同組合(使用 邏輯運算符 )完成更復雜的任務。運算符包括以下3種:

# tcpmp src 10.2.64.29 and dst port 80
即捕捉從指定主機(10.2.64.92)發出,且目標埠為 80 的所有網路數據

# tcpmp src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
即捕捉從指定子網(192.168.0.0/16)發送到目標子網(10.0.0.0/8 和 172.16.0.0/16)的所有網路數據

# tcpmp src 192.168.56.1 and not dst port 22
即捕捉從指定主機(192.168.56.1)發出,且目標埠不為 22 的所有網路數據

# tcpmp 'tcp[13] & 32!=0' 所有 URGENT ( URG ) 包
# tcpmp 'tcp[13] & 16!=0' 所有 ACKNOWLEDGE ( ACK ) 包
# tcpmp 'tcp[13] & 8!=0' 所有 PUSH ( PSH ) 包
# tcpmp 'tcp[13] & 4!=0' 所有 RESET ( RST ) 包
# tcpmp 'tcp[13] & 2!=0' 所有 SYNCHRONIZE ( SYN ) 包
# tcpmp 'tcp[13] & 1!=0' 所有 FINISH ( FIN ) 包
# tcpmp 'tcp[13]=18' 所有 SYNCHRONIZE/ACKNOWLEDGE ( SYNACK ) 包

其他指定標志位的方式如:
# tcpmp 'tcp[tcpflags] == tcp-syn'
# tcpmp 'tcp[tcpflags] == tcp-fin'

一些特殊的用法
# tcpmp 'tcp[13] = 6' RST 和 SYN 同時啟用的數據包(不正常)
# tcpmp 'tcp[32:4] = 0x47455420' 獲取 http GET 請求的文本
# tcpmp 'tcp[(tcp[12]>>2):4] = 0x5353482D' 獲取任何埠的 ssh 連接(通過 banner 信息)
# tcpmp 'ip[8] < 10' ttl 小於 10 的數據包(出現問題或 traceroute 命令)
# tcpmp 'ip[6] & 128 != 0' 非常有可能是黑客入侵的情況

A tcpmp Tutorial and Primer with Examples

Ⅸ tcpmp 命令的常用選項:一

tcpmp用於捕獲和分析網路流量。系統管理員可以使用它來查看實時流量或將輸出保存到文件中並在以後進行分析。下面列出6個常用選項

-D 選項

tcpmp的-D獲取介面設備列表。看到此列表後,可以決定要在哪個介面上捕獲流量。它還告訴你介面是否已啟動、正在運行,以及它是否是環回介面,如下所示:

[root@localhost ~]# tcpmp -D1.ens160 [Up, Running]2.lo [Up, Running, Loopback]3.any (Pseudo-device that captures on all interfaces) [Up, Running]4.bluetooth-monitor (Bluetooth Linux Monitor) [none]5.nflog (Linux netfilter log (NFLOG) interface) [none]6.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]7.usbmon0 (All USB buses) [none]8.usbmon1 (USB bus number 1)9.usbmon2 (USB bus number 2)

-c [數字]選項

-c 選項捕獲  X  個數據包,然後停止。否則,tcpmp 將無限地繼續運行。因此,當只想捕獲一小部分數據包樣本時,可以使用此選項。但是如果介面上沒有數據流量,tcpmp 會一直等待。

[root@localhost ~]# tcpmp -c 5 -i any

dropped privs to tcpmp

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

listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

17:33:47.713379 IP localhost.localdomain.ssh > 192.168.43.1.39970: Flags [P.], seq 714380127:714380371, ack 1854022435, win 388, length 244

17:33:47.713785 IP localhost.localdomain.36821 > _gateway.domain: 36365+ PTR? 1.43.168.192.in-addr.arpa. (43)

17:33:47.713939 IP 192.168.43.1.39970 > localhost.localdomain.ssh: Flags [.], ack 244, win 4104, length 0

17:33:47.716053 IP _gateway.domain > localhost.localdomain.36821: 36365 NXDomain 0/1/0 (78)

17:33:47.716543 IP localhost.localdomain.57441 > _gateway.domain: 61445+ PTR? 131.43.168.192.in-addr.arpa. (45)

5 packets captured

9 packets received by filter

0 packets dropped by kernel

-n 選項

-n選項不將IP地址解析為域名,直接以IP地址顯示:

[root@localhost ~]# tcpmp -c 5 -i any -n

dropped privs to tcpmp

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

listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

17:36:38.980756 IP 192.168.43.131.ssh > 192.168.43.1.39970: Flags [P.], seq 714383039:714383283, ack 1854024303, win 388, length 244

17:36:38.981032 IP 192.168.43.131.ssh > 192.168.43.1.39970: Flags [P.], seq 244:440, ack 1, win 388, length 196

17:36:38.981096 IP 192.168.43.131.ssh > 192.168.43.1.39970: Flags [P.], seq 440:604, ack 1, win 388, length 164

17:36:38.981153 IP 192.168.43.131.ssh > 192.168.43.1.39970: Flags [P.], seq 604:768, ack 1, win 388, length 164

17:36:38.981208 IP 192.168.43.131.ssh > 192.168.43.1.39970: Flags [P.], seq 768:932, ack 1, win 388, length 164

5 packets captured

5 packets received by filter

0 packets dropped by kernel

www.51cto.com/it/news/2020/0113/18299.html

www.donews.com/news/detail/4/2971720.html

news.yesky.com/hotnews/311/109240311.shtml

-s 選項

帶有-sXXX 的 tcpmp 可幫助你控制捕獲數據包的大小。在上一個輸出的第三行中,可以看到它表示捕獲大小 262144 位元組。可以使用-s選項更改捕獲數據大小。如果你只想檢查數據包標頭,則可以使用較小的大小進行捕獲:

[root@localhost ~]# tcpmp -c 5 -i any -n -s64

dropped privs to tcpmp

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

listening on any, link-type LINUX_SLL (Linux cooked), capture size 64 bytes

17:47:44.437891 IP 192.168.43.131.ssh > 192.168.43.1.39970: Flags [P.], seq 714405271:714405515, ack 1854033767, win 388, length 244

17:47:44.438153 IP 192.168.43.131.ssh > 192.168.43.1.39970: Flags [P.], seq 244:440, ack 1, win 388, length 196

17:47:44.438220 IP 192.168.43.131.ssh > 192.168.43.1.39970: Flags [P.], seq 440:604, ack 1, win 388, length 164

17:47:44.438301 IP 192.168.43.131.ssh > 192.168.43.1.39970: Flags [P.], seq 604:768, ack 1, win 388, length 164

17:47:44.438361 IP 192.168.43.131.ssh > 192.168.43.1.39970: Flags [P.], seq 768:932, ack 1, win 388, length 164

5 packets captured

5 packets received by filter

0 packets dropped by kernel

埠捕獲

tcpmp 允許你指定使用某個埠作為源或目標的網路數據包。例如,要捕獲 DNS 流量,你可以使用埠 53。可以在 port選項前加上 src/dst。如 src port 53 或 dst port 53 並進一步過濾它。

[root@localhost ~]# tcpmp -i any port 53 -n

dropped privs to tcpmp

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

listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

17:50:48.158109 IP 192.168.43.131.47054 > 192.168.43.2.domain: 58704+ A? www..com. (31)

17:50:48.158152 IP 192.168.43.131.47054 > 192.168.43.2.domain: 60504+ AAAA? www..com. (31)

17:50:48.159180 IP 192.168.43.2.domain > 192.168.43.131.47054: 60504 1/1/0 CNAME www.a.shifen.com. (115)

17:50:48.162018 IP 192.168.43.2.domain > 192.168.43.131.47054: 58704 3/0/0 CNAME www.a.shifen.com., A 180.101.49.11, A 180.101.49.12 (90)

下面只獲取源埠為53的數據包,其中-nn選項表示不解析IP地址和埠:

[root@localhost ~]# tcpmp -c 5 -i any src port 53 -nn -s64

dropped privs to tcpmp

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

listening on any, link-type LINUX_SLL (Linux cooked), capture size 64 bytes

18:00:41.604216 IP 192.168.43.2.53 > 192.168.43.131.48245: 50676[|domain]

18:00:41.606390 IP 192.168.43.2.53 > 192.168.43.131.48245: 19947[|domain]

18:00:41.631001 IP 192.168.43.2.53 > 192.168.43.131.54536: 31350 NXDomain[|domain]

18:00:46.110591 IP 192.168.43.2.53 > 192.168.43.131.42379: 17512[|domain]

18:00:46.110603 IP 192.168.43.2.53 > 192.168.43.131.42379: 40562[|domain]

5 packets captured

5 packets received by filter

0 packets dropped by kernel

下面只獲取目的埠為53的數據包:

[root@localhost ~]# tcpmp -c 5 -i any dst port 53 -nn -s64

dropped privs to tcpmp

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

listening on any, link-type LINUX_SLL (Linux cooked), capture size 64 bytes

18:01:22.568585 IP 192.168.43.131.49444 > 192.168.43.2.53: 27625+[|domain]

18:01:22.568623 IP 192.168.43.131.49444 > 192.168.43.2.53: 42481+[|domain]

18:01:22.595257 IP 192.168.43.131.45790 > 192.168.43.2.53: 28116+[|domain]

18:01:23.850730 IP 192.168.43.131.34861 > 192.168.43.2.53: 23444+[|domain]

18:01:23.850762 IP 192.168.43.131.34861 > 192.168.43.2.53: 23964+[|domain]

5 packets captured

5 packets received by filter

0 packets dropped by kernel

-w 選項

如果要將 tcpmp 的輸出寫入文件,請使用選項-w選項寫入文件。如果想查看寫了多少數據包,可以加-v選項。

[root@localhost ~]# tcpmp -c 4 -i any port 53 -nn -w dns.pcap -v

dropped privs to tcpmp

tcpmp: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

4 packets captured

6 packets received by filter

0 packets dropped by kernel

總結

tcpmp 用於收集有關網路流量數據的出色工具。數據包捕獲為故障排除和安全分析提供了有用的信息。

Ⅹ tcpmp是什麼意思.干什麼用的.哪裡有詳細的資料,

TCPDUMP簡介

在傳統的網路分析和測試技術中,嗅探器(sniffer)是最常見,也是最重要的技術之一。sniffer工具首先是為網路管理員和網路程序員進行網路分析而設計的。對於網路管理人員來說,使用嗅探器可以隨時掌握網路的實際情況,在網路性能急劇下降的時候,可以通過sniffer工具來分析原因,找出造成網路阻塞的來源。對於網路程序員來說,通過sniffer工具來調試程序。

用過windows平台上的sniffer工具(例如,netxray和sniffer pro軟體)的朋友可能都知道,在共享式的區域網中,採用sniffer工具簡直可以對網路中的所有流量一覽無余!Sniffer工具實際上就是一個網路上的抓包工具,同時還可以對抓到的包進行分析。由於在共享式的網路中,信息包是會廣播到網路中所有主機的網路介面,只不過在沒有使用sniffer工具之前,主機的網路設備會判斷該信息包是否應該接收,這樣它就會拋棄不應該接收的信息包,sniffer工具卻使主機的網路設備接收所有到達的信息包,這樣就達到了網路監聽的效果。

Linux作為網路伺服器,特別是作為路由器和網關時,數據的採集和分析是必不可少的。所以,今天我們就來看看Linux中強大的網路數據採集分析工具——TcpDump。

用簡單的話來定義tcpmp,就是:mp the traffice on a network,根據使用者的定義對網路上的數據包進行截獲的包分析工具。

作為互聯網上經典的的系統管理員必備工具,tcpmp以其強大的功能,靈活的截取策略,成為每個高級的系統管理員分析網路,排查問題等所必備的東東之一。

顧名思義,TcpDump可以將網路中傳送的數據包的「頭」完全截獲下來提供分析。它支持針對網路層、協議、主機、網路或埠的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的信息。

tcpmp提供了源代碼,公開了介面,因此具備很強的可擴展性,對於網路維護和入侵者都是非常有用的工具。tcpmp存在於基本的FreeBSD系統中,由於它需要將網路界面設置為混雜模式,普通用戶不能正常執行,但具備root許可權的用戶可以直接執行它來獲取網路上的信息。因此系統中存在網路分析工具主要不是對本機安全的威脅,而是對網路上的其他計算機的安全存在威脅。

普通情況下,直接啟動tcpmp將監視第一個網路界面上所有流過的數據包。
-----------------------
bash-2.02# tcpmp
tcpmp: listening on eth0
11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43
0000 0000 0080 0000 1007 cf08 0900 0000
0e80 0000 902b 4695 0980 8701 0014 0002
000f 0000 902b 4695 0008 00
11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97
ffff 0060 0004 ffff ffff ffff ffff ffff
0452 ffff ffff 0000 e85b 6d85 4008 0002
0640 4d41 5354 4552 5f57 4542 0000 0000
0000 00
^C
------------------------

首先我們注意一下,從上面的輸出結果上可以看出來,基本上tcpmp總的的輸出格式為:系統時間 來源主機.埠 > 目標主機.埠 數據包參數

TcpDump的參數化支持

tcpmp支持相當多的不同參數,如使用-i參數指定tcpmp監聽的網路界面,這在計算機具有多個網路界面時非常有用,使用-c參數指定要監聽的數據包數量,使用-w參數指定將監聽到的數據包寫入文件中保存,等等。

然而更復雜的tcpmp參數是用於過濾目的,這是因為網路中流量很大,如果不加分辨將所有的數據包都截留下來,數據量太大,反而不容易發現需要的數據包。使用這些參數定義的過濾規則可以截留特定的數據包,以縮小目標,才能更好的分析網路中存在的問題。tcpmp使用參數指定要監視數據包的類型、地址、埠等,根據具體的網路問題,充分利用這些過濾規則就能達到迅速定位故障的目的。請使用man tcpmp查看這些過濾規則的具體用法。

顯然為了安全起見,不用作網路管理用途的計算機上不應該運行這一類的網路分析軟體,為了屏蔽它們,可以屏蔽內核中的bpfilter偽設備。一般情況下網路硬體和TCP/IP堆棧不支持接收或發送與本計算機無關的數據包,為了接收這些數據包,就必須使用網卡的混雜模式,並繞過標準的TCP/IP堆棧才行。在FreeBSD下,這就需要內核支持偽設備bpfilter。因此,在內核中取消bpfilter支持,就能屏蔽tcpmp之類的網路分析工具。

並且當網卡被設置為混雜模式時,系統會在控制台和日誌文件中留下記錄,提醒管理員留意這台系統是否被用作攻擊同網路的其他計算機的跳板。

May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled

雖然網路分析工具能將網路中傳送的數據記錄下來,但是網路中的數據流量相當大,如何對這些數據進行分析、分類統計、發現並報告錯誤卻是更關鍵的問題。網路中的數據包屬於不同的協議,而不同協議數據包的格式也不同。因此對捕獲的數據進行解碼,將包中的信息盡可能的展示出來,對於協議分析工具來講更為重要。昂貴的商業分析工具的優勢就在於它們能支持很多種類的應用層協議,而不僅僅只支持tcp、udp等低層協議。

從上面tcpmp的輸出可以看出,tcpmp對截獲的數據並沒有進行徹底解碼,數據包內的大部分內容是使用十六進制的形式直接列印輸出的。顯然這不利於分析網路故障,通常的解決辦法是先使用帶-w參數的tcpmp 截獲數據並保存到文件中,然後再使用其他程序進行解碼分析。當然也應該定義過濾規則,以避免捕獲的數據包填滿整個硬碟。

TCP功能

數據過濾

不帶任何參數的TcpDump將搜索系統中所有的網路介面,並顯示它截獲的所有數據,這些數據對我們不一定全都需要,而且數據太多不利於分析。所以,我們應當先想好需要哪些數據,TcpDump提供以下參數供我們選擇數據:

-b 在數據-鏈路層上選擇協議,包括ip、arp、rarp、ipx都是這一層的。

例如:tcpmp -b arp 將只顯示網路中的arp即地址轉換協議信息。

-i 選擇過濾的網路介面,如果是作為路由器至少有兩個網路介面,通過這個選項,就可以只過濾指定的介面上通過的數據。例如:

tcpmp -i eth0 只顯示通過eth0介面上的所有報頭。

src、dst、port、host、net、ether、gateway這幾個選項又分別包含src、dst 、port、host、net、ehost等附加選項。他們用來分辨數據包的來源和去向,src host 192.168.0.1指定源主機IP地址是192.168.0.1,dst net 192.168.0.0/24指定目標是網路192.168.0.0。以此類推,host是與其指定主機相關無論它是源還是目的,net是與其指定網路相關的,ether後面跟的不是IP地址而是物理地址,而gateway則用於網關主機。可能有點復雜,看下面例子就知道了:

tcpmp src host 192.168.0.1 and dst net 192.168.0.0/24

過濾的是源主機為192.168.0.1與目的網路為192.168.0.0的報頭。

tcpmp ether src 00:50:04:BA:9B and dst……

過濾源主機物理地址為XXX的報頭(為什麼ether src後面沒有host或者net?物理地址當然不可能有網路嘍)。

Tcpmp src host 192.168.0.1 and dst port not telnet

過濾源主機192.168.0.1和目的埠不是telnet的報頭。

ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾數據報的類型。
例如:

tcpmp ip src……

只過濾數據-鏈路層上的IP報頭。

tcpmp udp and src host 192.168.0.1

只過濾源主機192.168.0.1的所有udp報頭。

數據顯示/輸入輸出

TcpDump提供了足夠的參數來讓我們選擇如何處理得到的數據,如下所示:

-l 可以將數據重定向。

如tcpmp -l >tcpcap.txt將得到的數據存入tcpcap.txt文件中。

-n 不進行IP地址到主機名的轉換。

如果不使用這一項,當系統中存在某一主機的主機名時,TcpDump會把IP地址轉換為主機名顯示,就像這樣:eth0 < ntc9.1165> router.domain.net.telnet,使用-n後變成了:eth0 < 192.168.0.9.1165 > 192.168.0.1.telnet。

-nn 不進行埠名稱的轉換。

上面這條信息使用-nn後就變成了:eth0 < ntc9.1165 > router.domain.net.23。

-N 不列印出默認的域名。

還是這條信息-N 後就是:eth0 < ntc9.1165 > router.telnet。

-O 不進行匹配代碼的優化。
-t 不列印UNIX時間戳,也就是不顯示時間。
-tt 列印原始的、未格式化過的時間。
-v 詳細的輸出,也就比普通的多了個TTL和服務類型。

TCPDUMP的安裝

在linux下tcpmp的安裝十分簡單,一般由兩種安裝方式。一種是以rpm包的形式來進行安裝。另外一種是以源程序的形式安裝。
1. rpm包的形式安裝
#rpm -ivh tcpmp-3_4a5.rpm
這樣tcpmp就順利地安裝到你的linux系統中。怎麼樣,很簡單吧。
2. 源程序的安裝
#tar xvfz tcpmp-3_4a5.tar.Z
rpm的包可以使用如下命令安裝:
#rpm -ivh tcpmp-3_4a5.src.rpm
這樣就把tcpmp的源代碼解壓到/usr/src/redhat/SOURCES目錄下.

第二步 做好編譯源程序前的准備活動

在編譯源程序之前,最好已經確定庫文件libpcap已經安裝完畢,這個庫文件是tcpmp軟體所需的庫文件 。同樣,你同時還要有一個標準的c語言編譯器。在linux下標準的c 語言編譯器一般是gcc。 在tcpmp的源程序目錄中。有一個文件是Makefile.in,configure命令就是從Makefile.in文件中自動產生Makefile文件。在Makefile.in文件中,可以根據系統的配置來修改BINDEST 和 MANDEST 這兩個宏定義,預設值是
BINDEST = @sbindir@
MANDEST = @mandir@

第一個宏值表明安裝tcpmp的二進制文件的路徑名,第二個表明tcpmp的man 幫助頁的路徑名,你可以修改它們來滿足系統的需求。

第三步 編譯源程序

使用源程序目錄中的configure腳本,它從系統中讀出各種所需的屬性。並且根據Makefile.in文件自動生成Makefile文件,以便編譯使用.make 命令則根據Makefile文件中的規則編譯tcpmp的源程序。使用make install命令安裝編譯好的tcpmp的二進制文件。

總結一下就是:

# tar xvfz tcpmp-3_4a5.tar.Z
# vi Makefile.in
# . /configure
# make
# make install

關於tcpmp更詳細的信息,請查看Man tcpmp。

閱讀全文

與tcpdump按協議過濾相關的資料

熱點內容
科氏ro反滲透膜 瀏覽:6
美菱飲水機怎麼換濾網 瀏覽:469
化妝品污水厭氧做法 瀏覽:589
污水泵上的數字代表什麼意思 瀏覽:391
機油濾芯里的油有多少 瀏覽:845
用甲苯可以溶解的固體樹脂 瀏覽:709
飯店因為凈化器被封了怎麼解決 瀏覽:719
納濾反滲透結合 瀏覽:142
污水處理廠倒班時間安排 瀏覽:32
美的空調掛機拆卸過濾網視頻 瀏覽:821
鋅廢水危害 瀏覽:85
日產16款騏達空調濾芯在哪裡換 瀏覽:302
洗砂廠污水處理沉降罐 瀏覽:78
凈水器可以換ro膜 瀏覽:51
飲水機桶為什麼包袋子 瀏覽:448
山東全自動污水提升器購買 瀏覽:689
除垢後外壁結塊 瀏覽:188
杭州線路板廠廢水處理多少錢 瀏覽:315
飲水機晚上關電源會怎麼樣 瀏覽:667
凈水器只有廢水不出水怎麼回事 瀏覽:965