当前位置:首页 » 网络连接 » 计算机网络嗅探
扩展阅读
手机如何留一个软件 2025-02-01 07:47:09

计算机网络嗅探

发布时间: 2023-11-18 07:54:30

A. 网络嗅探器在网络管理和网络安全方面的作用

网络嗅探器的功能主要是:通过捕获和分析网络上传输的数据来监视网络数据运行。
利用它能够随时掌握网络的实际状况,查找网络漏洞和检测网络性能;当网络性能急剧下降的时候,可以通过嗅探器分析网络流量,找出网络阻塞的来源。
嗅探技术是一种重要的网络安全攻防技术,网络嗅探器是构成入侵检测系统和网络管理工具的基石。

B. 嗅探器的作用是什么

SNIFFER(嗅探器)-简介Sniffer(嗅探器)是一种常用的收集有用数据方法,这些数据可以是用户的帐号和密码,可以是一些商用机密数据等等。Snifffer可以作为能够捕获网络报文的设备,ISS为Sniffer这样定义:Sniffer是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种工具。Sniffer的正当用处主要是分析网络的流量,以便找出所关心的网络中潜在的问题。例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用嗅探器来作出精确的问题判断。 在合理的网络中,sniffer的存在对系统管理员是致关重要的,系统管理员通过sniffer可以诊断出大量的不可见模糊问题,这些问题涉及两台乃至多台计算机之间的异常通讯有些甚至牵涉到各种的协议,借助于sniffer%2C系统管理员可以方便的确定出多少的通讯量属于哪个网络协议、占主要通讯协议的主机是哪一台、大多数通讯目的地是哪台主机、报文发送占用多少时间、或着相互主机的报文传送间隔时间等等,这些信息为管理员判断网络问题、管理网络区域提供了非常宝贵的信息。 嗅探器与一般的键盘捕获程序不同。键盘捕获程序捕获在终端上输入的键值,而嗅探器则捕获真实的网络报文。

C. 浏览器嗅探是什么意思

浏览器嗅探是指嗅探器。安装了嗅探器的浏览器能够接收局域网中计算机发出的数据包,并对这些数据进行分析。以太网中是基于广播方式传送数据的,所有的物理信号都要经过主机节点。

使用嗅探工具后,计算机则能接收所有流经本地计算机的数据包,从而实现盗取敏感信息。由于嗅探器的隐蔽性好,只是被动接收数据,而不向外发送数据,所以在传输数据的过程中,难以觉察到有人监听。

1、浏览器嗅探的发展背景:

随着互联网多层次性、多样性的发展,网吧已由过去即时通信、浏览网页、电子邮件等简单的应用,扩展成为运行大量在线游戏、在线视频音频、互动教学、P2P等技术应用。应用特点也呈现出多样性和复杂性,因此,这些应用对我们的网络服务质量要求更为严格和苛刻。

2、浏览器嗅探的作用:

嗅探器可以获取网络上流经的数据包。 用集线器hub组建的网络是基于共享的原理的, 局域网内所有的计算机都接收相同的数据包, 而网卡构造了硬件的“过滤器“ 通过识别MAC地址过滤掉和自己无关的信息。


(3)计算机网络嗅探扩展阅读:

防范浏览器嗅探的方法:

1、对数据进行加密:对数据的加密是安全的必要条件。其安全级别取决于加密算法的强度和密钥的强度。使用加密技术,防止使用明文传输信息。

2、实时检测监控嗅探器:监测网络通讯丢包和带宽异常情况,及时发现可能存在的网络监听机器。

3、使用安全的拓朴结构:将非法用户与敏感的网络资源相互隔离,网络分段越细,则安全程度越大。

参考资料来源:网络-嗅探

D. 嗅探的SNIFF原理

要知道在以太网中,所有的通讯都是广播的,也就是说通常在同一个网段的所有网络接口都可以访问在物理媒体上传输的所有数据,而每一个网络接口都有一个唯一的硬件地址,这个硬件地址也就是网卡的MAC地址,大多数系统使用48比特的地址,这个地址用来表示网络中的每一个设备,一般来说每一块网卡上的MAC地址都是不同的,每个网卡厂家得到一段地址,然后用这段地址分配给其生产的每个网卡一个地址。在硬件地址和IP地址间使用ARP和RARP协议进行相互转换。
在正常的情况下,一个网络接口应该只响应这样的两种数据帧:
1.与自己硬件地址相匹配的数据帧。
2.发向所有机器的广播数据帧。
在一个实际的系统中,数据的收发是由网卡来完成的,网卡接收到传输来的数据,网卡内的单片程序接收数据帧的目的MAC地址,根据计算机上的网卡驱动程序设置的接收模式判断该不该接收,认为该接收就接收后产生中断信号通知CPU,认为不该接收就丢掉不管,所以不该接收的数据网卡就截断了,计算机根本就不知道。CPU得到中断信号产生中断,操作系统就根据网卡的驱动程序设置的网卡中断程序地址调用驱动程序接收数据,驱动程序接收数据后放入信号堆栈让操作系统处理。而对于网卡来说一般有四种接收模式:
广播方式:该模式下的网卡能够接收网络中的广播信息。组播方式:设置在该模式下的网卡能够接收组播数据。
直接方式:在这种模式下,只有目的网卡才能接收该数据。混杂模式:在这种模式下的网卡能够接收一切通过它的数据,而不管该数据是否是传给它的。
好了,现在我们总结一下,首先,我们知道了在以太网中是基于广播方式传送数据的,也就是说,所有的物理信号都要经过我的机器,再次,网卡可以置于一种模式叫混杂模式(promiscuous),在这种模式下工作的网卡能够接收到一切通过它的数据,而不管实际上数据的目的地址是不是他。这实际上就是我们SNIFF工作的基本原理:让网卡接收一切他所能接收的数据。
我们来看一个简单的例子,如图一所示,机器A、B、C与集线器HUB相连接,集线器HUB通过路由器Router访问外部网络。这是一个很简单也很常见的情况,比如说在公司大楼里,我所在的网络部办公室里的几台机器通过集线器连接,而网络部、开发部、市场部也是同样如此,几个部门的集线器通过路由器连接。还是回到我们的图一上来,值得注意的一点是机器A、B、C使用一个普通的HUB连接的,不是用SWITCH,也不是用ROUTER,使用SWITCH和ROUTER的情况要比这复杂得多。
我们假设一下机器A上的管理员为了维护机器C,使用了一个FTP命令向机器C进行远程登陆,那么在这个用HUB连接的网络里数据走向过程是这样的。首先机器A上的管理员输入的登陆机器C的FTP口令经过应用层FTP协议、传输层TCP协议、网络层IP协议、数据链路层上的以太网驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来数据帧送到了HUB上,现在由HUB向每一个接点广播由机器A发出的数据帧,机器B接收到由HUB广播发出的数据帧,并检查在数据帧中的地址是否和自己的地址相匹配,发现不是发向自己的后把这数据帧丢弃,不予理睬。而机器C也接收到了数据帧,并在比较之后发现是发现自己的,接下来他就对这数据帧进行分析处理。
在上面这个简单的例子中,机器B上的管理员如果很好奇,他很想知道究竟登陆机器C上FTP口令是什么?那么他要做的很简单,仅仅需要把自己机器上的网卡置于混杂模式,并对接收到的数据帧进行分析,从而找到包含在数据帧中的口令信息。
sniff做法
在上一节里,我们已经知道了SNIFF的基本原理是怎么一回事,这一节我们来亲自动手做一个自己的sniff,毕竟,用程序代码来说话比什么都要来得真实,也容易加深理解。
回头想一想我们上面说的原理,我们要做的事情有几件:
1. 把网卡置于混杂模式。 2. 捕获数据包。 3.分析数据包。
注:下面的源代码取至Chad Renfro的《Basic Packet-SnifferConstruction from the Ground Up》一文中
/************************Tcp_sniff_2.c********************/
1.#include
2.#include
3.#include
4.#include
5.#include
6.#include
7.#include
8.#include
9.#include headers.h
#define INTERFACE eth0
/*Prototype area*/
1 0 int Open_Raw_Socket(void);
11 int Set_Promisc(char *interface,intsock);
12 int main() {
13int sock,bytes_recieved,fromlen;
14.char buffer[65535];
15.struct sockaddr_in from;
16.struct ip *ip;
17.struct tcp *tcp;
18.sock = Open_Raw_Socket();
19. Set_Promisc(INTERFACE,sock);
20. while(1)
22. {
23. fromlen = sizeof from;
24. bytes_recieved = recvfrom(sock,buffer,sizeofbuffer,0,(struct sockaddr *)&from,&fromlen);
25. printf( Bytes received :::%5d ,bytes_recieved);
26. printf(Source address :::%s ,inet_ntoa(from.sin_addr));
27. ip = (struct ip *)buffer;
/*See if this is a TCP packet*/
28. if(ip->ip_protocol == 6) {
29. printf(IP header length :::%d ,ip->ip_length);
30. printf(Protocol :::%d ,ip->ip_protocol);
31. tcp = (struct tcp *)(buffer +(4*ip->ip_length));
32. printf(Source port :::%d ,ntohs(tcp->tcp_source_port));
33. printf(Dest port :::%d ,ntohs(tcp->tcp_dest_port));
34. }
35. }
36.}
37 int Open_Raw_Socket() {
38. int sock;
39. if((sock = socket(AF_INET,SOCK_RAW,IPPROTO_TCP)) < 0){
/*Then the socket was not created properly and must die*/
40. perror(The raw socket was not created);
41. exit(0);
42. };
43. return(sock);
44. }
45 int Set_Promisc(char *interface,int sock ) {
46. struct ifreq ifr;
47. strncpy(ifr.ifr_name,interface,strnlen(interface)+1);
48. if((ioctl(sock,SIOCGIFFLAGS,&amp;ifr) == -1)) {
/*Could not retrieve flags for the interface*/
49. perror(Could not retrive flags for the interface);
50. exit(0);
51. }
52. printf(The interface is ::: %s ,interface);
53. perror(Retrieved flags from interface successfully);
54. ifr.ifr_flags |= IFF_PROMISC;
55. if (ioctl (sock,SIOCSIFFLAGS,&amp;ifr) == -1 ) {
/*Could not set the flags on the interface */
56. perror(Could not set the PROMISC flag:);
57. exit(0);
58. }
59. printf(Setting interface ::: %s ::: to promisc,interface);
60. return(0);
61. }
/***********************EOF**********************************/
上面这段程序中有很详细的注解,不过我想还是有必要说一说,首先第10行--intOpen_Raw_Socket(void);是我们的自定义函数,具体内容如下:
37 int Open_Raw_Socket() {
38. int sock;
39. if((sock = socket(AF_INET,SOCK_RAW,IPPROTO_TCP)) < 0){
/*Then the socket was not created properly and must die*/
40. perror(The raw socket was not created);
41. exit(0);
42. };
43. return(sock);
44. }
第39行 if((sock = socket(AF_INET,SOCK_RAW,IPPROTO_TCP)) < 0) {
这里我们调用了socket函数,使创建了了一个原始套接口,使之收到TCP/IP信息包。
接下来第11行-int Set_Promisc(char *interface,intsock),这也是我们的自定义函数,目的是把网卡置于混杂模式,具体内容如下:
45 int Set_Promisc(char *interface,int sock ) {
46. struct ifreq ifr;
47. strncpy(ifr.ifr_name,interface,strlen(interface)+1);
48. if((ioctl(sock,SIOCGIFFLAGS,&amp;ifr) == -1)) {
/*Could not retrieve flags for the interface*/
49. perror(Could not retrive flags for the interface);
50. exit(0);
51. }
52. printf(The interface is ::: %s ,interface);
53. perror(Retrieved flags from interface successfully);
54. ifr.ifr_flags |= IFF_PROMISC;
55. if (ioctl (sock,SIOCSIFFLAGS,&amp;ifr) == -1 ) {
/*Could not set the flags on the interface */
56. perror(Could not set the PROMISC flag:);
57. exit(0);
58. }
59. printf(Setting interface ::: %s ::: to promisc,interface);
60. return(0);
61. }
首先 struct ifreq ifr; 定一了一个ifrreg的结构ifr,接下来strncpy(ifr.ifr_name,interface,strnlen(interface)+1);,就是把我们网络设备的名字填充到ifr结构中,在这里#define INTERFACE eth0 ,让我们再往下看,ioctl(sock,SIOCGIFFLAGS,&amp;ifr),SIOCGIFFLAGS请求表示需要获取接口标志,现在到了第54行,在我们成功的获取接口标志后把他设置成混杂模式,ifr.ifr_flags|= IFF_PROMISC;ioctl (sock,SIOCSIFFLAGS,&amp;ifr)。OK,现在我们所说的第一步已经完成--------把网卡置于混杂模式。
现在进入第二步,捕获数据包。从第20行开始,我们进入了一个死循环,while(1),在第24行,recvfrom(sock,buffer,sizeof buffer,0,(struct sockaddr *)&amp;from,&amp;fromlen),这个函数要做的就是接收数据,并把接收到的数据放入buffer中。就是这么简单,已经完成了我们要捕获数据包的任务。
到了第三步,分析数据包。27行,ip = (struct ip*)buffer,使我们在头文件中的IP结构对应于所接收到的数据,接下来判断在网络层中是否使用的是TCP协议,if(ip->ip_protocol== 6) ,如果答案是,tcp信息包从整个IP/TCP包 buffer +(4*ip->ip_length) 地址处开始,所以31行 tcp = (struct tcp*)(buffer +(4*ip->ip_length)),然后对应结构把你所需要的信息输出。
/*************************headers.h**************************/
/*structure of an ip header*/
struct ip {
unsigned int ip_length:4; /*little-endian*/
unsigned int ip_version:4;
unsigned char ip_tos;
unsigned short ip_total_length;
unsigned short ip_id;
unsigned short ip_flags;
unsigned char ip_ttl;
unsigned char ip_protocol;
unsigned short ip_cksum;
unsigned int ip_source; unsigned int ip_dest;
};
/* Structure of a TCP header */
struct tcp {
unsigned short tcp_source_port;
unsigned short tcp_dest_port;
unsigned int tcp_seqno;
unsigned int tcp_ackno;
unsigned int tcp_res1:4,/*little-endian*/
tcp_hlen:4,
tcp_fin:1,
tcp_syn:1,
tcp_rst:1,
tcp_psh:1,
tcp_ack:1,
tcp_urg:1,
tcp_res2:2;
unsigned short tcp_winsize;
unsigned short tcp_cksum;
unsigned short tcp_urgent;
};
/*********************EOF***********************************/
从上面的分析我们可以清楚的认识到,认识一个SNIFF需要对TCP/IP协议有着详细的了解,否则你根本无法找到你需要的信息。有了上面的基础,你可以自己来做一个你需要的SNIFF了。

E. 什么是网络嗅探器,网络嗅探器是干嘛的

网络嗅探器简单说来就是使我们能够“嗅探”到本地网络的数据,并检查进入计算机的信息包。
另外,当我们处理自身网络问题的时候,一个信息包嗅探器向我们展示出正在网络上进行的一切活动。于是,借助一定的知识水准,我们就可以确定问题的根源所在。必须记住的是, 信息嗅探器并不会告诉你问题究竟是什么,而只会告诉你究竟发生了什么。
就好比你用鼻子“嗅”,或用手去“探”,而不用眼去看,你能“嗅探”出那里有东西,但不知道是什么!
方法主要就是用一些嗅探工具。你在网络上搜索一下“嗅探器工具”就会有很多介绍和下载。