wireshark安裝使用與tcpdump的抓包分析

minxihou發表於2018-05-08

前言

哎,還是得說點廢話了,為啥我大半年沒有出現實在不是我不願意寫而是真的沒有時間寫。天天加班累成狗。寫這一篇部落格的前景是因為在做測試的過程當中遇到了要使用wireshark和tcpdump工具的場景,而且正好以前用的很多東西有點手生,給自己留一篇筆記,方便以後查閱。

環境介紹

系統環境:
這裡所使用的

# uname -r
3.10.0-123.el7.x86_64
# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
# uname -a
Linux xlcarity.example.org 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

repo源:
這裡使用的都是centos系統自帶的repo源,安裝wireshark主要使用到的repo源有兩個,一個是base源一個是epel源。如果你的實驗環境網路條件不好的話,建議使用阿里的repo源。這裡給出一個出自於2017年阿里的base源和epel原始檔。有愛自取,因為有點偏題了。

epel源的檔案

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
        http://mirrors.aliyuncs.com/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug
        http://mirrors.aliyuncs.com/epel/7/$basearch/debug
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0

[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://mirrors.aliyun.com/epel/7/SRPMS
        http://mirrors.aliyuncs.com/epel/7/SRPMS
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0

base原始檔:

[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

安裝wireshark

首先配置好yum源之後使用yum search命令看看是否能夠檢視到wireshark的安裝包。這裡我們要使用的安裝包主要有兩個,一個是wireshark.x86_64,另外一個是wireshark-gnome.x86_64。

# yum search all wireshark
已載入外掛:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.shu.edu.cn
 * updates: mirrors.aliyun.com
======================================================= 匹配:wireshark =======================================================
wireshark-devel.i686 : Development headers and libraries for wireshark
wireshark-devel.x86_64 : Development headers and libraries for wireshark
wireshark-gnome.x86_64 : Gnome desktop integration for wireshark
wireshark.i686 : Network traffic analyzer
wireshark.x86_64 : Network traffic analyzer
derrick.x86_64 : A Simple Network Stream Recorder
samba-pidl.noarch : Perl IDL compiler

#yum install wireshark
![這裡寫圖片描述](https://img-blog.csdn.net/20180507183040274?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21pbnhpaG91/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

#yum install wireshark-gnome.x86_64 
![這裡寫圖片描述](https://img-blog.csdn.net/20180507183231540?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21pbnhpaG91/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

wireshark使用

完成了上述安裝步驟之後在命令列輸入wireshark命令則會彈出圖形化視窗。

這裡寫圖片描述

wireshark會自動檢測到本地主機上的網路介面,選擇你想監聽的埠然後點選start,wireshark就會開始捕捉這個介面上的收發包。這裡我們練習演示選擇一個帶172.16.20.0/24的網段的網口進行監聽。選擇好網路卡口之後就可以點選start進行埠偵聽。
這裡寫圖片描述

這裡我們擷取一個包的詳細資訊進行檢視。封包每一行的詳細資訊從上到下分別為:
Fram:物理層資料幀
Ethernet II:資料鏈路層乙太網幀頭資訊,這裡主要可以檢視到源mac地址和目的mac地址
Internet Protocol Version 4:網路層IP包頭資訊
User Datagram Protocol:UDP協議包資訊
Service Location Protocol:SLP服務定位協議資訊

這裡寫圖片描述

針對不同的包,封包協議的資訊不盡相同,熟悉七層網路協議就知道wireshark抓取的包中詳細資訊每一行都會對應到七層網路協議中的每一層。例如抓取一個IPMI通訊協議包它的包結構就如下:
對比一下上圖中抓取的包就能明顯看到多了很多IPMI協議的資訊封裝在包中。
Remote Management Control Protocol:簡稱RMCP協議,遠端管理控制協議,遠端模式下IPMI基於RMCP協議實現,RMCP屬於UDP協議。
IPMI v2.0+ session Wrapper:基於IPMI v2.0協議的建立的會話
Data:該包中傳輸的資料
這裡寫圖片描述

tcpdump抓包與分析

在面對雲端計算運用相當成熟的階段,wireshark工具明顯的顯示出了自己的不足。在面對虛機網路裝置和虛擬二三層網路時,只針對物理裝置抓包的wireshark顯示出了自己的短板。因為tcpdump要講和能講的東西太多了,秉著用什麼學什麼記什麼的原則。這裡主要講述下我常用tcpdump的一些命令。

至於tcp的詳細引數可以檢視man手冊和線上連結:
http://www.tcpdump.org/tcpdump_man.html

========
過濾主機
--------
- 抓取所有經過 eth1,目的或源地址是 192.168.1.1 的網路資料
# tcpdump -i eth1 host 192.168.1.1
- 源地址
# tcpdump -i eth1 src host 192.168.1.1
- 目的地址
# tcpdump -i eth1 dst host 192.168.1.1
過濾埠
--------
- 抓取所有經過 eth1,目的或源埠是 25 的網路資料
# tcpdump -i eth1 port 25
- 源埠
# tcpdump -i eth1 src port 25
- 目的埠
# tcpdump -i eth1 dst port 25網路過濾
--------
# tcpdump -i eth1 net 192.168
# tcpdump -i eth1 src net 192.168
# tcpdump -i eth1 dst net 192.168
協議過濾
--------
# tcpdump -i eth1 arp
# tcpdump -i eth1 ip
# tcpdump -i eth1 tcp
# tcpdump -i eth1 udp
# tcpdump -i eth1 icmp

儲存報文,例如儲存到tmp目錄裡,檔名為packet.pcap
-------
#tcpdump –w /tmp/packet.pcap

當然上述這些只是命令的正常使用操作,讓我覺得它強大的地方在於對虛擬網路抓包和問題定位分析。這裡可以配合虛擬路由空間來定位某個tap裝置是否有正常的接受我想要的包。舉個栗子:


虛擬路由ID:38260b49-a848-45b3-89e3-06e5b57e1bf6
虛機網路卡的tap裝置號:qr-8f925cf2-13

在計算節點上執行該命令,用於檢視該虛擬機器能否接收到源主機IP為192.168.2.3的包
ip netns exec vrouter-38260b49-a848-45b3-89e3-06e5b57e1bf6 tcpdump -nn -i qr-8f925cf2-13 src host 192.168.2.3

tcpdump與wireshark配合使用

tcpdump雖說可以抓取包,但是有一個不方便的地方就是讀取包真的很費勁,這個時候就可以把tcpdump抓取的包儲存到一個檔案中,通過wireshark開啟檔案來檢視抓取的報文。

示例:
被抓取機器的IP為:172.16.20.30
使用tcpdump抓取包的機器IP為:172.16.20.202

使用命令如下:

#tcpdump -i eno16780032 src host 172.16.20.30 -w /tmp/packet.pcap

這裡寫圖片描述

回車後開始抓包,停止抓包則按control+C,如下圖可以看到成功抓到了1549個報文,並將報文儲存在tmp目錄裡,檔名為packet.pcap.
這裡寫圖片描述
之後通過wireshark 開啟報文,命令如下,這樣就捕獲了源ip是172.16.20.30傳送過來的報文.
這裡寫圖片描述

相關文章