NewsRhzhi | 先创资讯 | 旧版入口
rhzhi.net
网站首页 | NewsRhzhi | 先创资讯 | 操作系统 | 工具软件 | 办公软件 | 网站设计 | 组网专栏 | 平面设计 | 多 媒 体 | 程序开发 | 硬件资料 | 聊天软件
您现在的位置: 先创网 >> 网络应用 >> 网络安全 >> 文章正文
详解嗅探原理与反嗅探技术
eNet论坛
2008-4-10 14:33:55文/佚名
    

  反嗅探技术

  我如何才能检测网内是否存在有嗅探程序?

  理论上,嗅探程序是不可能被检测出来的,因为嗅探程序是一种被动的接收程序,属于被动触发的,它只会收集数据包,而不发送出任何数据,尽管如此,嗅探程序有时候还是能够被检测出来的。

  一个嗅探程序,不会发送任何数据,但是当它安装在一台正常的局域网内的计算机上的时候会产生一些数据流。举个例子,它能发出一个请求,始DNS根据IP地址进行反相序列查找。

  下面一种简单的检测方法:

  ping 方法

  很多的嗅探器程序,如果你发送一个请求给哪台有嗅探程序的机器,它将作出应答

  说明:

  1. 怀疑IP地址为10.0.0.1的机器装有嗅探程序,它的MAC地址确定为00-40-05-A4-79-32.

  2. 确保机器是在这个局域网中间。

  3. 现在修改MAC地址为00-40-05-A4-79-33.

  4. 现在用ping命令ping这个IP地址。

  5. 没有任何人能够看到发送的数据包,因为每台计算机的MAC地址无法与这个数据包中的目地MAC不符,所以,这个包应该会被丢弃。

  6. 如果你看到了应答,说明这个MAC包没有被丢弃,也就是说,很有可能有嗅探器存在。

  现在,这种方法已经得到了广泛的推崇和宣扬,新一代的黑客们也学会了在他们的代码中加入虚拟的MAC地址过滤器很多的计算机操作系统(比如Windows)都支持MAC过滤器(很多过虑器只检查MAC的第一个字节,这样一来,MAC地址FF-00-00-00-00-00和FF-FF-FF-FF-FF- FF就没有区别了。(广播地址消息会被所有的计算机所接收)。这种技术通常会用在交换模型的以太网中。当交换机发现一个未知的MAC地址的时候,它会执行类似“flood”的操作,把这个包发送给每个节点。

  本机嗅探程序的检测

  本机嗅探的程序检测方法比较简单,只要检查一下网卡是否处于混杂模式就可以了,在Linux下,这个比较容易实现,而在Windows平台上,并没有现成的函数可供我们实现这个功能,我们来用一点小技巧:

  #include

  #define MAX_PACK_LEN 65535

  #define MAX_HOSTNAME_LAN 255

  #pragma comment (lib , "ws2_32.lib")

  int main()

  {

  SOCKET SockRaw,Sock;

  WSADATA wsaData;

  int ret=0;

  struct sockaddr_in sAddr,addr;

  char RecvBuf[MAX_PACK_LEN];

  char FAR name[MAX_HOSTNAME_LAN];

  struct hostent FAR * pHostent;

  char *Buf=(char *)malloc(128);

  int settimeout=1000;//这里我们设置了一秒钟超时

  printf("UNSniffer for Win2k v1.0\nPower by BigBall\nHomePage:http:\/\/www.patching.net\/liumy\nEmail:liumy@patching.net\nOicq:9388920\n\nChecking your system ,wait a moment please...\n");

  WSAStartup(MAKEWORD(2,2),&wsaData);

  //建立一条RawSocket

  SockRaw=socket(AF_INET,SOCK_RAW,IPPROTO_IP);

  再建立一条UDP

  Sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

  memset(&sAddr,0,sizeof(sAddr));

  memset(&addr,0,sizeof(addr));

  sAddr.sin_family=AF_INET;

  sAddr.sin_port=htons(5257);

  addr.sin_family=AF_INET;

  addr.sin_port=htons(5258);

  //把IP地址指向本机

  addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

  memset(RecvBuf,0, sizeof(RecvBuf));

  pHostent=malloc(sizeof(struct hostent));

  gethostname(name, MAX_HOSTNAME_LAN);

  pHostent=gethostbyname(name);

  //取得自己的IP地址

  memcpy(&sAddr.sin_addr.S_un.S_addr, pHostent->h_addr_list[0], pHostent->h_length);

  free(pHostent);

  //绑定一个本机的接收端口

  bind(SockRaw, (struct sockaddr *)&sAddr, sizeof(sAddr));

  //虚连接到本机的一个未打开的端口

  connect(Sock,(struct sockaddr *)&addr,sizeof(addr));

  Buf="1234567890!@#$%^&*";

  //设置超时

  setsockopt(SockRaw,SOL_SOCKET,SO_RCVTIMEO,(char *)settimeout,sizeof(int));

  //向虚连接端口发送一个数据包

  send(Sock,Buf,strlen(Buf),0);

  //使用SockRaw尝试接收这个数据包

  ret=recv(SockRaw,RecvBuf,sizeof(RecvBuf),0);

  if(ret==SOCKET_ERROR    ret==0)

  printf("No found any sniffer in your system!\n");

  else

  {

  //进行ChkSum

  if(Buf=="1234567890!@#$%^&*")

  printf("Warning!!! Found sniffer!!!\n");

  }

  closesocket(Sock);

  closesocket(SockRaw);

  free(pHostent);

  free(Buf);

  WSACleanup();

  return 0;

上一页  [1] [2] [3] 

打印此页 投稿与建议 返回顶部
栏 目 索 引
软件应用 SOFTWARE
Win XP | NT/2003
Win2000 | DOS/Win9x
PowerPoint | Office
Excel | Word
网络软件 | 实用软件
媒体软件 | 系统软件
常用软件 | 办公软件
聊天软件 | 网络安全
新软试用 | Vista
设计在线 DESIGN
Dreamweaver | 3DMax
Photoshop | Flash
平面设计 | 网页设计
多 媒 体 | 精品画廊
精彩专区 SPECIAL
Q Q 专区 | 热门专题
组网玩网 | 程序开发
应用集锦 |
相关文章
关于我们 - 联系方式 - 合作伙伴 - 网站大事记 - 网站地图 - 我要投稿
Copyright ©1997-2008 先创网 All Rights Reserved.
先创科技 版权所有