? 眾所周知,在Windows下開發(fā)運行環(huán)境下,在調(diào)試網(wǎng)絡(luò)環(huán)境時,可以可以很方便的借助wireshark等軟件進行抓包分析;并且在linux或者Ubuntu等桌面版里也可以進行安裝抓包工具進行抓包分析,但總有一些情況,無法直接運用工具(比如一些沒有界面的linux環(huán)境系統(tǒng)中),則此時我們就需要使用到最簡單的tcpdump命令進行網(wǎng)絡(luò)抓包。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),阿魯科爾沁企業(yè)網(wǎng)站建設(shè),阿魯科爾沁品牌網(wǎng)站建設(shè),網(wǎng)站定制,阿魯科爾沁網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,阿魯科爾沁網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
? 一般的,linux下抓包時,抓取特定的網(wǎng)絡(luò)數(shù)據(jù)包到當(dāng)前文件夾下的文件中,再把文件拷貝出來利用Windows下的wireshark軟件進行分析。
tcpdump命令詳解:(簡單舉例)
? 1、抓取到的文件為filename.cap,然后將此文件拷貝到Windows下,使用wireshar打開后,即可對此文件進行分析。
? 2、eth0 是主機的網(wǎng)絡(luò)適配器名稱,具體的參數(shù)值可以在linux命令行窗口中通過 ifconfig 指令查詢。
使用tcpdump可以。
tcpdump是一個功能強大的命令行數(shù)據(jù)包分析器,它是通過監(jiān)聽服務(wù)器的網(wǎng)卡來獲取數(shù)據(jù)包,所有通過網(wǎng)絡(luò)訪問的數(shù)據(jù)包都能獲取到。
它也提供了過濾器的功能,可以獲取指定的網(wǎng)絡(luò)、端口或協(xié)議的數(shù)據(jù)包程序員日常排查問題,最常用的是使用過濾器功能獲取指定端口的數(shù)據(jù)包,用來分析服務(wù)器是否收到請求、請求數(shù)據(jù)是否完整。
用tcpdum命令可以抓指定IP的包,具體命令為:
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port 22 and src net 192.168.1.1 -w ./target.cap
參數(shù)解析:
tcp: ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數(shù)的位置,用來過濾數(shù)據(jù)報的類型。
-i eth1 : 只抓經(jīng)過接口eth1的包
-t : 不顯示時間戳
-s 0 : 抓取數(shù)據(jù)包時默認抓取長度為68字節(jié)。加上-S 0 后可以抓到完整的數(shù)據(jù)包
-c 100 : 只抓取100個數(shù)據(jù)包
dst port? 22 : 抓取目標(biāo)端口是22的數(shù)據(jù)包
src net 192.168.1.0/24 : 數(shù)據(jù)包的源網(wǎng)絡(luò)地址為192.168.1.1
-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析
擴展資料
tcpdump語法格式:
tcpdump [-adeflnNOpqStvx][-c數(shù)據(jù)包數(shù)目][-dd][-ddd][-F表達文件][-i網(wǎng)絡(luò)界面][-r數(shù)據(jù)包文件][-s數(shù)據(jù)包大小][-tt][-T數(shù)據(jù)包類型][-vv][-w數(shù)據(jù)包文件][輸出數(shù)據(jù)欄位]
tcpdump主要參數(shù)說明:
1、-a 嘗試將網(wǎng)絡(luò)和廣播地址轉(zhuǎn)換成名稱。
2、-c數(shù)據(jù)包數(shù)目 收到指定的數(shù)據(jù)包數(shù)目后,就停止進行傾倒操作。
3、-d 把編譯過的數(shù)據(jù)包編碼轉(zhuǎn)換成可閱讀的格式,并傾倒到標(biāo)準輸出。
4、-dd 把編譯過的數(shù)據(jù)包編碼轉(zhuǎn)換成C語言的格式,并傾倒到標(biāo)準輸出。
5、-ddd 把編譯過的數(shù)據(jù)包編碼轉(zhuǎn)換成十進制數(shù)字的格式,并傾倒到標(biāo)準輸出。
6、-e 在每列傾倒資料上顯示連接層級的文件頭。
7、-f 用數(shù)字顯示網(wǎng)際網(wǎng)絡(luò)地址。
8、-F表達文件 指定內(nèi)含表達方式的文件。
9、-i網(wǎng)絡(luò)界面 使用指定的網(wǎng)絡(luò)截面送出數(shù)據(jù)包。
10、-l 使用標(biāo)準輸出列的緩沖區(qū)。
11、-n 不把主機的網(wǎng)絡(luò)地址轉(zhuǎn)換成名字。
12、-N 不列出域名。
NMAP掃描
一款強大的網(wǎng)絡(luò)探測利器工具
支持多種探測技術(shù)
--ping掃描
--多端口掃描
-- TCP/IP指紋校驗
為什么需要掃描?
以獲取一些公開/非公開信息為目的
--檢測潛在風(fēng)險
--查找可攻擊目標(biāo)
--收集設(shè)備/主機/系統(tǒng)/軟件信息
--發(fā)現(xiàn)可利用的安全漏洞
基本用法
nmap [掃描類型] [選項] 掃描目標(biāo)...
常用的掃描類型
常用選項
-sS TCP SYN掃描(半開) 該方式發(fā)送SYN到目標(biāo)端口,如果收到SYN/ACK回復(fù),那么判斷端口是開放的;如果收到RST包,說明該端口是關(guān)閉的。簡單理解就是3次握手只完成一半就可以判斷端口是否打開,提高掃描速度
-sT TCP 連接掃描(全開)
-sU UDP掃描
-sP ICMP掃描
-sV 探測打開的端口對應(yīng)的服務(wù)版本信息
-A 目標(biāo)系統(tǒng)全面分析 (可能會比較慢)
-p 掃描指定端口
1 ) 檢查目標(biāo)主機是否能ping通
2)檢查目標(biāo)主機所開啟的TCP服務(wù)
3 ) 檢查192.168.4.0/24網(wǎng)段內(nèi)哪些主機開啟了FTP、SSH服務(wù)
4)檢查目標(biāo)主機所開啟的UDP服務(wù)
5 ) 探測打開的端口對應(yīng)的服務(wù)版本信息
6)全面分析目標(biāo)主機192.168.4.100的操作系統(tǒng)信息
tcpdump
命令行抓取數(shù)據(jù)包工具
基本用法
tcpdump [選項] [過濾條件]
常見監(jiān)控選項
-i,指定監(jiān)控的網(wǎng)絡(luò)接口(默認監(jiān)聽第一個網(wǎng)卡)
-A,轉(zhuǎn)換為 ACSII 碼,以方便閱讀
-w,將數(shù)據(jù)包信息保存到指定文件
-r,從指定文件讀取數(shù)據(jù)包信息
常用的過濾條件:
類型:host、net、port、portrange
方向:src、dst
協(xié)議:tcp、udp、ip、wlan、arp、……
多個條件組合:and、or、not
案例1
案例2:使用tcpdump分析FTP訪問中的明文交換信息
1 ) 安裝部署vsftpd服務(wù)
2 ) 并啟動tcpdump等待抓包
執(zhí)行tcpdump命令行,添加適當(dāng)?shù)倪^濾條件,只抓取訪問主機192.168.4.100的21端口的數(shù)據(jù)通信 ,并轉(zhuǎn)換為ASCII碼格式的易讀文本。
3 ) case100作為客戶端訪問case254服務(wù)端
4 ) 查看tcpdump抓包
5 ) 再次使用tcpdump抓包,使用-w選項可以將抓取的數(shù)據(jù)包另存為文件,方便后期慢慢分析。
6 ) tcpdump命令的-r選項,可以去讀之前抓取的歷史數(shù)據(jù)文件
tcpdump 是一款強大的網(wǎng)絡(luò)抓包工具,運行在 linux 平臺上。熟悉 tcpdump 的使用能夠幫助你分析、調(diào)試網(wǎng)絡(luò)數(shù)據(jù)。
要想使用很好地掌握 tcpdump, 必須對網(wǎng)絡(luò)報文( TCP/IP 協(xié)議)有一定的了解。不過對于簡單的使用來說,只要有網(wǎng)絡(luò)基礎(chǔ)概念就行了。
tcpdump 是一個很復(fù)雜的命令,想了解它的方方面面非常不易,也不值得推薦,能夠使用它解決日常工作中的問題才是關(guān)鍵。
tcpdump 的選項也很多,要想知道所有選項的話,請參考 man tcpdump ,下面只記錄 tcpdump 最常用的選項。
完整的英文文檔:
需要注意的是,tcpdump 默認只會截取前 96 字節(jié)的內(nèi)容,要想截取所有的報文內(nèi)容,可以使用 -s number , number 就是你要截取的報文字節(jié)數(shù),如果是 0 的話,表示截取報文全部內(nèi)容。
Frame = Ethernet Header + IP Header + TCP Header + TCP Segment Data
Ethernet Header 以下的IP數(shù)據(jù)報最大傳輸單位為 MTU (Maximum Transmission Unit,Effect of short board),對于大多數(shù)使用以太網(wǎng)的局域網(wǎng)來說, MTU=1500 。
TCP數(shù)據(jù)包每次能夠傳輸?shù)淖畲髷?shù)據(jù)分段為MSS,為了達到最佳的傳輸效能,在建立TCP連接時雙方將協(xié)商MSS值——雙方提供的MSS值中的最小值為這次連接的最大MSS值。MSS往往基于MTU計算出來,通常 MSS =MTU-sizeof(IP Header)-sizeof(TCP Header)=1500-20-20=1460。
這樣,數(shù)據(jù)經(jīng)過本地TCP層分段后,交給本地IP層,在本地IP層就不需要分片了。但是在下一跳路由(Next Hop)的鄰居路由器上可能發(fā)生IP分片!因為路由器的網(wǎng)卡的MTU可能小于需要轉(zhuǎn)發(fā)的IP數(shù)據(jù)報的大小。
這時候,在路由器上可能發(fā)生兩種情況:
(1)如果源發(fā)送端設(shè)置了這個IP數(shù)據(jù)包可以分片(May Fragment,DF=0),路由器將IP數(shù)據(jù)報分片后轉(zhuǎn)發(fā)。
(2)如果源發(fā)送端設(shè)置了這個IP數(shù)據(jù)報不可以分片(Don’t Fragment,DF=1),路由器將IP數(shù)據(jù)報丟棄,并發(fā)送ICMP分片錯誤消息給源發(fā)送端。
默認啟動,普通情況下,直接啟動tcpdump將監(jiān)視第一個網(wǎng)絡(luò)接口上所有流過的數(shù)據(jù)包
監(jiān)聽所有端口,直接顯示 ip 地址。
顯示更詳細的數(shù)據(jù)報文,包括 tos, ttl, checksum 等。
顯示數(shù)據(jù)報的全部數(shù)據(jù)信息,用 hex 和 ascii 兩列對比輸出。
下面是抓取 ping 命令的請求和返回的兩個報文,可以看到全部的數(shù)據(jù)。
機器上的網(wǎng)絡(luò)報文數(shù)量異常的多,很多時候我們只關(guān)系和具體問題有關(guān)的數(shù)據(jù)報(比如訪問某個網(wǎng)站的數(shù)據(jù),或者 icmp 超時的報文等等),而這些數(shù)據(jù)只占到很小的一部分。把所有的數(shù)據(jù)截取下來,從里面找到想要的信息無疑是一件很費時費力的工作。而 tcpdump 提供了靈活的語法可以精確地截取關(guān)心的數(shù)據(jù)報,簡化分析的工作量。這些選擇數(shù)據(jù)包的語句就是過濾器(filter)!
過濾器也可以簡單地分為三類: type , dir 和 proto 。
Type 讓你區(qū)分報文的類型,主要由 host (主機), net (網(wǎng)絡(luò)) 和 port (端口) 組成。 src 和 dst 也可以用來過濾報文的源地址和目的地址。
此外還有指定端口和數(shù)據(jù)報文范圍的過濾器:
過于過濾器的更多詳細信息,請訪問 tcpdump 官方 map page 的 PCAP-FILTER 部分
使用 tcpdump 截取數(shù)據(jù)報文的時候,默認會打印到屏幕的默認輸出,你會看到按照順序和格式,很多的數(shù)據(jù)一行行快速閃過,根本來不及看清楚所有的內(nèi)容。不過,tcpdump 提供了把截取的數(shù)據(jù)保存到文件的功能,以便后面使用其他圖形工具(比如 wireshark,Snort)來分析。
-w 選項用來把數(shù)據(jù)報文輸出到文件,比如下面的命令就是把所有 80 端口的數(shù)據(jù)導(dǎo)入到文件
-r 可以讀取文件里的數(shù)據(jù)報文,顯示到屏幕上。
NOTE:保存到文件的數(shù)據(jù)不是屏幕上看到的文件信息,而是包含了額外信息的固定格式 pcap,需要特殊的軟件(如: Wireshark )來查看,使用 vim 或者 cat 命令會出現(xiàn)亂碼。
過濾的真正強大之處在于你可以隨意組合它們,而連接它們的邏輯就是常用的 與/AND/ 、 或/OR/|| 和 非/not/! 。
從上面的例子就可以看出,你可以隨意地組合之前的過濾器來截取自己期望的數(shù)據(jù)報,最重要的就是知道自己要精確匹配的數(shù)據(jù)室怎樣的!
對于比較復(fù)雜的過濾器表達式,為了邏輯的清晰,可以使用括號。不過默認情況下,tcpdump 把 () 當(dāng)做特殊的字符,所以必須使用單引號 ' 來消除歧義:
抓取所有經(jīng)過eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP數(shù)
抓取所有經(jīng)過eth1,目標(biāo)MAC地址是00:01:02:03:04:05的ICMP數(shù)據(jù)
抓取所有經(jīng)過eth1,目的網(wǎng)絡(luò)是192.168,但目的主機不是192.168.1.200的TCP數(shù)據(jù)
截取數(shù)據(jù)只是第一步,第二步就是理解這些數(shù)據(jù),下面就解釋一下 tcpdump 命令輸出各部分的意義。
最基本也是最重要的信息就是數(shù)據(jù)報的源地址/端口和目的地址/端口,上面的例子第一條數(shù)據(jù)報中,源地址 ip 是 192.168.1.106 ,源端口是 56166 ,目的地址是 124.192.132.54 ,目的端口是 80 。 符號代表數(shù)據(jù)的方向。
此外,上面的三條數(shù)據(jù)還是 tcp 協(xié)議的三次握手過程,第一條就是 SYN 報文,這個可以通過 Flags [S] 看出。下面是常見的 TCP 報文的 Flags:
而第二條數(shù)據(jù)的 [S.] 表示 SYN-ACK ,就是 SYN 報文的應(yīng)答報文。
如果是為了查看數(shù)據(jù)內(nèi)容,建議用 tcpdump -s 0 -w filename 把數(shù)據(jù)包都保存下來,然后用wireshark的Follow TCP Stream/Follow UDP Stream來查看整個會話的內(nèi)容。 -s 0 是抓取完整數(shù)據(jù)包,否則默認只抓68字節(jié)。用tcpflow也可以方便的獲取TCP會話內(nèi)容,支持tcpdump的各種表達式。
-c 參數(shù)對于運維人員來說也比較常用,因為流量比較大的服務(wù)器,靠人工CTRL+C還是抓的太多,甚至導(dǎo)致服務(wù)器宕機,于是可以用 -c 參數(shù)指定抓多少個包。
上面的命令計算抓10000個SYN包花費多少時間,可以判斷訪問量大概是多少。
Wireshark(以前是ethereal)是Windows下非常簡單易用的抓包工具。但在Linux下很難找到一個好用的圖形化抓包工具。
還好有Tcpdump。我們可以用Tcpdump + Wireshark 的完美組合實現(xiàn):在 Linux 里抓包,然后在Windows 里分析包。
0x4745 為"GET"前兩個字母"GE"
0x4854 為"HTTP"前兩個字母"HT"
tcpdump 對截獲的數(shù)據(jù)并沒有進行徹底解碼,數(shù)據(jù)包內(nèi)的大部分內(nèi)容是使用十六進制的形式直接打印輸出的。顯然這不利于分析網(wǎng)絡(luò)故障,通常的解決辦法是先使用帶 -w 參數(shù)的tcpdump 截獲數(shù)據(jù)并保存到文件中,然后再使用其他程序(如 Wireshark )進行解碼分析。當(dāng)然也應(yīng)該定義過濾規(guī)則,以避免捕獲的數(shù)據(jù)包填滿整個硬盤。
基本上tcpdump總的的輸出格式為: 系統(tǒng)時間 來源主機.端口 目標(biāo)主機.端口 數(shù)據(jù)包參數(shù)