10.22 tcpdump:监听网络流量
生活随笔
收集整理的這篇文章主要介紹了
10.22 tcpdump:监听网络流量
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【功能說明】
tcpdump命令是一個截獲網絡數據包的包分析工具。tcpdump可以將網絡中傳送的數據包的“頭”完全截獲下來以提供分析。它支持針對網絡層、協議、主機、端口等的過濾,并支持與、或、非邏輯語句協助過濾有效信息。 tcpdump命令工作時要先把網卡的工作模式切換到混雜模式(promiscuous mode)。因為要修改網絡接口的工作模式,所以tcpdump命令需要以root的身份運行。【語法格式】
tcpdump [option] [expression]? tcpdump [選項]? ? [表達式] 表10-23 tcpdump 命令的參數選項及說明 參數選項?? ??? ??? ?解釋說明 -A?? ??? ??? ??? ?? ?以ASCII碼的方式顯示每一個數據包(不會顯示數據包中鏈路層的頭部信息)。在抓取包含網頁數據的數據包時,可方便查看數據 -c<數據包數目>?? ??? ?接收到指定的數據包數目后退出命令 -e?? ??? ??? ??? ??? 每行的打印輸出中將包括數據包的數據鏈路層頭部信息 -i<網絡接口>?? ??? ??指定要監聽數據包的網絡接口 -n?? ??? ??? ??? ???不進行DNS解析,加快顯示速度 -nn?? ??? ??? ?? ? ?不將協議和端口數字等轉換成名字 -q?? ??? ??? ?? ? ??以快速輸出的方式運行,此選項僅顯示數據包的協議概要信息,輸出信息較短 -s<教據包大小>?? ?? ?設置數據包抓取長度,如果不設置則默認為68等節,設置為0則自動選擇合適的長度來抓取數據包 -t?? ??? ??? ??? ???在每行輸出信息中不顯示時間截標記 -tt?? ??? ??? ??? ??在每行輸出信息中顯示無格式的時間載標記 -ttt?? ??? ??? ??? ?顯示當前行與前一行的延遲 -tttt?? ??? ??? ??? 在每行打印的時間戳之前添加日期 -ttttt?? ??? ??? ???顯示當前行與第一行的延遲 -v?? ??? ??? ??? ???顯示命令執行的詳細信息 -vv?? ??? ??? ??? ??顯示比-v選項更加詳細的信息 -vvv?? ??? ??? ??? ?顯示比-vv選項更加詳細的輸出使用范例
不加參數運行tcpdump命令監聽網絡。
[root@lewen ~]# tcpdump #默認清況下,直接啟動tcpdump將監視第一個網絡接口上所有流過的數據包。 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes ...使用tcpdump命令時,如果不輸入過濾規則,則輸出的數據量將會很大。 精簡輸出信息。[root@lewen ~]# tcpdump -q 04:08:32.963134 IP lewen.ssh > 10.0.0.1.10662: tcp 180 04:08:32.963256 IP lewen.ssh > 10.0.0.1.10662: tcp 116 04:08:32.963325 IP 10.0.0.1.10662 > lewen.ssh: tcp 0 04:08:32.963390 IP lewen.ssh > 10.0.0.1.10662: tcp 180 04:08:32.963492 IP lewen.ssh > 10.0.0.1.10662: tcp 116 04:08:32.964604 IP lewen.ssh > 10.0.0.1.10662: tcp 116[root@lewen ~]# tcpdump -c 5 #使用-c選項指定監聽的數據包數量,這樣就不需要使用Ctrl+C了。 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 04:09:50.191752 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 3827665832:3827666044, ack 1911166938, win 274, length 212 04:09:50.192434 IP lewen.44182 > public1.alidns.com.domain: 5716+ PTR? 1.0.0.10.in-addr.arpa. (39) 04:09:50.245211 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 212, win 8212, length 0 04:09:50.257155 IP public1.alidns.com.domain > lewen.44182: 5716 NXDomain 0/1/0 (116) 04:09:50.258230 IP lewen.36787 > public1.alidns.com.domain: 45732+ PTR? 81.0.0.10.in-addr.arpa. (40) 5 packets captured 21 packets received by filter 0 packets dropped by kernel監聽指定網卡收到的數據包
[root@lewen ~]# tcpdump -i eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 04:11:33.924611 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 651624, win 8209, length 0 04:11:33.924679 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 651624:651884, ack 105, win 274, length 260 04:11:33.924776 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 651884:652048, ack 105, win 274, length 164 04:11:33.924834 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 652048, win 8207, length 0 04:11:33.924901 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 652048:652308, ack 105, win 274, length 260 04:11:33.929182 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 652308:652472, ack 105, win 274, length 164 04:11:33.931108 IP 10.0.0.1.10662 > lewen.ssh: Flags [.], ack 652472, win 8212, length 0 04:11:33.931140 IP lewen.ssh > 10.0.0.1.10662: Flags [P.], seq 652472:652636, ack 105, win 274, length 16404:11:33.931140:當前時間,精確到微秒。 IP lewen.ssh > 10.0.0.1.10662:從主機lewen的SSH端口發送數據到10.0.0.1的10662端口,“>”代表數據流向。 Flags[P.]:TCP包中的標志信息,S是SYN標志的縮寫,F(FIN)、P(PUSH)、R(RST)、"."(沒有標記)。 seq:數據包中的數據的順序號。 ack:下次期望的順序號。 win:接收緩存的窗口大小。 length:數據包長度。監聽指定主機的數據包
[root@lewen ~]# tcpdump -n host 10.0.0.1 #<=使用-n選項不進行DNS解析,加快顯示地度。監聽指定主機的關鍵字為host,后面直接接主機名或了IP地址即可。本行命令的作用是監聽所有10.0.0.1的主機收到的和發出的數據包。[root@lewen ~]# tcpdump -n src host 10.0.0.1 #<-只監聽從10.0.0.1發出的數據包,即源地址為10.0.0.1,關鍵字為src(source,原地址)。 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 20:20:55.821984 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 3862927143, win 4106, length 0 20:20:55.866408 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 149, win 4105, length 0 20:20:55.907580 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 297, win 4105, length 0 20:20:55.950705 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 445, win 4104, length 0 20:20:55.991940 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 593, win 4103, length 0 20:20:56.032129 IP 10.0.0.1.14389 > 10.0.0.7.ssh: Flags [.], ack 741, win 4103, length 0[root@lewen ~]# tcpdump -n dst host 10.0.0.1 #<==只監聽10.0.0.1收到的數據包,即目標地址為10.0.0.1,關就字為dst(destination,目的地)。 20:22:13.074240 IP 10.0.0.7.ssh > 10.0.0.1.14389: Flags [P.], seq 506496:506660, ack 53, win 252, length 164 20:22:13.074331 IP 10.0.0.7.ssh > 10.0.0.1.14389: Flags [P.], seq 506660:506824, ack 53, win 252, length 164監聽指定端口的數據包
[root@lewen ~]# tcpdump -nn port 22 #使用-n選項不進行DNS解析,但是其會將一些協議、端口進行轉換,比如22端口轉為ssh。因此本例使用nn 選項。監聽指定端口的關鍵字是port,后面接上端口號即可20:24:26.193100 IP 10.0.0.1.14389 > 10.0.0.7.22: Flags [.], ack 556296, win 4101, length 0 20:24:26.193225 IP 10.0.0.7.22 > 10.0.0.1.14389: Flags [P.], seq 556296:556556, ack 105, win 252, length 260 20:24:26.193535 IP 10.0.0.7.22 > 10.0.0.1.14389: Flags [P.], seq 556556:556720, ack 105, win 252, length 164監聽指定協議的數據包。
[root@lewen ~]# tcpdump -n arp #<--監聽ARP數據包,因此表達式直接寫arp即可。 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 20:26:43.219758 ARP, Request who-has 10.0.0.96 tell 10.0.0.210, length 46 20:26:43.511133 ARP, Request who-has 10.0.0.95 tell 10.0.0.210, length 46 20:26:44.224050 ARP, Request who-has 10.0.0.96 tell 10.0.0.210, length 46 20:26:44.512986 ARP, Request who-has 10.0.0.95 tell 10.0.0.210, length 46 20:26:45.230012 ARP, Request who-has 10.0.0.96 tell 10.0.0.210, length 46[root@lewen ~]# tcpdump -n icmp #<-監聽icmp數據包(想要查著下面的監拉數據,可以使用其他機器ping本機即可) tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 20:27:31.377258 IP 10.0.0.210 > 10.0.0.2: ICMP 10.0.0.210 udp port 49207 unreachable, length 127 20:27:31.479590 IP 10.0.0.210 > 10.0.0.2: ICMP 10.0.0.210 udp port 48776 unreachable, length 135常見的協議關鍵字有ip、arp、icmp、tcp、udp等類型。?多個過濾條件混合使用
前面的幾種方法都是使用單個過濾條件過濾數據包,其實過濾條件可以混合使用,因為tcpdump命令支持邏輯運算符and(與)、or(或)、!(非)。[root@lewen ~]# tcpdump -n ip host 10.0.0.7 and ! 10.0.0.1 #<==獲取主機10.0.0.7與所有主機(除了主機10.0.0.1之外)通信的ip數據包。 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 20:29:42.366445 IP 10.0.0.210.51642 > 10.0.0.7.zabbix-agent: Flags [S], seq 1999440710, win 29200, options [mss 1460,sackOK,TS val 75899232 ecr 0,nop,wscale 7], length 0 20:29:42.366483 IP 10.0.0.7.zabbix-agent > 10.0.0.210.51642: Flags [S.], seq 920922656, ack 1999440711, win 28960, options [mss 1460,sackOK,TS val 80531477 ecr 75899232,nop,wscale 7], length 0 20:29:42.366628 IP 10.0.0.210.51642 > 10.0.0.7.zabbix-agent: Flags [.], ack 1, win 229, options [nop,nop,TS val 75899232 ecr 80531477], length 0 20:29:42.366674 IP 10.0.0.210.51642 > 10.0.0.7.zabbix-agent: Flags [P.], seq 1:15, ack 1, win 229, options [nop,nop,TS val 75899232 ecr 80531477], length 14 20:29:42.366681 IP 10.0.0.7.zabbix-agent > 10.0.0.210.51642: Flags [.], ack 15, win 227, options [nop,nop,TS val 80531477 ecr 75899232], length 0 20:29:42.371129 IP 10.0.0.210.51644 > 10.0.0.7.zabbix-agent: Flags [S], seq 2767440940, win 29200, options [mss 1460,sackOK,TS val 75899236 ecr 0,nop,wscale 7], length 0 20:29:42.371153 IP 10.0.0.7.zabbix-agent > 10.0.0.210.51644: Flags [S.], seq 3632462468, ack 2767440941, win 28960, options [mss 1460,sackOK,TS val 80531482 ecr 75899236,nop,wscale 7], length 0 20:29:42.371313 IP 10.0.0.210.51644 > 10.0.0.7.zabbix-agent: Flags [.], ack 1, win 229, options [nop,nop,TS val 75899237 ecr 80531482], length 0 20:29:42.371397 IP 10.0.0.210.51644 > 10.0.0.7.zabbix-agent: Flags [P.], seq 1:25, ack 1, win 229, options [nop,nop,TS val 75899237 ecr 8利用tcpdump抓包詳解tcp/ip 連接和斷開過程的案例。
1)正常的TCP連接的三個階段。- SYN:(同步序列編號,Synchronize Sequence Numbers)該標志僅在三次握手建立TCP連接時有效。表示一個新的TCP連接請求。
- ACK:(確認編號,Acknowledgement Number)是對TCP請求的確認標志,同時提示對端系統已經成功接收了所有的數據。
- FIN:(結束標志,FINish)用來結束一個TCP回話。但對應端口仍然處于開放狀態,準備接收后續數據。
總結
以上是生活随笔為你收集整理的10.22 tcpdump:监听网络流量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8.10-11 mount、umount
- 下一篇: 8.8-9 fsck、dd