1、作用
tcpdump 指令可列出經過指定網路介面的封包檔案頭,可以將網路中傳送的封包的「頭」 完全截獲下來提供分析。它支援針對網路層、協定、主機、網路或連接埠的過濾,並提供 and、or、not 等邏輯語句來幫助你摘取有用資訊。 ######由於它需要將網路介面設定為混雜模式,一般使用者無法正常執行,但具備 root 權限的使用者可以直接執行它來取得網路上的資訊###
其他抓包工具
wireshark具有圖形化和命令列兩種版本,可以對tcpdump 抓的包進行分析,其主要功能就是分析資料包。
ngrep它將抓到的套件資料以文字形式直接顯示出來,適用於套件資料包含文字的[抓包]分析(如HTTP、MySQL )
tcpdump [選項] [協定] [資料流方向] [範圍]
-a 將網路位址和廣播位址轉換成名字
-A 以ASCII 格式列印所有分組,並將鏈路層的頭最小化
-b 資料鏈路層上選擇協議,包括ip/arp/rarp/ipx 都在這一層
-c 指定收取資料包的次數,即在收到指定數量的資料包後退出tcpdump
-d 將匹配資訊包的程式碼以人們能夠理解的彙編格式輸出
-dd 將符合訊息包的程式碼以c 語言程式段的格式輸出
-ddd 將符合訊息包的程式碼以十進位的形式輸出
-D 列印系統中所有可以監控的網路介面
-e 在輸出行列印出資料鏈結層的頭部訊息
-f 將外部的Internet 位址以數字的形式列印出來,即不顯示主機名稱
-F 從指定的檔案中讀取表達式,忽略其他的表達式
-i 指定監聽網路介面
-l 使標準輸出變成緩衝形式,可以資料匯出到檔案
-L 列出網路介面已知的資料連結
-n 不把網路位址轉換為名字
-N 不輸出主機名稱中的網域部分,例如www.baidu.com 只輸出www
-nn 不進行連接埠名稱的轉換
-P 不會將網路介面設定為混雜模式
-q 快速輸出,即只輸出較少的協定資訊
-r 從指定的檔案讀取數據,一般是- w 保存的檔案
-w 將捕獲到的資訊儲存到檔案中,且不分析並列印在螢幕
-s 從每個群組中讀取在開始的snaplen 個位元組,而不是預設的68 個位元組
-S 將tcp 的序號以絕對值形式輸出,而不是相對值
-T 將監聽到的套件直接解析為指定的類型的報文,常見的類型有rpc(遠端程序呼叫)和snmp(簡單網路管理協定)
-t 在輸出的每一行不列印時間戳
-tt 在每一行輸出非格式化的時間戳記
#-ttt 輸出本行和前面以後之間的時間差
-tttt 在每一行中輸出data 處理的預設格式的時間戳
#-u 輸出未解碼的NFS 句柄
#-v 輸出稍微詳細的信息,例如在ip 套件中可以包括ttl 和服務類型的信息
-vv 輸出相信的保報文資訊
關於資料類型的關鍵字
包括host、port、net:
host 192.168.100.1 表示一台主機,net 192.168.100.0 表示一個網路網段,port 80 指明連接埠號碼為80,這裡如果沒有指明資料類型,那麼預設就是host
牛逼啊!接私活必备的 N 个开源项目!赶快收藏
資料傳輸方向的關鍵字
包括src、dst、dst or src、dst and src,這些關鍵字指明了傳輸的方向,例如src 192.168.100.1 說明封包來源位址是192.168.100.1。 dst net 192.168.100.0 指明目的網路位址為192.168.100.0,預設為監控主機對主機的src 和dst,即預設監聽本機和目標主機的所有資料
協定關鍵字
##包括ip、arp、rarp、udp
#
其他关键字
运算类型:or、and、not、!
辅助功能型:gateway、less、broadcast、greater
tcpdump [协议类型] [源或目标] [主机名称或 IP] [or/and/not/! 条件组合] [源或目标] [主机名或 IP] [or/and/not/! 条件组合] [端口] [端口号] …… [or/and/not/! 条件组合] [条件]
> tcpdump ip dst 192.168.10.1 and src 192.168.10.10 and port 80 and host !www.baidu.com
tcpdump
默认监听在第一块网卡,监听所有经过此网卡的数据包
> tcpdump -i ens33
监听指定网卡 ens33 的所有传输数据包
> tcpdump -i ens33 host 192.168.100.10
捕获主机 192.168.100.10 经过网卡 ens33 的所有数据包(也可以是主机名,但要求可以解析出 IP 地址)
第一列:报文的时间
第二列:网络协议 IP
第三列:发送方的 ip 地址、端口号、域名,上图显示的是本机的域名,可通过 / etc/hosts 查看本机域名
第四列:箭头 >, 表示数据流向
第五列:接收方的 ip 地址、端口号、域名,
第六列:冒号
第七列:数据包内容,报文头的摘要信息,有 ttl、报文类型、标识值、序列、包的大小等信息
> tcpdump host 192.168.130.151 and 192.168.130.152or192.168.130.153192.168.130.152or192.168.130.153
捕获主机 192.168.56.209 和主机 192.168.56.210 或 192.168.56.211 的所有通信数据包
> tcpdump ip host node9 and not www.baidu.com
捕获主机 node9 与其他主机之间(不包括 www.baidu.com)通信的 ip 数据包
> tcpdump ip host node9 and ! www.baidu.com
捕获 node9 与其他所有主机的通信数据包(不包括 www.baidu.com)
> tcpdump -i ens33 src node10
捕获源主机 node10 发送的所有的经过 ens33 网卡的所有数据包
> tcpdump -i ens33 dst host www.baidu.com
捕获所有发送到主机 www.baidu.com 的数据包
监听主机 192.168.56.1 和 192.168.56.210 之间 ip 协议的 80 端口的且排除 www.baidu.com 通信的所有数据包:
> tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host ! baidu.com
也可以写成 tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host not www.baidu.com,即 not 和!都是相同的取反的意思
> tcpdump arp
监控指定主机的通信数据包与 1.9.1 方式相同
> tcpdump tcp port 22 and host 192.168.56.210
捕获主机 192.168.56.210 接收和发出的 tcp 协议的 ssh 的数据包
tcpdump udp port 53
监听本机 udp 的 53 端口的数据包,udp 是 dns 协议的端口,这也是一个 dns 域名解析的完整过程
tcpdump 可以支持逻辑运算符
and: 与运算,所有的条件都需要满足,可用 “and”和 “&&” 表示
or:或运行,只要有一个条件满足就可以,可用 “or” 和“|”表示
not:取反,即取反条件,可以用 “not” 和“!”表示
> tcpdump icmp and src 192.168.100.10 -i ens33 -n
过滤 icmp 报文并且源 IP 是 192.168.100.10
多条件格式
在使用多个过滤条件进行组合时,有可能需要用到括号,而括号在 shell 中是特殊符号,又需要使用引号将其包含。用括号的主要作用是逻辑运算符之间存在优先级,!>and > or, 为例条件能够精确所以需要对一些必要的组合括号括起来,而括号的意思相当于加减运算一样,括起来的内容作为一个整体进行逻辑运算。
过滤源地址是 192.168.100.1 并且目的地址是 192.168.20.20 的数据包或者 ARP 协议的包。另外,搜索公众号Linux就该这样学后台回复“Linux”,获取一份惊喜礼包。
> tcpdump **src** host 192.168.10.10 -i ens33 -n -c 5
过滤源 IP 地址是 192.168.10.10 的包
> tcpdump **dst** host 192.168.10.10 -i ens33 -n -c 5
过滤目的 IP 地址是 192.168.10.10 的包
基于端口进行过滤
> tcpdump port 22 -i ens33 -n -c 5 > 过滤端口号为 22 即 ssh 协议的
> tcpdump portrange 22-433 -i ens33 -n -c 8
过滤端口号 22-433 内的数据包
Wireshark 是一个网络封包分析软件。网络封包分析软件的功能是捕获网络数据包,并尽可能显示出最为详细的网络封包资料。Wireshark 使用 WinPCAP 作为接口,直接与网卡进行数据报文交换
Linux 中有两个版本的 wireshark,一个是 wireshark,这个版本是无图形化界面,基本命令是”tshark“。
一个是 wireshark-gnome(界面版本),这个版本只能安装在支持 GUI 功能的 Linux 的版本中。
> yum -y install wireshark // 安装无图形化版本 > yum -y install wireshark-gnome // 安装图形化版本
注:这里的通过 yum 进行安装,需要提前做好 epel 源(即红帽操作系统额外拓展包),装上了 EPEL 之后,就相当于添加了一个第三方源。官方的 rpm repository 提供的 rpm 包也不够丰富,很多时候需要自己编译那太辛苦了,而 EPEL 可以解决官方 yum 源数据包不够丰富的情况。
安装epel源
> yum -y install epel-release
tshark 是 wireshark 的命令行工具 tshark 选项 参数 -i:指定捕获的网卡接口,不设置默认第一个非环回口接口 -D:显示所有可用的网络接口列表 -f:指定条件表达式,与 tcpdump 相同 -s:设置每个抓包的大小,默认 65535,多于这个大小的数据将不会不会被截取。 -c:捕获指定数量的数据包后退出 -w:后接文件名,将抓包的结果输出到. pcap 文件中,可以借助其他网络分析工具进行分 析,也可以使用重定向 > 把解码后的输出结果以 txt 的格式输出。 -p:设置网络接口以非混合模式工作,即只关心和本机有关的流量 -r:后接文件路径,用于分析保持好的网络包文件,比如 tcpdump 的输出文件 -n:禁止所有地址名字解析,即禁止域名解析, 默认是允许所有 -N:指定对某一层的地址名字解析,如果 - n 和 - N 同时存在,则 - n 将被忽略,如果两者都不写,则会默认打开所有地址名字解析 m:代表数据链路层 n:代表网络层 t:代表传输层 -V:设置将解码结果的细节输出,否则解码结果仅显示一个 packet 一行的 summary -t:设置结果的时间格式 ad:表示带日期的绝对时间 a:表示不带日期的绝对时间 r:表示从第一个包到现在的相对时间 d:表示两个相邻包之间的增量时间
tshark -f "icmp" -i ens33 -V -c 1
过滤 icmp 报文,并展开详细信息。另外,搜索公众号编程技术圈后台回复“1024”,获取一份惊喜礼包。
tshark -f "arp" -i ens33
过滤 arp 报文
Tcpdump 解析封包資訊沒有wireshark 詳細,所以可以透過Tcpdump 捕獲資料並輸出,再透過wireshark 進行解析,輸出檔案格式為. pcap 或其他
在虛擬機器上透過wireshark 讀取
#使用ip.addr == [ip 位址號] 可以過濾掉無關ip
圖形讀取
#用wireshark 直接開啟檢視
tcpdump 和wireshark 兩種單以抓包的功能來看,是相似的,兩者的命令列的選項也是有相同,但是tcpdump 對資料包分析的能力不是很好,同時目前很多Linux 內建安裝了tcpdump 這個工具,所以我們可以透過tcpdump 把封包抓出並存放到我們自訂的檔案(.pcap)中,再透過把檔案取出用wireshark 進行分析排障
以上是Linux 網路抓包分析工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!