抓包工具教程Tcpdump+ethereal+netcatWord文档下载推荐.docx
《抓包工具教程Tcpdump+ethereal+netcatWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《抓包工具教程Tcpdump+ethereal+netcatWord文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。
普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。
#tcpdump
tcpdump:
listeningonfxp0
11:
58:
47.873028bios-ns>
bios-ns:
udp50
47.9743310:
10:
7b:
8:
3a:
56>
1:
80:
c2:
0:
0802.1dui/Clen=43
00000000008000001007cf0809000000
0e800000902b46950980870100140002
000f0000902b4695000800
48.3731340:
e8:
5b:
6d:
85>
Broadcastsape0ui/Clen=97
ffff00600004ffffffffffffffffffff
0452ffffffff0000e85b6d8540080002
06404d41535445525f57454200000000
000000
使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,
使用-c参数指定要监听的数据包数量,
使用-w参数指定将监听到的数据包写入文件中保存
A想要截获所有210.27.48.1的主机收到的和发出的所有的数据包:
#tcpdumphost210.27.48.1
B想要截获主机210.27.48.1和主机210.27.48.2或210.27.48.3的通信,使用命令:
(在命令行中适用 括号时,一定要
#tcpdumphost210.27.48.1and/(210.27.48.2or210.27.48.3/)
C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpdumpiphost210.27.48.1and!
210.27.48.2
D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdumptcpport23host210.27.48.1
E对本机的udp123端口进行监视123为ntp的服务端口
#tcpdumpudpport123
F系统将只对名为hostname的主机的通信数据包进行监视。
主机名可以是本地主机,也可以是网络上的任何一台计算机。
下面的命令可以读取主机hostname发送的所有数据:
#tcpdump-ieth0srchosthostname
G下面的命令可以监视所有送到主机hostname的数据包:
#tcpdump-ieth0dsthosthostname
H
我们还可以监视通过指定网关的数据包:
#tcpdump-ieth0gatewayGatewayname
I如果你还想监视编址到指定端口的TCP或UDP数据包,那么执行以下命令:
#tcpdump-ieth0hosthostnameandport80
J如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
,使用命令:
K想要截获主机210.27.48.1和主机210.27.48.2或210.27.48.3的通信,使用命令
:
L如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpdumpiphost210.27.48.1and!
M如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdumptcpport23host210.27.48.1
第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型
除了这三种类型的关键字之外,其他重要的关键字如下:
gateway,broadcast,less,
greater,还有三种逻辑运算,取非运算是'
'
o
r'
第二种是确定传输方向的关键字,主要包括src,dst,dstorsrc,dstandsrc,
如果我们只需要列出送到80端口的数据包,用dstport;
如果我们只希望看到返回80端口的数据包,用srcport。
#tcpdump–ieth0hosthostnameanddstport80
目的端口是80
或者
#tcpdump–ieth0hosthostnameandsrcport80
源端口是80
一般是提供http的服务的主机
如果条件很多的话
要在条件之前加and或or或not
#tcpdump-ieth0host!
211.161.223.70and!
211.161.223.71anddstport80
如果在ethernet使用混杂模式系统的日志将会记录
May
720:
03:
46localhostkernel:
eth0:
Promiscuousmodeenabled.
deviceeth0enteredpromiscuousmode
57localhostkernel:
deviceeth0leftpromiscuousmode
tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。
显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump截获数据并保存到文件中,然后再使用其他程序进行解码分析。
当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。
-ieth1src
host211.167.237.199
00:
02:
03.096713IP211.167.237.199.ssh>
221.216.165.189.1467:
P2010208:
2010352(144)ack33377win8576
03.096951IP211.167.237.199.ssh>
P2010352:
2010496(144)ack33377win8576
03.100928IP211.167.237.199.ssh>
P2010496:
2010640(144)ack33377win8576
03.101165IP211.167.237.199.ssh>
P2010640:
2010784(144)ack33377win8576
03.102554IP211.167.237.199.ssh>
P2010784:
2010928(144)ack33425win8576
表明在00:
03点的时候,211.167.237.199通过ssh源端口连接到221.216.165.189的1467端口
#tcpdump-ieth1srchost211.167.237.199anddstport1467
09:
27.603075IP211.167.237.199.ssh>
P180400:
180544(144)ack2833win8576
27.605631IP211.167.237.199.ssh>
P180544:
180688(144)ack2881win8576
截获所有由eth0进入、源地址(src)为192.168.0.5的主机(host),并且(and)目标(dst)端口(port)为80的数据包
观看网卡传送、接收数据包的状态
$netstat
-i
KernelInterfacetable
IfaceMTUMetRX-OKRX-ERRRX-DRPRX-OVRTX-OKTX-ERRTX-DRPTX-OVRFlg
eth01500
0
14639
5705
119
BMRU
Iface:
网卡
RX-OKRX-ERRRX-DRPRX-OVR:
网卡正确接收数据包的数量以及发生错误、流失、碰撞的总数
TX-OKTX-ERRTX-DRPTX-OVR:
网卡正确发送数据包的数量以及发生错误、流失、碰撞的总数
[root@linux~]#tcpdump[-nn][-i介面][-w儲存檔名][-c次數][-Ae]
[-qX][-r檔案][所欲擷取的資料內容]
參數:
-nn:
直接以IP及portnumber顯示,而非主機名與服務名稱
-i:
後面接要『監聽』的網路介面,例如eth0,lo,ppp0等等的介面;
-w:
如果你要將監聽所得的封包資料儲存下來,用這個參數就對了!
後面接檔名
-c:
監聽的封包數,如果沒有這個參數,tcpdump會持續不斷的監聽,
直到使用者輸入[ctrl]-c為止。
-A:
封包的內容以ASCII顯示,通常用來捉取WWW的網頁封包資料。
-e:
使用資料連接層(OSI第二層)的MAC封包資料來顯示;
-q:
僅列出較為簡短的封包資訊,每一行的內容比較精簡
-X:
可以列出十六進位(hex)以及ASCII的封包內容,對於監聽封包內容很有用
-r:
從後面接的檔案將封包資料讀出來。
那個『檔案』是已經存在的檔案,
並且這個『檔案』是由-w所製作出來的。
所欲擷取的資料內容:
我們可以專門針對某些通訊協定或者是IP來源進行封包擷取,
那就可以簡化輸出的結果,並取得最有用的資訊。
常見的表示方法有:
hostfoo'
'
host127.0.0.1'
:
針對單部主機來進行封包擷取
net192.168'
針對某個網域來進行封包的擷取;
srchost127.0.0.1'
dstnet192.168'
同時加上來源(src)或目標(dst)限制
tcpport21'
還可以針對通訊協定偵測,如tcp,udp,arp,ether等
還可以利用and與or來進行封包資料的整合顯示呢!
範例一:
以IP與portnumber捉下eth0這個網路卡上的封包,持續3秒
[root@linux~]#tcpdump-ieth0-nn
verboseoutputsuppressed,use-vor-vvforfullprotocoldecode
listeningoneth0,link-typeEN10MB(Ethernet),capturesize96bytes
01:
33:
40.41IP192.168.1.100.22>
192.168.1.11.1190:
P116:
232(116)ack1win9648
P232:
364(132)ack1win9648
<
==按下[ctrl]-c之後結束
6680packetscaptured<
==捉下來的封包數量
14250packetsreceivedbyfilter<
==由過濾所得的總封包數量
7512packetsdroppedbykernel<
==被核心所丟棄的封包
如果你是第一次看tcpdump的manpage時,肯定一個頭兩個大,因為tcpdump幾乎都是分析封包的表頭資料,使用者如果沒有簡易的網路封包基礎,要看懂粉難吶!
所以,至少您得要回到網路基礎裡面去將TCP封包的表頭資料理解理解才好啊!
^_^!
至於那個範例一所產生的輸出範例中,我們可以約略區分為數個欄位,我們以範例一當中那個特殊字體行來說明一下:
∙01:
40.41:
這個是此封包被擷取的時間,『時:
分:
秒』的單位;
∙IP:
透過的通訊協定是IP;
∙192.168.1.100.22>
傳送端是192.168.1.100這個IP,而傳送的portnumber為22,您必須要瞭解的是,那個大於(>
)的符號指的是封包的傳輸方向喔!
∙192.168.1.11.1190:
接收端的IP是192.168.1.11,且該主機開啟port1190來接收;
∙P116:
232(116):
這個封包帶有PUSH的資料傳輸標誌,且傳輸的資料為整體資料的116~232byte,所以這個封包帶有116bytes的資料量;
∙ack1win9648:
ACK與Windowsize的相關資料。
最簡單的說法,就是該封包是由192.168.1.100傳到192.168.1.11,透過的port是由22到1190,且帶有116bytes的資料量,使用的是PUSH的旗標,而不是SYN之類的主動連線標誌。
呵呵!
不容易看的懂吧!
所以說,上頭才講請務必到
TCP表頭資料的部分去瞧一瞧的啊!
再來,一個網路狀態很忙的主機上面,你想要取得某部主機對你連線的封包資料而已時,使用tcpdump配合管線命令與正規表示法也可以,不過,畢竟不好捉取!
我們可以透過tcpdump的表示法功能,就能夠輕易的將所需要的資料獨立的取出來。
在上面的範例一當中,我們僅針對eth0做監聽,所以整個eth0介面上面的資料都會被顯示到螢幕上,不好分析啊!
那麼我們可以簡化嗎?
例如只取出port21的連線封包,可以這樣做:
[root@linux~]#tcpdump-ieth0-nnport21
54:
37.96IP192.168.1.11.1240>
192.168.1.100.21:
.ack1win65535
37.96IP192.168.1.100.21>
192.168.1.11.1240:
P1:
21(20)ack1win5840
38.12IP192.168.1.11.1240>
.ack21win65515
42.79IP192.168.1.11.1240>
17(16)ack21win65515
42.79IP192.168.1.100.21>
.ack17win5840
P21:
55(34)ack17win5840
瞧!
這樣就僅提出port21的資訊而已,且仔細看的話,你會發現封包的傳遞都是雙向的,client端發出『要求』而server端則予以『回應』,所以,當然是有去有回啊!
而我們也就可以經過這個封包的流向來瞭解到封包運作的過程。
舉例來說:
1.我們先在一個終端機視窗輸入『tcpdump-ilo-nn』的監聽,
2.再另開一個終端機視窗來對本機(127.0.0.1)登入『sshlocalhost』
那麼輸出的結果會是如何?
[root@linux~]#tcpdump-ilo-nn
1tcpdump:
2listeningonlo,link-typeEN10MB(Ethernet),capturesize96bytes
311:
54.253777IP127.0.0.1.32936>
127.0.0.1.22:
S933696132:
933696132(0)
win32767<
mss16396,sackOK,timestamp2366813160,nop,wscale2>
411:
54.253831IP127.0.0.1.22>
127.0.0.1.32936:
S920046702:
920046702(0)
ack933696133win32767<
mss16396,sackOK,timestamp236681316236681316,nop,
wscale2>
511:
54.253871IP127.0.0.1.32936>
.ack1win8192<
nop,
nop,timestamp236681316236681316>
611:
54.272124IP127.0.0.1.22>
23(22)ack1win8192
<
nop,nop,timestamp236681334236681316>
711:
54.272375IP127.0.0.1.32936>
.ack23win8192<
nop,timestamp236681334236681334>
上表顯示的頭兩行是tcpdump的基本說明,然後:
∙第3行顯示的是『來自client端,帶有SYN主動連線的封包』,
∙第4行顯示的是『來自server端,除了回應client端之外(ACK),還帶有SYN主動連線的標誌;
∙第5行則顯示client端回應server確定連線建立(ACK)
∙第6行以後則開始進入資料傳輸的步驟。
從第3-5行的流程來看,熟不熟悉啊?
沒錯!
那就是
三向交握
的基礎流程啦!
夠有趣吧!
不過tcpdump之所以被稱為駭客軟體之一可不止上頭介紹的功能吶!
上面介紹的功能可以用來作為我們主機的封包連線與傳輸的流程分析,這將有助於我們瞭解到封包的運作,同時瞭解到主機的防火牆設定規則是否有需要修訂的地方。
更神奇的使用要來啦!
如果我們使用tcpdump在router上面監聽『明碼』的傳輸資料時,例如FTP傳輸協定,你覺得會發生什麼問題呢?
我們先在主機端下達『tcpdump-iloport21-nn-X』然後再以ftp登入本機,並輸入帳號與密碼,結果你就可以發現如下的狀況:
[root@linux~]#tcpdump-ilo-nn-X'
port21'
0x0000:
450000482a284000400612867f000001E..H*(@.@.......
0x0010:
7f000001001580ab83552149835cd825.........U!
I./.%
0x0020:
80182000fe3c00000101080a0e2e0b67.....<
.........g
0x0030:
0e2e0b61323230202876734654506420...a220.(vsFTPd.
0x0040