歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

Linux系統如何使用tcpdump命令

  tcpdump是Linux命令中的抓包命令,能夠截取並分析網絡傳送的數據包,是非常強大的網絡數據采集分析工具,那麼在Linux系統要如何使用tcpdump命令的,下面小編對tcpdump命令的用法做個簡單的介紹。

 Linux系統如何使用tcpdump命令

  實用命令實例

  默認啟動

  tcpdump

  普通情況下,直接啟動tcpdump將監視第一個網絡接口上所有流過的數據包。

  監視指定網絡接口的數據包

  tcpdump -i eth1

  如果不指定網卡,默認tcpdump只會監視第一個網絡接口,一般是eth0,下面的例子都沒有指定網絡接口。

  監視指定主機的數據包

  打印所有進入或離開sundown的數據包。

  tcpdump host sundown

  也可以指定ip,例如截獲所有210.27.48.1 的主機收到的和發出的所有的數據包

  tcpdump host 210.27.48.1

  打印helios 與 hot 或者與 ace 之間通信的數據包

  tcpdump host helios and \( hot or ace \)

  截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通信

  tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

  打印ace與任何其他主機之間通信的IP 數據包, 但不包括與helios之間的數據包。

  tcpdump ip host ace and not helios

  如果想要獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的ip包,使用命令:

  tcpdump ip host 210.27.48.1 and ! 210.27.48.2

  截獲主機hostname發送的所有數據

  tcpdump -i eth0 src host hostname

  監視所有送到主機hostname的數據包

  tcpdump -i eth0 dst host hostname

  監視指定主機和端口的數據包

  如果想要獲取主機210.27.48.1接收或發出的telnet包,使用如下命令

  tcpdump tcp port 23 host 210.27.48.1

  對本機的udp 123 端口進行監視 123 為ntp的服務端口

  tcpdump udp port 123

  監視指定網絡的數據包

  打印本地主機與Berkeley網絡上的主機之間的所有通信數據包(nt: ucb-ether, 此處可理解為‘Berkeley網絡’的網絡地址,此表達式最原始的含義可表達為: 打印網絡地址為ucb-ether的所有數據包)

  tcpdump net ucb-ether

  打印所有通過網關snup的ftp數據包(注意, 表達式被單引號括起來了, 這可以防止shell對其中的括號進行錯誤解析)

  tcpdump ‘gateway snup and (port ftp or ftp-data)’

  打印所有源地址或目標地址是本地主機的IP數據包

  (如果本地網絡通過網關連到了另一網絡, 則另一網絡並不能算作本地網絡。(nt: 此句翻譯曲折,需補充).localnet 實際使用時要真正替換成本地網絡的名字)

  tcpdump ip and not net localnet

  監視指定協議的數據包

  打印TCP會話中的的開始和結束數據包, 並且數據包的源或目的不是本地網絡上的主機。(nt: localnet, 實際使用時要真正替換成本地網絡的名字))

  tcpdump ‘tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet’

  打印所有源或目的端口是80, 網絡層協議為IPv4, 並且含有數據,而不是SYN,FIN以及ACK-only等不含數據的數據包。(ipv6的版本的表達式可做練習)

  tcpdump ‘tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)《《2)) - ((tcp[12]&0xf0)》》2)) != 0)’

  (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[]’。)

  打印長度超過576字節, 並且網關地址是snup的IP數據包

  tcpdump ‘gateway snup and ip[2:2] 》 576’

  打印所有IP層廣播或多播的數據包, 但不是物理以太網層的廣播或多播數據報

  tcpdump ‘ether[0] & 1 = 0 and ip[16] 》= 224’

  打印除‘echo request’或者‘echo reply’類型以外的ICMP數據包( 比如,需要打印所有非ping 程序產生的數據包時可用到此表達式 。

  (nt: ‘echo reuqest’ 與 ‘echo reply’ 這兩種類型的ICMP數據包通常由ping程序產生))

  tcpdump ‘icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply’

上一頁1234下一頁共4頁

Copyright © Linux教程網 All Rights Reserved