Linux下网络抓包工具(ngrep)
做后臺開發(fā),經(jīng)常需要抓取數(shù)據(jù)包,查看數(shù)據(jù)流量是否正常,在windows上可以使用Wireshark,是一個(gè)網(wǎng)絡(luò)封包分析軟件,使用WinPCAP作為接口,直接與網(wǎng)卡進(jìn)行數(shù)據(jù)報(bào)文交換。而Linux下使用tcpdump或者ngrep。這里介紹如何使用ngrep。
使用ngrep抓包可以確定數(shù)據(jù)包是否已經(jīng)到了某個(gè)服務(wù)模塊,從而定位是哪個(gè)部分的問題。
ngrep介紹及安裝
ngrep是一個(gè)網(wǎng)絡(luò)抓包工具,可以用來偵聽各端口的數(shù)據(jù)流入和流出。來看看man手冊是如何介紹ngrep的:
DESCRIPTION ngrep strives to provide most of GNU grep's common features, applying them to the network layer. ngrep is a pcap-aware tool that will allow you to specify extended regular expressions to match against data payloads of packets. It currently recog‐ nizes TCP, UDP and ICMP across Ethernet, PPP, SLIP, FDDI and null interfaces, and understands bpf filter logic in the same fashion as more common packet sniffing tools.大概的意思:
ngrep努力提供GNU grep的大多數(shù)通用功能,并將其應(yīng)用于網(wǎng)絡(luò)層。 ngrep是可識別pcap的工具,可讓您指定擴(kuò)展的正則表達(dá)式以與數(shù)據(jù)包的數(shù)據(jù)有效載荷匹配。 目前,它可以識別以太網(wǎng),PPP,SLIP,FDDI和空接口上的TCP,UDP和ICMP,并以與更常見的數(shù)據(jù)包嗅探工具相同的方式理解bpf過濾器邏輯
Centos7安裝ngrep
在安裝ngrep之前,必須要在自己的設(shè)備上安裝libpacp
yum install libpcap libpcap-devel -y由于安裝ngrep需用到libpcap庫, 所以支持大量的操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議。最后再安裝
yum install ngrep安裝完之后,輸入ngrep來驗(yàn)證下安裝是否成功。
出來這界面表示安裝成功。
ngrep選項(xiàng)說明:
-e # 顯示空數(shù)據(jù)包
-i # 忽略大小寫
-v # 反轉(zhuǎn)匹配
-x # 以16進(jìn)制格式顯示
-X # 以16進(jìn)制格式匹配
-w # 整字匹配
-p # 不使用混雜模式
-l #使標(biāo)準(zhǔn)輸出行緩沖
-D # 用記錄的時(shí)間間隔重播pcap_dumps
-t # 在每個(gè)匹配的包之前顯示時(shí)間戳
-T # 顯示上一個(gè)匹配的數(shù)據(jù)包之間的時(shí)間間隔
-M # 僅進(jìn)行單行匹配
-I # 從文件中讀取數(shù)據(jù)進(jìn)行匹配
-O # 將匹配的數(shù)據(jù)保存到文件
-n # 僅捕獲指定數(shù)目的數(shù)據(jù)包進(jìn)行查看
-A # 匹配到數(shù)據(jù)包后dump隨后的指定數(shù)目的數(shù)據(jù)包
-s # 設(shè)置bpf caplen
-S # 在匹配的數(shù)據(jù)包上設(shè)置limitlen
-W # 設(shè)置顯示格式byline將解析包中的換行符
-c # 強(qiáng)制顯示列的寬度
-P #將不可打印的顯示字符設(shè)置為指定的值
-F # 使用文件中定義的bpf(Berkeley Packet Filter)
-N # 顯示由IANA定義的子協(xié)議號
-d # 使用哪個(gè)網(wǎng)卡,可以用-L選項(xiàng)查詢
-L # 查詢網(wǎng)卡接口
簡單使用
首先我們可以模擬一個(gè)請求
curl -s “www.baidu.com”
監(jiān)聽指定本地網(wǎng)絡(luò)接口的數(shù)據(jù)包
ngrep -d ens33
抓包結(jié)果:
可以看到,結(jié)果是抓到了www.baidu.com數(shù)據(jù)流。但是內(nèi)容沒有完整顯示出來。ip表示 :183.232.231.172是百度的ip。端口為80
支持換行符
內(nèi)容要完整顯示,其示就是把換行符展示出來。
首先在另一個(gè)終端輸入請求:
curl -s “www.baidu.com”
然后在另一個(gè)終端輸入:
ngrep -W byline -d ens33 port 80
這條命令就是用來偵聽網(wǎng)頁的request和response,注意需要以管理員身份運(yùn)行.必須是root用戶。
抓包結(jié)果:
W byline是指遇到換行符時(shí)換行顯示,否則數(shù)據(jù)是連續(xù)的不可讀。-d ens33是指偵聽ens33網(wǎng)卡。port 80是指偵聽80端口。
抓本機(jī)網(wǎng)卡與ip
抓本機(jī)eth0 與192.168.32.229的通信信息,并且以行來打印出來
ngrep -d ens33 -W byline host 192.168.32.229
抓ssh包
要使用 grep 命令在 Linux 中查找指定服務(wù)的默認(rèn)端口號,只需運(yùn)行
grep ssh /etc/services
正如你在上面的輸出中所看到的,SSH 服務(wù)的默認(rèn)端口號是 22。
抓包結(jié)果:
正則過濾
上面的包其實(shí)太多了,怎么只抓 baidu的包呢,通過 -q 參數(shù)。
ngrep -Wbyline -d ens33 -q baidu port 80
ngrep -Wbyline -d ens33 ‘GET /’ port 80
-d使用哪個(gè)網(wǎng)卡,可以用-L選項(xiàng)查詢,
十六進(jìn)制顯示
如果需要具體調(diào)試包中的 bytes,想看到 16 進(jìn)制的數(shù),怎么辦呢?只需輸入如下命令:
ngrep -x -d ens33 -q baidu port 80
-x 以16進(jìn)制格式顯示。抓包結(jié)果:
總結(jié)
ngrep工具是grep命令的網(wǎng)絡(luò)版,ngrep用于抓包,并可以通過正則表達(dá)式,過濾、獲取指定樣式的數(shù)據(jù)包。
使用ngrep抓包可以確定數(shù)據(jù)包是否已經(jīng)到了某個(gè)服務(wù)模塊,從而定位是哪個(gè)部分的問題。
歡迎關(guān)注微信公眾號【程序猿編碼】,添加本人微信號(17865354792),回復(fù):領(lǐng)取學(xué)習(xí)資料。或者回復(fù):進(jìn)入技術(shù)交流群。網(wǎng)盤資料有如下:
總結(jié)
以上是生活随笔為你收集整理的Linux下网络抓包工具(ngrep)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作71:nexttick使用
- 下一篇: 郑州大学python考试题库_GitHu