问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何检测Sniffer

发布网友 发布时间:2022-04-22 15:52

我来回答

1个回答

热心网友 时间:2023-07-18 12:24

正常情况下,就是说不在混乱模式,网卡检测是不是广播地址
要比较看收到的目的以太网址是否等于ff.ff.ff.ff.ff.ff
是则认为是广播地址。
   在混乱模式时,网卡检测是不是广播地址只看收到包的目的以太
网址的第一个八位组值,是0xff则认为是广播地址。
利用这点细微差别就可以检测出Sniffer.
Linux
   以前就提出过,一些版本内核有这种问题:
   当混杂模式时,每个包都被传到了操作系统内核以处理。
在处理某些包,只看IP地址而不看以太网头中的源物理地址。
所以:
   使用一个不存在的目的MAC,正确的目的IP,受影响
的内核将会由于是混杂模式而处理它,并将之交给相应系统
堆栈处理。从而实现检测Sniffer
   总之,只要发一个以太网头中目的地址是ff.00.00.00.00.00
的ARP包(l0pht公司是ff.ff.ff.ff.ff.00)就可以检测出Linux和
Windows网卡处于混乱状态的计算机.
   以下是一个Linux下用于检测Linux下Sniffer的程序,很多地方都贴
过了,我只改了一句话,这样也可以检测出Windows机器。:)
/*
gcc -lbsd -O3 -o linuxanti linuxanti.c
*/
/*
Network Promiscuous Ethernet Detector.
Linux 2.0.x / 2.1.x, libc5 & GlibC
-----------------------------------------
(c) 1998 savage@apostols.org
-----------------------------------------
Scan your subnet, and detect promiscuous
Windows & linuxes. It really works, not a joke.
-----------------------------------------
$Id: neped.c,v 1.4 1998/07/20 22:31:52 savage Exp $
*/
#include <stdio.h>
#include <fcntl.h> /* for nonblocking */
#include <sys/ioctl.h>
#include <sys/socket.h> /* basic socket definitions */
#include <net/if.h> /* for ifreq */
#include <arpa/inet.h> /* inet(3) functions */
#define ETH_P_ARP 0x0806
#define MAX_PACK_LEN 2000
#define ETHER_HEADER_LEN 14
#define ARPREQUEST 1
#define ARPREPLY 2
#define perr(s) fprintf(stderr,s)
struct arp_struct
{
u_char dst_mac;
u_char src_mac;
u_short pkt_type;
u_short hw_type;
u_short pro_type;
u_char hw_len;
u_char pro_len;
u_short arp_op;
u_char sender_eth;
u_char sender_ip;
u_char target_eth;
u_char target_ip;
};
union
{
u_char full_packet[MAX_PACK_LEN];
struct arp_struct arp_pkt;
}
a;
#define full_packet a.full_packet
#define arp_pkt a.arp_pkt
char *
inetaddr ( u_int32_t ip )
{
struct in_addr in;
in.s_addr = ip;
return inet_ntoa(in);
}
char *
hwaddr (u_char * s)
{
static char buf[30];
sprintf (buf, "%02X:%02X:%02X:%02X:%02X:%02X", s[0], s, s, s,
s, s);
return buf;
}
void
main (int argc, char **argv)
{
int rec;
int len, from_len, rsflags;
struct ifreq if_data;
struct sockaddr from;
u_int8_t myMAC;
u_int32_t myIP, myNETMASK, myBROADCAST, ip, dip, sip;
if (getuid () != 0)
{
perr ("You must be root to run this program!\\n");
exit (0);
}
if (argc != 2)
{
fprintf(stderr,"Usage: %s eth0\\n", argv[0]);
exit (0);
}
if ((rec = socket (AF_INET, SOCK_PACKET, htons (ETH_P_ARP))) < 0)
{
perror("socket");
exit (0);
}
printf ("----------------------------------------------------------\\n");
strcpy (if_data.ifr_name, argv);
if (ioctl (rec, SIOCGIFHWADDR, &if_data) < 0) {
perr ("can't get HW addres of my interface!\\n");
exit(1);
}
memcpy (myMAC, if_data.ifr_hwaddr.sa_data, 6);
printf ("> My HW Addr: %s\\n", hwaddr (myMAC));
if (ioctl (rec, SIOCGIFADDR, &if_data) < 0) {
perr ("can't get IP addres of my interface!\\n");
exit(1);
}
memcpy ((void *) &ip, (void *) &if_data.ifr_addr.sa_data + 2, 4);
myIP = ntohl (ip);
printf ("> My IP Addr: %s\\n", inetaddr(ip));
if (ioctl (rec, SIOCGIFNETMASK, &if_data) < 0)
perr ("can't get NETMASK addres of my interface!\\n");
memcpy ((void *) &ip, (void *) &if_data.ifr_netmask.sa_data + 2, 4);
myNETMASK = ntohl (ip);
printf ("> My NETMASK: %s\\n", inetaddr(ip));
if (ioctl (rec, SIOCGIFBRDADDR, &if_data) < 0)
perr ("can't get BROADCAST addres of my interface!\\n");
memcpy ((void *) &ip, (void *) &if_data.ifr_broadaddr.sa_data + 2, 4);
myBROADCAST = ntohl (ip);
printf ("> My BROADCAST: %s\\n", inetaddr(ip));
if ((rsflags = fcntl (rec, F_GETFL)) == -1)
{
perror ("fcntl F_GETFL");
exit (1);
}
if (fcntl (rec, F_SETFL, rsflags | O_NONBLOCK) == -1)
{
perror ("fcntl F_SETFL");
exit (1);
}
printf ("----------------------------------------------------------\\n");
printf ("> Scanning ....\\n");
for (dip = (myIP & myNETMASK) + 1; dip < myBROADCAST; dip++)
{
bzero(full_packet, MAX_PACK_LEN);
memcpy (arp_pkt.dst_mac, "\\255\\255\\255\\255\\255\\0", 6); /* ff:ff:ff:ff:ff:00
:) */
/* Only change this line! */
memcpy (arp_pkt.src_mac, myMAC, 6);
arp_pkt.pkt_type = htons( ETH_P_ARP );
arp_pkt.hw_type = htons( 0x0001 );
arp_pkt.hw_len = 6;
arp_pkt.pro_type = htons( 0x0800 );
arp_pkt.pro_len = 4;
arp_pkt.arp_op = htons (ARPREQUEST);
memcpy (arp_pkt.sender_eth, myMAC, 6);
ip = htonl (myIP);
memcpy (arp_pkt.sender_ip, &ip, 4);
memcpy (arp_pkt.target_eth, "\\0\\0\\0\\0\\0\\0", 6);
ip = htonl (dip);
memcpy (arp_pkt.target_ip, &ip, 4);
strcpy(from.sa_data, argv);
from.sa_family = 1;
if( sendto (rec, full_packet, sizeof (struct arp_struct), 0, &from,
sizeof(from)) < 0)
perror ("sendto");
usleep (50);
len = recvfrom (rec, full_packet, MAX_PACK_LEN, 0, &from, &from_len);
if (len <= ETHER_HEADER_LEN)
continue;
memcpy (&ip, arp_pkt.target_ip, 4);
memcpy (&sip, arp_pkt.sender_ip, 4);
if (ntohs (arp_pkt.arp_op) == ARPREPLY
&& ntohl (ip) == myIP
&& ( dip - ntohl(sip) >= 0 )
&& ( dip - ntohl(sip) <= 2 ) )
{
printf ("*> Host %s, %s **** Promiscuous mode detected !!!\n",
inetaddr (sip),
hwaddr (arp_pkt.sender_eth));
}
}
printf ("> End.\\n");
exit (0);
}

Sniffer Scaner

   Ace Studio , 1999. (AceStudio@hotmail.com)

运行环境:Win95/98,无需Winsock

本程序可以检测出本网络内正在运行Sniffer的计算机,或者说
网卡处于混乱状态。对方的操作系统可以是Win95/98/NT,Linux。

   Sniffer一般只能监听连到同一集线器上计算机(这主要看网络的
拓扑结构),但检测Sniffer可没这种*,只要与对方通讯可以不过
路由。只要符合此条件其他网络中的Sniffer也可以查出。

   一般不必配置,程序会自动检测网络配置。一旦扫描发现有人窃
听,会提示对方的IP, MAC,并会记录到日志(Antilog.txt)中。

注:有时候会误报。一般是某些网卡驱动本身的问题

可以在以下位置下载
替换202.115.16.8/~skyfly/net/anti.zip
替换www2.neiep.e.cn/ace/net/anti.zip

每台主机进入LAN时会向整个子网发送免费ARP通知报文,即该request包是
利用广播方式请求解析自己的IP地址,但源和目标IP已经就位了。
免费ARP(源IP和目标IP一致)请求意味着一个包就影响了整个子网,
如果一个错误的免费ARP请求出现,整个子网都被搅乱了。

即使主机不发送免费ARP报文,也会因为后续的request请求导致自己的IP-MAC
对进入LAN上所有主机的ARP Cache中,所以冲突与否与免费ARP包没有必然
联系。这个结论可以这样理解,一台Linux主机与pwin98争夺IP地址,Linux
主机将争夺成功,pwin98却一直在报告IP冲突,显然后面所有的IP冲突
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
大学入学应该带哪些必备物品? tim删除聊天记录的方法步骤 pc端彻底删除tim聊天记录 甩脂机调到什么档位 如何用甩脂机 甩脂机的正确使用方法 使用抖脂机要注意什么 怎样申请小号微信号 ...的长和宽分别增加6米,扩建后草坪的面积增加了多少 ...扩建后长和宽分别增加10米,扩建后的操场面积增加了多少平方米?_百 ... 长方形的公园它的面积长和宽分别扩大十米后它的平方增加了面积增加了13... 星球大战-极速飞梭(游戏问题) 请问我的银行卡很久没用了,现在卡里没有钱,以前办理的时候每月有三元的短信费用。我现在如果继续用这张 BT下载问题 如何使用vuescan for linux 单片机控制串口屏通信出现了问题,小白求教 尊敬的郭卫国老师。。 一份详细的端口意义 电脑中毒了 智能电视为什么进播放器看视频确认键用 沃尔玛验厂是什么?沃尔玛多少钱? 英语,viruses是很多病毒的意思? oppoa59s可以用快充插头吗? oppo a59s有快充吗? oppo a59s手机是快充吗? oppoa59s是快充吗 oppoa59s快速充电 oppoa59s快速充电 水瓶座的女生到底是怎么样那? 水瓶座的女生会有怎样的特点? 水瓶座女生有什么特点??是什么样的?? 英语高手 求翻译 雷克萨斯es250转速问题 车子启动转速表1000 加速1500 30码 一下子转速到1100 马铃薯削皮后放冰箱还能吃吗 土豆削皮了放冰箱第二天能吃吗 土豆削了皮,放冰箱为什么变黑了,还能吃 削了皮的土豆放在冰箱里第二天还能吃么? 在抖音挺收藏歌曲怎么定时关闭安卓手机 抖音收藏的音乐为啥不能关屏 抖音音乐人的音乐可以隐藏吗 怎样删除抖音里的本地音乐 excel中INDIRECT和IF函数嵌套使用 求excel高手教我,indirect嵌套的问题 excel如何使用查找和引用函数ADDRESS? if函数和indirect函数嵌套 返回文本。。。 excel中hyperlink函数无法嵌套indirect? 就是如果indirect 函数嵌套在hyperlink函数里,当我填充一列这个函数的时候无法自动+1 EXCEL中COUNTIF和OR函数嵌套使用 求大神指点:SUM函数和INDIRECT嵌套使用时,如何正确添加引用其他工作表名称。 用EXCEL函数INDIRECT出现#VALUE 在Excel中使用vlookup函数时嵌套indirect返回#REF!...