Linux下的網(wǎng)絡(luò)監(jiān)聽技術(shù)之一
更新時間:2007年09月19日 10:25:00 作者:
前言:在網(wǎng)絡(luò)中,當(dāng)信息進(jìn)行傳播的時候,可以利用工具,將網(wǎng)絡(luò)接口設(shè)置在監(jiān)聽的模式,便可將網(wǎng)絡(luò)中正在傳播的信息截獲或者捕獲到,從而進(jìn)行攻擊。網(wǎng)絡(luò)監(jiān)聽在網(wǎng)絡(luò)中的任何一個位置模式下都可實施進(jìn)行。而黑客一般都是利用網(wǎng)絡(luò)監(jiān)聽來截取用戶口令。比如當(dāng)有人占領(lǐng)了一臺主機(jī)之后,那么他要再想將戰(zhàn)果擴(kuò)大到這個主機(jī)所在的整個局域網(wǎng)話,監(jiān)聽往往是他們選擇的捷徑。很多時候我在各類安全論壇上看到一些初學(xué)的愛好者,在他們認(rèn)為如果占領(lǐng)了某主機(jī)之后那么想進(jìn)入 它的內(nèi)部網(wǎng)應(yīng)該是很簡單的。其實非也,進(jìn)入了某主機(jī)再想轉(zhuǎn)入它的內(nèi)部網(wǎng)絡(luò)里的其它機(jī)器也都不是一件容易的事情。因為你除了要拿到他們的口令之外還有就是他們共享的絕對路徑,當(dāng)然了,這個路徑的盡頭必須是有寫的權(quán)限了。在這個時候,運行已經(jīng)被控制的主機(jī)上的監(jiān)聽程序就會有大收效。不過卻是一件費神的事情,而且還需要當(dāng)事者有足夠的耐心和應(yīng)變能力。主要包括:
數(shù)據(jù)幀的截獲
對數(shù)據(jù)幀的分析歸類
dos攻擊的檢測和預(yù)防
IP冒用的檢測和攻擊
在網(wǎng)絡(luò)檢測上的應(yīng)用
對垃圾郵件的初步過濾
研究的意義:
1)我國的網(wǎng)絡(luò)正在快速發(fā)展中,相應(yīng)的問題也就顯現(xiàn)出來,網(wǎng)絡(luò)管理及相應(yīng)應(yīng)用自然將越發(fā)重要,而監(jiān)聽技術(shù)正是網(wǎng)絡(luò)管理和應(yīng)用的基礎(chǔ),其意義當(dāng)然重要,放眼當(dāng)前相關(guān)工具linux 有snort tcpdump ,snift 等,window 有nexray, sniffer等五一不是國外軟件,隨著中國網(wǎng)絡(luò)的發(fā)展,監(jiān)聽系統(tǒng)必將大有用武之地,因此監(jiān)聽技術(shù)的研究已是時事的要求。
2)為什么選擇linux 作為環(huán)境?中國入世,各種針對盜版的打擊力度和對于正版軟件的保護(hù)力度都將大大加強(qiáng),windows的盜版軟件隨處可見的現(xiàn)象將會一去不返,面對這樣的情況,大部分的公司只有兩種選擇:要么花大價錢向微軟購買正版軟件,要么是用自由操作系統(tǒng)linux,特別是重要部門,如國家機(jī)關(guān),政府部門,難道要把自己的辦公系統(tǒng)操縱在國外大公司手里?北京的政府辦公系統(tǒng)已經(jīng)轉(zhuǎn)用紅旗linux,而且linux的界面也在不但的改進(jìn),更加友好易操作,我們有理由相信.linux將在我國大有作為,這也是研究Linux 下網(wǎng)絡(luò)監(jiān)聽的原因。
關(guān)于Linux下網(wǎng)絡(luò)監(jiān)聽技術(shù)主要有兩個要點:
1)如何盡可能完整的截取網(wǎng)絡(luò)上的數(shù)據(jù)幀,因為以太網(wǎng)上每時每刻都可能有信息傳遞,而且根據(jù)以太網(wǎng)的規(guī)模不同網(wǎng)絡(luò)上的信息量也變化不大,所以截取數(shù)據(jù)幀不僅要保證數(shù)據(jù)幀的完整,而且還要考慮到如何才能減少漏截取數(shù)據(jù)幀。
2)就是對截取的數(shù)據(jù)幀的過濾分析,所謂監(jiān)聽當(dāng)然要“聽”得懂才行,所以把截取的數(shù)據(jù)幀翻譯成我們能用的數(shù)據(jù),監(jiān)聽才算成功。
網(wǎng)絡(luò)監(jiān)聽的原理
Ethernet協(xié)議的工作方式是將要發(fā)送的數(shù)據(jù)包發(fā)往連接在一起的所有主機(jī)。在包頭中包括有應(yīng)該接收數(shù)據(jù)包的主機(jī)的正確地址,因為只有與數(shù)據(jù)包中目標(biāo)地址一致的那臺主機(jī)才能接收到信息包,但是當(dāng)主機(jī)工作在監(jiān)聽模式下的話不管數(shù)據(jù)包中的目標(biāo)物理地址是什么,主機(jī)都將可以接收到。許多局域網(wǎng)內(nèi)有十幾臺甚至上百臺主機(jī)是通過一個電纜、一個集線器連接在一起的,在協(xié)議的高層或者用戶來看,當(dāng)同一網(wǎng)絡(luò)中的兩臺主機(jī)通信的時候,源主機(jī)將寫有目的的主機(jī)地址的數(shù)據(jù)包直接發(fā)向目的主機(jī),或者當(dāng)網(wǎng)絡(luò)中的一臺主機(jī)同外界的主機(jī)通信時,源主機(jī)將寫有目的的主機(jī)IP地址的數(shù)據(jù)包發(fā)向網(wǎng)關(guān)。但這種數(shù)據(jù)包并不能在協(xié)議棧的高層直接發(fā)送出去,要發(fā)送的數(shù)據(jù)包必須從TCP/IP協(xié)議的IP層交給網(wǎng)絡(luò)接口,也就是所說的數(shù)據(jù)鏈路層。網(wǎng)絡(luò)接口不會識別IP地址的。在網(wǎng)絡(luò)接口由IP層來的帶有IP地址的數(shù)據(jù)包又增加了一部分以太禎的禎頭的信息。在禎頭中,有兩個域分別為只有網(wǎng)絡(luò)接口才能識別的源主機(jī)和目的主機(jī)的物理地址這是一個48位的地址,這個48位的地址是與IP地址相對應(yīng)的,換句話說就是一個IP地址也會對應(yīng)一個物理地址。對于作為網(wǎng)關(guān)的主機(jī),由于它連接了多個網(wǎng)絡(luò),它也就同時具備有很多個IP地址,在每個網(wǎng)絡(luò)中它都有一個。而發(fā)向網(wǎng)絡(luò)外的禎中繼攜帶的就是網(wǎng)關(guān)的物理地址。 Ethernet中填寫了物理地址的禎從網(wǎng)絡(luò)接口中,也就是從網(wǎng)卡中發(fā)送出去傳送到物理的線路上。如果局域網(wǎng)是由一條粗網(wǎng)或細(xì)網(wǎng)連接成的,那么數(shù)字信號在電纜上傳輸信號就能夠到達(dá)線路上的每一臺主機(jī)。再當(dāng)使用集線器的時候,發(fā)送出去的信號到達(dá)集線器,由集線器再發(fā)向連接在集線器上的每一條線路。這樣在物理線路上傳輸?shù)臄?shù)字信號也就能到達(dá)連接在集線器上的每個主機(jī)了。當(dāng)數(shù)字信號到達(dá)一臺主機(jī)的網(wǎng)絡(luò)接口時,正常狀態(tài)下網(wǎng)絡(luò)接口對讀入數(shù)據(jù)禎進(jìn)行檢查,如果數(shù)據(jù)禎中攜帶的物理地址是自己的或者物理地址是廣播地址,那么就會將數(shù)據(jù)禎交給IP層軟件。對于每個到達(dá)網(wǎng)絡(luò)接口的數(shù)據(jù)禎都要進(jìn)行這個過程的。但是當(dāng)主機(jī)工作在監(jiān)聽模式下的話,所有的數(shù)據(jù)禎都將被交給上層協(xié)議軟件處理。
當(dāng)連接在同一條電纜或集線器上的主機(jī)被邏輯地分為幾個子網(wǎng)的時候,那么要是有一臺主機(jī)處于監(jiān)聽模式,它還將可以接收到發(fā)向與自己不在同一個子網(wǎng)(使用了不同的掩碼、IP地址和網(wǎng)關(guān))的主機(jī)的數(shù)據(jù)包,在同一個物理信道上傳輸?shù)乃行畔⒍伎梢员唤邮盏健?
在UNIX系統(tǒng)上,當(dāng)擁有超級權(quán)限的用戶要想使自己所控制的主機(jī)進(jìn)入監(jiān)聽模式,只需要向Interface(網(wǎng)絡(luò)接口)發(fā)送I/O控制命令,就可以使主機(jī)設(shè)置成監(jiān)聽模式了。而在Windows9x的系統(tǒng)中則不論用戶是否有權(quán)限都將可以通過直接運行監(jiān)聽工具就可以實現(xiàn)了。
在網(wǎng)絡(luò)監(jiān)聽時,常常要保存大量的信息(也包含很多的垃圾信息),并將對收集的信息進(jìn)行大量的整理,這樣就會使正在監(jiān)聽的機(jī)器對其它用戶的請求響應(yīng)變的很慢。同時監(jiān)聽程序在運行的時候需要消耗大量的處理器時間,如果在這個時候就詳細(xì)的分析包中的內(nèi)容,許多包就會來不及接收而被漏走。所以監(jiān)聽程序很多時候就會將監(jiān)聽得到的包存放在文件中等待以后分析。分析監(jiān)聽到的數(shù)據(jù)包是很頭疼的事情。因為網(wǎng)絡(luò)中的數(shù)據(jù)包都非常之復(fù)雜。兩臺主機(jī)之間連續(xù)發(fā)送和接收數(shù)據(jù)包,在監(jiān)聽到的結(jié)果中必然會加一些別的主機(jī)交互的數(shù)據(jù)包。監(jiān)聽程序?qū)⑼籘CP會話的包整理到一起就相當(dāng)不容易了,如果你還期望將用戶詳細(xì)信息整理出來就需要根據(jù)協(xié)議對包進(jìn)行大量的分析。Internet上那么多的協(xié)議,運行進(jìn)起的話這個監(jiān)聽程序?qū)值拇笈丁?
現(xiàn)在網(wǎng)絡(luò)中所使用的協(xié)議都是較早前設(shè)計的,許多協(xié)議的實現(xiàn)都是基于一種非常友好的,通信的雙方充分信任的基礎(chǔ)。在通常的網(wǎng)絡(luò)環(huán)境之下,用戶的信息包括口令都是以明文的方式在網(wǎng)上傳輸?shù)?,因此進(jìn)行網(wǎng)絡(luò)監(jiān)聽從而獲得用戶信息并不是一件難點事情,只要掌握有初步的TCP/IP協(xié)議知識就可以輕松的監(jiān)聽到你想要的信息的。前些時間美籍華人China-babble曾提出將望路監(jiān)聽從局域網(wǎng)延伸到廣域網(wǎng)中,但這個想法很快就被否定了。如果真是這樣的話我想網(wǎng)絡(luò)必將天下大亂了。而事實上現(xiàn)在在廣域網(wǎng)里也可以監(jiān)聽和截獲到一些用戶信息。只是還不夠明顯而已。在整個Internet中就更顯得微不足道了。
監(jiān)聽的協(xié)議分析
我們的研究從監(jiān)聽程序的編寫開始,用Linux C語言設(shè)計實現(xiàn) ,系統(tǒng)的程序模塊及其相互關(guān)系如下圖所示:以太網(wǎng)上數(shù)據(jù)幀的監(jiān)聽剖析
以太網(wǎng)上的數(shù)據(jù)幀主要涉及Tcp/ip協(xié)議,針對以下幾個協(xié)議的分析:IP,ARP,RARP,IPX,其中重點在于ip和 arp協(xié)議,這兩個協(xié)議是多數(shù)網(wǎng)絡(luò)協(xié)議的基礎(chǔ),因此把他們研究徹底,就對大多數(shù)的協(xié)議的原理和特性比較清楚了。 由于各種協(xié)議的數(shù)據(jù)幀個不相同,所以涉及很多的數(shù)據(jù)幀頭格式分析,接下來將一一描述。
在linux 下監(jiān)聽網(wǎng)絡(luò),應(yīng)先設(shè)置網(wǎng)卡狀態(tài),使其處于雜混模式以便監(jiān)聽網(wǎng)絡(luò)上的所有數(shù)據(jù)幀。然后選擇用Linux socket 來截取數(shù)據(jù)幀,通過設(shè)置socket() 函數(shù)參數(shù)值,可以使socket截取未處理的網(wǎng)絡(luò)數(shù)據(jù)幀,關(guān)鍵是函數(shù)的參數(shù)設(shè)置,下面就是有關(guān)的程序部分:
if ( ( fd=socket (AF_INET, SOCK_PACKET,htons(0x0003)))<0)
{perror (“can get SOCK_PACKET socket
”);
exit(0);
}
AF_INET=2 表示 internet ip protocol
SOCK_PACKET=10 表示 截取數(shù)據(jù)幀的層次在物理層,既不作處理。
Htons(0x0003)表示 截取的數(shù)據(jù)幀的類型為不確定,既接受所有的包。
總的設(shè)定就是網(wǎng)卡上截取所有的數(shù)據(jù)幀。這樣就可以截取底層數(shù)據(jù)幀,因為返回的將是一個指向數(shù)據(jù)的指針,為了分析方便,我設(shè)置了一個基本的數(shù)據(jù)幀頭結(jié)構(gòu)。
Struct etherpacket
{struct ethhdr eth;
struct iphdr ip;
struct tcphdr tcp;
char buff[8192];
} ep;
將返回的指針賦值給指向數(shù)據(jù)幀頭結(jié)構(gòu)的指針,然后對其進(jìn)行分析。以下是有關(guān)協(xié)議的報頭:ethhdr 這是以太網(wǎng)數(shù)據(jù)幀的mac報頭:
--------------------------------------------------------
|48bit 目的物理地址 | 48bit 源物理地址 | 16bit 協(xié)議地址|
--------------------------------------------------------
相應(yīng)的數(shù)據(jù)結(jié)構(gòu)如下
struct ethhdr
{
unsigned char h_dest[ETH_ALEN];
unsigned char h_source[ETH_ALEN];
unsigned short h_proto;
}
其中h_dest[6]是48位的目標(biāo)地址的網(wǎng)卡物理地址,h_source [6] 是48位的源地址的物理網(wǎng)卡地址。H_proto是16位的以太網(wǎng)協(xié)議,其中主要有0x0800 ip,0x8035.X25,0x8137 ipx,0x8863-0x8864 pppoe(這是Linux的 ppp),0x0600 ether _loop_back ,0x0200-0x0201 pup等。Iphdr 這是ip協(xié)議的報頭:
由此可以定義其結(jié)構(gòu)如下:
struct iphdr
{
#elif defined (_LITTLE_ENDIAN_BITFIELD)
_u8 version :4,
#elif defined (_BIG_ENDIAN_BITFIELD)
_u8 version:4,
ihl:4;
#else
#error "Please fix"
#endif
_u8 tos;
_16 tot_len;
_u16 id;
_u16 frag_off;
_u8 ttl;
_u8 protocol;
_u16 check;
_u32 saddr;
_u32 daddr;
};
這是Linux 的ip協(xié)議報頭,針對版本的不同它可以有不同的定義,我們國內(nèi)一般用BIG的定義,其中version 是ip的版本,protocol是ip的協(xié)議分類主要有0x06 tcp.0x11 udp,0x01 icmp,0x02 igmp等,saddr是32位的源ip地址,daddr是32位的目標(biāo)ip地址。 文章錄入:aaadxmmm 責(zé)任編輯:aaadxmmm
數(shù)據(jù)幀的截獲
對數(shù)據(jù)幀的分析歸類
dos攻擊的檢測和預(yù)防
IP冒用的檢測和攻擊
在網(wǎng)絡(luò)檢測上的應(yīng)用
對垃圾郵件的初步過濾
研究的意義:
1)我國的網(wǎng)絡(luò)正在快速發(fā)展中,相應(yīng)的問題也就顯現(xiàn)出來,網(wǎng)絡(luò)管理及相應(yīng)應(yīng)用自然將越發(fā)重要,而監(jiān)聽技術(shù)正是網(wǎng)絡(luò)管理和應(yīng)用的基礎(chǔ),其意義當(dāng)然重要,放眼當(dāng)前相關(guān)工具linux 有snort tcpdump ,snift 等,window 有nexray, sniffer等五一不是國外軟件,隨著中國網(wǎng)絡(luò)的發(fā)展,監(jiān)聽系統(tǒng)必將大有用武之地,因此監(jiān)聽技術(shù)的研究已是時事的要求。
2)為什么選擇linux 作為環(huán)境?中國入世,各種針對盜版的打擊力度和對于正版軟件的保護(hù)力度都將大大加強(qiáng),windows的盜版軟件隨處可見的現(xiàn)象將會一去不返,面對這樣的情況,大部分的公司只有兩種選擇:要么花大價錢向微軟購買正版軟件,要么是用自由操作系統(tǒng)linux,特別是重要部門,如國家機(jī)關(guān),政府部門,難道要把自己的辦公系統(tǒng)操縱在國外大公司手里?北京的政府辦公系統(tǒng)已經(jīng)轉(zhuǎn)用紅旗linux,而且linux的界面也在不但的改進(jìn),更加友好易操作,我們有理由相信.linux將在我國大有作為,這也是研究Linux 下網(wǎng)絡(luò)監(jiān)聽的原因。
關(guān)于Linux下網(wǎng)絡(luò)監(jiān)聽技術(shù)主要有兩個要點:
1)如何盡可能完整的截取網(wǎng)絡(luò)上的數(shù)據(jù)幀,因為以太網(wǎng)上每時每刻都可能有信息傳遞,而且根據(jù)以太網(wǎng)的規(guī)模不同網(wǎng)絡(luò)上的信息量也變化不大,所以截取數(shù)據(jù)幀不僅要保證數(shù)據(jù)幀的完整,而且還要考慮到如何才能減少漏截取數(shù)據(jù)幀。
2)就是對截取的數(shù)據(jù)幀的過濾分析,所謂監(jiān)聽當(dāng)然要“聽”得懂才行,所以把截取的數(shù)據(jù)幀翻譯成我們能用的數(shù)據(jù),監(jiān)聽才算成功。
網(wǎng)絡(luò)監(jiān)聽的原理
Ethernet協(xié)議的工作方式是將要發(fā)送的數(shù)據(jù)包發(fā)往連接在一起的所有主機(jī)。在包頭中包括有應(yīng)該接收數(shù)據(jù)包的主機(jī)的正確地址,因為只有與數(shù)據(jù)包中目標(biāo)地址一致的那臺主機(jī)才能接收到信息包,但是當(dāng)主機(jī)工作在監(jiān)聽模式下的話不管數(shù)據(jù)包中的目標(biāo)物理地址是什么,主機(jī)都將可以接收到。許多局域網(wǎng)內(nèi)有十幾臺甚至上百臺主機(jī)是通過一個電纜、一個集線器連接在一起的,在協(xié)議的高層或者用戶來看,當(dāng)同一網(wǎng)絡(luò)中的兩臺主機(jī)通信的時候,源主機(jī)將寫有目的的主機(jī)地址的數(shù)據(jù)包直接發(fā)向目的主機(jī),或者當(dāng)網(wǎng)絡(luò)中的一臺主機(jī)同外界的主機(jī)通信時,源主機(jī)將寫有目的的主機(jī)IP地址的數(shù)據(jù)包發(fā)向網(wǎng)關(guān)。但這種數(shù)據(jù)包并不能在協(xié)議棧的高層直接發(fā)送出去,要發(fā)送的數(shù)據(jù)包必須從TCP/IP協(xié)議的IP層交給網(wǎng)絡(luò)接口,也就是所說的數(shù)據(jù)鏈路層。網(wǎng)絡(luò)接口不會識別IP地址的。在網(wǎng)絡(luò)接口由IP層來的帶有IP地址的數(shù)據(jù)包又增加了一部分以太禎的禎頭的信息。在禎頭中,有兩個域分別為只有網(wǎng)絡(luò)接口才能識別的源主機(jī)和目的主機(jī)的物理地址這是一個48位的地址,這個48位的地址是與IP地址相對應(yīng)的,換句話說就是一個IP地址也會對應(yīng)一個物理地址。對于作為網(wǎng)關(guān)的主機(jī),由于它連接了多個網(wǎng)絡(luò),它也就同時具備有很多個IP地址,在每個網(wǎng)絡(luò)中它都有一個。而發(fā)向網(wǎng)絡(luò)外的禎中繼攜帶的就是網(wǎng)關(guān)的物理地址。 Ethernet中填寫了物理地址的禎從網(wǎng)絡(luò)接口中,也就是從網(wǎng)卡中發(fā)送出去傳送到物理的線路上。如果局域網(wǎng)是由一條粗網(wǎng)或細(xì)網(wǎng)連接成的,那么數(shù)字信號在電纜上傳輸信號就能夠到達(dá)線路上的每一臺主機(jī)。再當(dāng)使用集線器的時候,發(fā)送出去的信號到達(dá)集線器,由集線器再發(fā)向連接在集線器上的每一條線路。這樣在物理線路上傳輸?shù)臄?shù)字信號也就能到達(dá)連接在集線器上的每個主機(jī)了。當(dāng)數(shù)字信號到達(dá)一臺主機(jī)的網(wǎng)絡(luò)接口時,正常狀態(tài)下網(wǎng)絡(luò)接口對讀入數(shù)據(jù)禎進(jìn)行檢查,如果數(shù)據(jù)禎中攜帶的物理地址是自己的或者物理地址是廣播地址,那么就會將數(shù)據(jù)禎交給IP層軟件。對于每個到達(dá)網(wǎng)絡(luò)接口的數(shù)據(jù)禎都要進(jìn)行這個過程的。但是當(dāng)主機(jī)工作在監(jiān)聽模式下的話,所有的數(shù)據(jù)禎都將被交給上層協(xié)議軟件處理。
當(dāng)連接在同一條電纜或集線器上的主機(jī)被邏輯地分為幾個子網(wǎng)的時候,那么要是有一臺主機(jī)處于監(jiān)聽模式,它還將可以接收到發(fā)向與自己不在同一個子網(wǎng)(使用了不同的掩碼、IP地址和網(wǎng)關(guān))的主機(jī)的數(shù)據(jù)包,在同一個物理信道上傳輸?shù)乃行畔⒍伎梢员唤邮盏健?
在UNIX系統(tǒng)上,當(dāng)擁有超級權(quán)限的用戶要想使自己所控制的主機(jī)進(jìn)入監(jiān)聽模式,只需要向Interface(網(wǎng)絡(luò)接口)發(fā)送I/O控制命令,就可以使主機(jī)設(shè)置成監(jiān)聽模式了。而在Windows9x的系統(tǒng)中則不論用戶是否有權(quán)限都將可以通過直接運行監(jiān)聽工具就可以實現(xiàn)了。
在網(wǎng)絡(luò)監(jiān)聽時,常常要保存大量的信息(也包含很多的垃圾信息),并將對收集的信息進(jìn)行大量的整理,這樣就會使正在監(jiān)聽的機(jī)器對其它用戶的請求響應(yīng)變的很慢。同時監(jiān)聽程序在運行的時候需要消耗大量的處理器時間,如果在這個時候就詳細(xì)的分析包中的內(nèi)容,許多包就會來不及接收而被漏走。所以監(jiān)聽程序很多時候就會將監(jiān)聽得到的包存放在文件中等待以后分析。分析監(jiān)聽到的數(shù)據(jù)包是很頭疼的事情。因為網(wǎng)絡(luò)中的數(shù)據(jù)包都非常之復(fù)雜。兩臺主機(jī)之間連續(xù)發(fā)送和接收數(shù)據(jù)包,在監(jiān)聽到的結(jié)果中必然會加一些別的主機(jī)交互的數(shù)據(jù)包。監(jiān)聽程序?qū)⑼籘CP會話的包整理到一起就相當(dāng)不容易了,如果你還期望將用戶詳細(xì)信息整理出來就需要根據(jù)協(xié)議對包進(jìn)行大量的分析。Internet上那么多的協(xié)議,運行進(jìn)起的話這個監(jiān)聽程序?qū)值拇笈丁?
現(xiàn)在網(wǎng)絡(luò)中所使用的協(xié)議都是較早前設(shè)計的,許多協(xié)議的實現(xiàn)都是基于一種非常友好的,通信的雙方充分信任的基礎(chǔ)。在通常的網(wǎng)絡(luò)環(huán)境之下,用戶的信息包括口令都是以明文的方式在網(wǎng)上傳輸?shù)?,因此進(jìn)行網(wǎng)絡(luò)監(jiān)聽從而獲得用戶信息并不是一件難點事情,只要掌握有初步的TCP/IP協(xié)議知識就可以輕松的監(jiān)聽到你想要的信息的。前些時間美籍華人China-babble曾提出將望路監(jiān)聽從局域網(wǎng)延伸到廣域網(wǎng)中,但這個想法很快就被否定了。如果真是這樣的話我想網(wǎng)絡(luò)必將天下大亂了。而事實上現(xiàn)在在廣域網(wǎng)里也可以監(jiān)聽和截獲到一些用戶信息。只是還不夠明顯而已。在整個Internet中就更顯得微不足道了。
監(jiān)聽的協(xié)議分析
我們的研究從監(jiān)聽程序的編寫開始,用Linux C語言設(shè)計實現(xiàn) ,系統(tǒng)的程序模塊及其相互關(guān)系如下圖所示:以太網(wǎng)上數(shù)據(jù)幀的監(jiān)聽剖析
以太網(wǎng)上的數(shù)據(jù)幀主要涉及Tcp/ip協(xié)議,針對以下幾個協(xié)議的分析:IP,ARP,RARP,IPX,其中重點在于ip和 arp協(xié)議,這兩個協(xié)議是多數(shù)網(wǎng)絡(luò)協(xié)議的基礎(chǔ),因此把他們研究徹底,就對大多數(shù)的協(xié)議的原理和特性比較清楚了。 由于各種協(xié)議的數(shù)據(jù)幀個不相同,所以涉及很多的數(shù)據(jù)幀頭格式分析,接下來將一一描述。
在linux 下監(jiān)聽網(wǎng)絡(luò),應(yīng)先設(shè)置網(wǎng)卡狀態(tài),使其處于雜混模式以便監(jiān)聽網(wǎng)絡(luò)上的所有數(shù)據(jù)幀。然后選擇用Linux socket 來截取數(shù)據(jù)幀,通過設(shè)置socket() 函數(shù)參數(shù)值,可以使socket截取未處理的網(wǎng)絡(luò)數(shù)據(jù)幀,關(guān)鍵是函數(shù)的參數(shù)設(shè)置,下面就是有關(guān)的程序部分:
if ( ( fd=socket (AF_INET, SOCK_PACKET,htons(0x0003)))<0)
{perror (“can get SOCK_PACKET socket
”);
exit(0);
}
AF_INET=2 表示 internet ip protocol
SOCK_PACKET=10 表示 截取數(shù)據(jù)幀的層次在物理層,既不作處理。
Htons(0x0003)表示 截取的數(shù)據(jù)幀的類型為不確定,既接受所有的包。
總的設(shè)定就是網(wǎng)卡上截取所有的數(shù)據(jù)幀。這樣就可以截取底層數(shù)據(jù)幀,因為返回的將是一個指向數(shù)據(jù)的指針,為了分析方便,我設(shè)置了一個基本的數(shù)據(jù)幀頭結(jié)構(gòu)。
Struct etherpacket
{struct ethhdr eth;
struct iphdr ip;
struct tcphdr tcp;
char buff[8192];
} ep;
將返回的指針賦值給指向數(shù)據(jù)幀頭結(jié)構(gòu)的指針,然后對其進(jìn)行分析。以下是有關(guān)協(xié)議的報頭:ethhdr 這是以太網(wǎng)數(shù)據(jù)幀的mac報頭:
--------------------------------------------------------
|48bit 目的物理地址 | 48bit 源物理地址 | 16bit 協(xié)議地址|
--------------------------------------------------------
相應(yīng)的數(shù)據(jù)結(jié)構(gòu)如下
struct ethhdr
{
unsigned char h_dest[ETH_ALEN];
unsigned char h_source[ETH_ALEN];
unsigned short h_proto;
}
其中h_dest[6]是48位的目標(biāo)地址的網(wǎng)卡物理地址,h_source [6] 是48位的源地址的物理網(wǎng)卡地址。H_proto是16位的以太網(wǎng)協(xié)議,其中主要有0x0800 ip,0x8035.X25,0x8137 ipx,0x8863-0x8864 pppoe(這是Linux的 ppp),0x0600 ether _loop_back ,0x0200-0x0201 pup等。Iphdr 這是ip協(xié)議的報頭:
由此可以定義其結(jié)構(gòu)如下:
struct iphdr
{
#elif defined (_LITTLE_ENDIAN_BITFIELD)
_u8 version :4,
#elif defined (_BIG_ENDIAN_BITFIELD)
_u8 version:4,
ihl:4;
#else
#error "Please fix"
#endif
_u8 tos;
_16 tot_len;
_u16 id;
_u16 frag_off;
_u8 ttl;
_u8 protocol;
_u16 check;
_u32 saddr;
_u32 daddr;
};
這是Linux 的ip協(xié)議報頭,針對版本的不同它可以有不同的定義,我們國內(nèi)一般用BIG的定義,其中version 是ip的版本,protocol是ip的協(xié)議分類主要有0x06 tcp.0x11 udp,0x01 icmp,0x02 igmp等,saddr是32位的源ip地址,daddr是32位的目標(biāo)ip地址。 文章錄入:aaadxmmm 責(zé)任編輯:aaadxmmm
您可能感興趣的文章:
- linux 雙網(wǎng)卡綁定網(wǎng)絡(luò)設(shè)置方法
- Linux網(wǎng)絡(luò)編程之基于UDP實現(xiàn)可靠的文件傳輸示例
- Linux下用netstat查看網(wǎng)絡(luò)狀態(tài)、端口狀態(tài)
- linux命令學(xué)習(xí)之10個網(wǎng)絡(luò)命令和監(jiān)控命令
- 檢查linux網(wǎng)絡(luò)狀態(tài)的兩個腳本
- linux下監(jiān)控網(wǎng)絡(luò)流量的腳本
- Linux基本網(wǎng)絡(luò)配置方法介紹
- Linux 檢測服務(wù)器是否連接著網(wǎng)絡(luò)
- Linux的常用網(wǎng)絡(luò)命令
- Linux模擬網(wǎng)絡(luò)丟包與延遲的方法
相關(guān)文章
基于寬帶接入網(wǎng)絡(luò)遠(yuǎn)程視頻監(jiān)控系統(tǒng)
基于寬帶接入網(wǎng)絡(luò)遠(yuǎn)程視頻監(jiān)控系統(tǒng)...2007-09-09

