国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

基于Linux環境下的Sniffer設計與實現
2007-04-13   賽迪網

一、Sniffer原理分析

在實現嗅探器之前,我們先需要掌握TCP/IP協議。TCP協議和IP協議指兩個用在Internet上的網絡協議(或數據傳輸的方法)。它們分別是傳輸控制協議和互連網協議。這兩個協議屬于眾多的TCP/IP 協議組中的一部分。

TCP/IP協議組中的協議保證Internet上數據的傳輸,提供了幾乎現在上網所用到的所有服務。這些服務包括:電子郵件的傳輸、文件傳輸、新聞組的發布和訪問萬維網。

TCP協議在IP協議之上。與IP協議提供不可靠傳輸服務不同的是,TCP協議為其上的應用層提供了一種可靠傳輸服務。這種服務的特點是:可靠、全雙工、流式和無結構傳輸。TCP傳輸原理:

TCP協議使用了一個叫積極確認和重發送(positive acknowledgement with retransmission)的技術來實現可靠傳輸。接收者在收到發送者發送的數據后,必須發送一個相應的確認(ACK)消息,表示它已經收到了數據。發送者保存發送的數據的記錄,在發送下一個數據之前,等待這個數據的確認消息。在它發送這個數據的同時,還啟動了一個記時器。如果在一定時間之內,沒有接收到確認消息,就認為是這個數據在傳送時丟失了,接著,就會重新發送這個數據。

這種方法還產生了一個問題,就是包的重復。如果網絡傳輸速度比較低,等到等待時間結束后,確認消息才返回到發送者,那么,由于發送者采用的發送方法,就會出現重復的數據了。解決的一個辦法是給每個數據一個序列號,并需要發送者記住哪個序列號的數據已經確認了。為了防止由于延時或重復確認,規定確認消息里也要包含確認序列號。從而發送者就能知道哪個包已經確認了。TCP協議中還有一個重要的概念:滑動窗口。這一方法的使用,使得傳輸更加高效。

有前面的描述可見,發送者在發送完一個數據包之后,要等待確認。在它收到確認消息之前的這段時間是空閑的。如果網絡延時比較長,這個問題會相當明顯。滑動窗口方法是在它收到確認消息以前,發送多個數據包。可以想象成有一個窗口在一個序列上移動。如果一個包發送出去之后還沒有確認,叫做未確認包。通常未確認的包的個數就是窗口的大小。在接收端,也有一個滑動窗口接收和確認一個包。

使用TCP傳輸就是建立一個連接。在TCP傳輸中一個連接有兩個端點組成。其實,一個連接代表的是發送和接收兩端應用程序的之間的一個通信。可以把他們想象成建立了一個電路。通常一個連接用下面的公式表示:(host,port),host是主機,port是端口。TCP端口能被幾個應用程序共享。對于程序員來講,可以這樣理解:一個應用程序可以為不同的連接提供服務。TCP傳輸的單位是段,在建立連接,傳送數據,確認消息和告之窗口大小時均要進行段的交換。

TCP協議使用一個三次握手來建立一個TCP連接的。握手過程的第一個段的代碼位設置為SYN,序列號為x,表示開始一次握手。接收方收到這個段后,向發送者回發一個段。代碼位設置為SYN和ACK,序列號設置為y,確認序列號設置為x+1。發送者在受到這個段后,知道就可以進行TCP數據發送了,于是,它又向接收者發送一個ACK段,表示,雙方的連接已經建立。在完成握手之后,就開始正式的數據傳輸了。上面握手段中的序列號都是隨機產生的。

了解了TCP/IP協議后,還要掌握網絡編程。在LINUX網絡編程中,我們可以認為套接字是將Unix系統的文件操作推廣到提供點對點的通信。如果要操作文件,應用程序會根據應用程序的需要為之創建一個套接字。操作系統返回一個整數。應用程序通過引用這個正數來使用這個套接字。文件描述符和套接字描述符的不同點在于,在程序調用open()時,操作系統將一個文件描述符綁定到一個文件或設備,但在創建一個套接字時,可以不將它綁定到一個目標地址。程序可以在任何想要用這個套接字的時候指定目標地址。在點對點的通信程序中,我們將請求服務或數據的程序叫做客戶端程序,提供數據或服務的軟件叫做服務器程序。下面解釋一下一個基本的套接字系統調用函數,也是該嗅探器中要用到的函數:



socket()
#include < sys/types.h>
#include < sys/socket.h>
int socket(int family, int type, int protocol);
int family參數指定所要使用的通信協議,取以下幾個值:

AF_UNIX Unix內部協議
AF_INET Internet協議
AF_NS Xerox NS協議
AF_IMPLINK IMP 連接層
int type 指定套接字的類型,取以下幾個值 :
SOCK_STREAM 流套接字
SOCK_DGRAM 數據報套接字
SOCK_RAW 未加工套接字
SOCK_SEQPACKET 順序包套接字
int protocol 參數通常設置為0。


socket()系統調用返回一個整數值,叫做套接字描述字sockfd,它的原理與文件描述符一樣。網絡I/O的第一步通常就是調用這個函數。

二、Sniffer具體實現

現在具體介紹一下該嗅探器的實現。該嗅探器是在Red Hat LINUX6.2版本中,用C語言編寫的,以調試并編譯通過。

Sniffer是一種常用的收集有用數據方法,這些數據可以是用戶的帳號和密碼,可以是一些商用機密數據等等。Sniffer是一種常用的收集有用數據的方法,這些數據可以是用戶的帳號和密碼,可以是一些商用機密數據等等。

以太網sniffing 是指對以太網設備上傳送的數據包進行偵聽,發現感興趣的包。如果發現符合條件的包,就把它存到一個log文件中去。通常設置的這些條件是包含字"username"或"password"的包。它的目的是將網絡層放到promiscuous模式,從而能干些事情。Promiscuous模式是指網絡上的所有設備都對總線上傳送的數據進行偵聽,并不僅僅是它們自己的數據。根據以太網的工作原理,可以知道:一個設備要向某一目標發送數據時,它是對以太網進行廣播的。一個連到以太網總線上的設備在任何時間里都在接受數據。不過只是將屬于自己的數據傳給該計算機上的應用程序。利用這一點,可以將一臺計算機的網絡連接設置為接受所有以太網總線上的數據,從而實現sniffer。

sniffer通常運行在路由器,或有路由器功能的主機上。這樣就能對大量的數據進行監控。sniffer屬第二層次的攻擊。通常是攻擊者已經進入了目標系統,然后使用sniffer這種攻擊手段,以便得到更多的信息。sniffer除了能得到口令或用戶名外,還能得到更多的其他信息,比如一個其他重要的信息,在網上傳送的金融信息等等。sniffer幾乎能得到任何以太網上的傳送的數據包。通常sniffer程序只看一個數據包的前200-300個字節的數據,就能發現想口令和用戶名這樣的信息。

下面對該程序的實現作一個介紹。結構etherpacket定義了一個數據包。其中的ethhdr,iphdr,和tcphdr分別是三個結構,用來定義以太網幀,IP數據包頭和TCP數據包頭的格式。

它們在頭文件中的定義如下:




struct ethhdr
{
unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
unsigned char h_source[ETH_ALEN]; /* source ether addr */
unsigned short h_proto; /* packet type ID field */
};
struct iphdr
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
u_int8_t ihl:4;
u_int8_t version:4;
#elif __BYTE_ORDER == __BIG_ENDIAN
u_int8_t version:4;
u_int8_t ihl:4;
#else
#error "Please fix < bytesex.h>"
#endif
u_int8_t tos;
u_int16_t tot_len;
u_int16_t id;
u_int16_t frag_off;
u_int8_t ttl;
u_int8_t protocol;
u_int16_t check;
u_int32_t saddr;
u_int32_t daddr;
/*The options start here. */
};
struct tcphdr
{
u_int16_t source;
u_int16_t dest;
u_int32_t seq;
u_int32_t ack_seq;
#if __BYTE_ORDER == __LITTLE_ENDIAN
u_int16_t res1:4;
u_int16_t doff:4;
u_int16_t fin:1;
u_int16_t syn:1;
u_int16_t rst:1;
u_int16_t psh:1;
u_int16_t ack:1;
u_int16_t urg:1;
u_int16_t res2:2;
#elif __BYTE_ORDER == __BIG_ENDIAN
u_int16_t doff:4;
u_int16_t res1:4;
u_int16_t res2:2;
u_int16_t urg:1;
u_int16_t ack:1;
u_int16_t psh:1;
u_int16_t rst:1;
u_int16_t syn:1;
u_int16_t fin:1;
#else
#error "Adjust your < bits/endian.h > defines"
#endif
u_int16_t window;
u_int16_t check;
u_int16_t urg_ptr;
};


接下來,定義了一個結構變量victim。隨后,看一下函數int openintf(char *d),它的作用是打開一個網絡接口。在main中是將eth0作為參數來調用這個函數。在這個函數中,用到了下面的結構:



struct ifreq
{
#define IFHWADDRLEN 6
#define IFNAMSIZ 16
union
{
char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */
} ifr_ifrn;
union
{
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
struct sockaddr ifru_netmask;
struct sockaddr ifru_hwaddr;
short int ifru_flags;
int ifru_ivalue;
int ifru_mtu;
struct ifmap ifru_map;
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
__caddr_t ifru_data;
} ifr_ifru;
};



這個結構叫接口請求結構,用來調用在I/O輸入輸出時使用。所有的接口I/O輸出必須有一個參數,這個參數以ifr_name開頭,后面的參數根據使用不同的網絡接口而不同。

如果你要看看你的計算機有哪些網絡接口,使用命令ifconfig即可。一般會看到兩個接口lo0和eth0。在ifreq結構中的各個域的含義與ifconfig的輸出是一一對應的。在這里,程序將eth0作為ifr_name來使用的。接著,該函數將這個網絡接口設置成promiscuous模式。請記住,sniffer是工作在這種模式下的。

再看一下函數read_tcp,它的作用是讀取TCP數據包,傳給filter處理。Filter函數是對上述讀取的數據包進行處理。接下來的程序是將數據輸出到文件中去。函數clearup是在程序退出等事件時,在文件中作個記錄,并關閉文件。否則,你剛才做的記錄都沒了。

三、運行結果及結論

運行這個程序的結果,本人的計算機是處于一個由三十臺以上主機組成的局域網環境中,這個局域網中的所有主機通過代理網關可以上Internet。經測試,在晚上上網高峰期,可以在幾分鐘之內探測到5以上個不同IP地址的郵箱用戶名及密碼,當然,還可以探測到別的信息,如用戶用Web瀏覽器瀏覽的網頁內容、telnet登錄名及密碼等有用信息。預計如果該程序運行于網關,會截取更多的信息。

熱詞搜索:

上一篇:Linux上五十個最佳的FireFox擴展插件
下一篇:CISCO交換機VLAN配置指南(一)

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
国产精品久久看| 欧美性受xxxx黑人xyx| 蜜臀久久99精品久久久久久9| 亚洲最新视频在线播放| 亚洲日本一区二区| 一区二区三区波多野结衣在线观看 | 日韩午夜av一区| 欧美疯狂性受xxxxx喷水图片| 88在线观看91蜜桃国自产| 欧美精品少妇一区二区三区 | 蜜桃久久久久久| 麻豆传媒一区二区三区| 久久av资源网| 国产成人免费高清| 99综合影院在线| 欧美少妇bbb| 日韩欧美亚洲一区二区| 欧美国产综合一区二区| 1024成人网| 日本aⅴ免费视频一区二区三区| 久久电影国产免费久久电影| 精品一区二区三区免费毛片爱| 国产成人精品免费在线| 91网页版在线| 日韩精品一区二区三区四区视频| 中文字幕第一区综合| 亚洲狠狠爱一区二区三区| 蜜臀国产一区二区三区在线播放| 狠狠色综合日日| 91国内精品野花午夜精品| 91精品国产91久久久久久最新毛片| 精品成人一区二区三区| 亚洲精品视频观看| 九九热在线视频观看这里只有精品| 99视频在线精品| 欧美一级免费观看| 亚洲男人天堂av| 国产乱对白刺激视频不卡| 欧洲色大大久久| 国产精品私人影院| 免费欧美高清视频| 日本高清无吗v一区| 久久综合99re88久久爱| 亚洲综合成人在线视频| 粉嫩av亚洲一区二区图片| 欧美精品电影在线播放| 国产精品青草久久| 久久99久久99精品免视看婷婷| 91性感美女视频| 国产色一区二区| 激情欧美一区二区三区在线观看| 91激情在线视频| 综合激情网...| 国产白丝精品91爽爽久久| 日韩三级.com| 午夜欧美大尺度福利影院在线看| 岛国精品在线观看| 久久综合精品国产一区二区三区| 亚洲一级二级在线| 91黄色激情网站| 亚洲精品视频一区| 91麻豆产精品久久久久久| 国产亚洲综合在线| 久久精品国产久精国产爱| 91麻豆精品国产| 日韩高清在线观看| 欧美日韩不卡视频| 亚洲午夜激情网站| 欧美日韩免费观看一区二区三区| 一区二区三区在线不卡| 色哟哟一区二区| 一区二区免费在线| 欧美在线观看18| 亚洲一区电影777| 555夜色666亚洲国产免| 日本中文字幕一区| 91精品国产手机| 精品一区二区三区在线视频| 精品美女在线播放| 国产一区二区伦理| 亚洲国产精品精华液ab| 成人白浆超碰人人人人| 综合久久国产九一剧情麻豆| 一本色道亚洲精品aⅴ| 亚洲高清三级视频| 日韩一区二区电影在线| 国产美女一区二区三区| 国产精品美日韩| 欧美亚洲综合久久| 美女在线视频一区| 国产亲近乱来精品视频| 色婷婷亚洲精品| 日韩在线卡一卡二| 亚洲精品一线二线三线无人区| 成人午夜av电影| 亚洲精品乱码久久久久久| 欧美人体做爰大胆视频| 激情深爱一区二区| 亚洲欧美日韩一区二区| 69堂精品视频| 国产成人精品一区二区三区四区| 亚洲欧洲中文日韩久久av乱码| 欧美日韩一区三区| 国产成人av网站| 亚洲一区二区成人在线观看| www激情久久| 欧美性生活一区| 久久99久国产精品黄毛片色诱| 中文字幕一区不卡| 日韩一卡二卡三卡| 91免费观看在线| 黄网站免费久久| 亚洲综合精品自拍| 国产精品系列在线| 欧美精品亚洲一区二区在线播放| 国产凹凸在线观看一区二区| 首页国产欧美日韩丝袜| 亚洲欧洲精品天堂一级 | 91在线观看污| 久久99热国产| 亚洲国产综合色| 国产精品理论片| 欧美不卡在线视频| 欧美日韩在线播放三区四区| av在线免费不卡| 国产精品一区二区x88av| 日韩精品一级二级 | 美女国产一区二区三区| 一区二区三区四区精品在线视频| 久久久久97国产精华液好用吗| 欧美日韩亚洲综合| 91毛片在线观看| 成人一区二区三区| 精品一二三四区| 蜜桃av噜噜一区| 日韩激情视频在线观看| 亚洲第一电影网| 一区二区三区四区精品在线视频| 国产精品免费人成网站| 国产欧美一区二区精品秋霞影院| 欧美变态tickle挠乳网站| 欧美天天综合网| 欧美日韩国产小视频在线观看| 91日韩在线专区| 色欲综合视频天天天| 一本在线高清不卡dvd| 91欧美一区二区| 一本大道久久a久久综合| 91影视在线播放| 91色porny| 欧美日韩一区二区三区视频| 欧美视频一区二区在线观看| 色国产综合视频| 欧美日韩一区二区三区在线 | 久久精品72免费观看| 日韩在线一区二区三区| 免费人成网站在线观看欧美高清| 蜜臂av日日欢夜夜爽一区| 精品一区二区三区影院在线午夜| 久久99精品一区二区三区三区| 国产在线一区观看| 成人综合婷婷国产精品久久免费| 成人激情校园春色| 日本国产一区二区| 欧美一级一级性生活免费录像| 日韩精品一区二区三区中文不卡| 亚洲精品在线观| 中文字幕日本不卡| 亚洲一区av在线| 韩国毛片一区二区三区| 懂色av中文字幕一区二区三区| 91美女片黄在线观看| 欧美高清视频不卡网| 久久久久久久久伊人| 亚洲人成网站色在线观看| 日日夜夜精品免费视频| 国产成人自拍网| 色婷婷综合久久| 久久综合九色综合久久久精品综合| 中文字幕不卡一区| 亚洲妇熟xx妇色黄| 国产精品888| 欧美视频一区二区三区四区| 欧美精品一区二区三区久久久 | 国产免费成人在线视频| 亚洲制服欧美中文字幕中文字幕| 另类的小说在线视频另类成人小视频在线| 国产精品一区免费在线观看| 欧美在线free| 国产亚洲短视频| 水野朝阳av一区二区三区| 久久精品国产**网站演员| 成人免费视频视频| 欧美一级夜夜爽| 一区在线中文字幕| 国产又粗又猛又爽又黄91精品| 91福利在线看| 国产精品毛片大码女人| 激情图片小说一区| 91黄色小视频|