巧用ARP 探测网络中的黑客软件(转载)

ARP 探测工具查看局域网是否中arp病毒 ARP 探测工具ARP 探测工具ARP 探测工具ARP 探测工具 立即下载

 

嗅探器(Sniffer)一直以来都是一种让人恼火的黑客工具,因为它是一种静态的攻击软件,它的存在不会留下任何痕迹,因此人们很难将它揪出来。可是,它的危害性却又是相当大的(它就像一个监视器,你的“一举一动”都在它的监视之下,你说危害大不大)。所以,我们不能不要想个办法出来检查网络中是否存在Sniffer,这是非常必要的。
1. Sniffer原理
所谓知己知彼方能百战不殆,要了解探测Sniffer的方法,就先得了解Sniffer的原理。首先,让我们来看一看局域网中是怎样传输数据的。当一个数据包的目的地是局域网内的某台计算机时,此数据包将以广播的形式被发送到网内每一台计算机上。而每台计算机的网卡将分析数据包中的目的Mac地址(即以太网地址),如果此地址为本计算机Mac地址或为广播地址(FF-FF-FF-FF-FF-FF),那么,数据包将被接收,而如果不是,网卡将直接将其丢弃。但是,这里有一个前提,就是接收端计算机的网卡是在正常模式下工作的。而如果网卡被设置为混杂模式,那么它就可以接收所有经过的数据包了(当然也包括目的地不是本机的数据包)。就是说,只要是发送到局域网内的数据包,都会被设置成混杂模式的网卡所接收!这也就是Sniffer的基本原理了。至于Sniffer的具体实现和一些细节,这里就不多讲了,大家有兴趣可以参考相关资料。
2. 以太网中传输的ARP数据报
知道了Sniffer的基本原理,现在,我们就要想想怎么才能将局域网中隐藏的Sniffer揪出来,这才是本篇文章的主题。这里,我们需要自己构造ARP数据包,所以,就先简单介绍一下ARP请求和应答数据报的结构:
typedef struct _et_header //以太网头部
{
unsigned char eh_dst[6];
unsigned char eh_src[6];
unsigned short eh_type;
}ET_HEADER;

{
unsigned short arp_hdr;
unsigned short arp_pro;
unsigned char arp_hln;
unsigned char arp_pln;
unsigned short arp_opt;
unsigned char arp_sha[6];
unsigned long arp_spa;
unsigned char arp_tha[6];
unsigned long arp_tpa;
}ARP_HEADER;

以上就是网络中传输的ARP数据包的结构了。至于结构中每个字段所表示的具体含义以及如何初始化,超出了本文章的讨论范围,大家有兴趣可以参看《TCP-IP协议详解》一书。
3. 探测局域网中的Sniffer
终于进入主题了。既然Sniffer是一种静态的黑软,不会留下任何日志,那么我们就要主动的去探测它。鉴于Sniffer的原理是设置网卡为混杂模式,那么,我们就可以想办法探测网络中被设置为混杂模式的网卡,以此来判断是否存在Sniffer。
这里,让我们再来看看计算机接收数据包的规则。前面已经讲过,在正常模式下,首先由网卡判断数据包的目的Mac地址,如果为本机Mac地址或为广播地址,那么数据包将被接收进入系统核心,否则将被丢弃。而如果网卡被设置为混杂模式,那么所有的数据包都将直接进入系统核心。数据包到达系统核心后,系统还将进一步对数据包进行筛选:系统只会对目的Mac地址为本机Mac地址或广播地址的数据包做出响应――如果接收到的是ARP请求报文,那么系统将回馈一个ARP应答报文。但是,不同的是,系统核心和网卡对广播地址的判断有些不一样:以Windows系统为例,网卡会判断Mac地址的所有六位,而系统核心只判断Mac地址的前两位(Win98甚至只判断前一位),也就是说,对于系统核心而言,正确的广播地址FF-FF-FF-FF-FF-FF和错误的广播地址FF-FF-FF-FF-FF-FE是一样的,都被认为是广播地址,甚至FF-FF-00-00-00-00也会被系统核心认为是广播地址!
写到这里,聪明的读者大概已经知道该怎么做了。如果我们构造一个目的Mac
4. 主要源码分析
由以上分析可知,程序大概分为两个模块,一个是发送伪装广播地址的ARP请求报文,另一个是接收回馈的ARP应答报文并做出分析。我们就分别用两个线程来实现。主线程负责发送,监听线程负责接收。
首先是创建以太网头部和ARP头部的结构:
typedef struct _et_header //以太网头部
 {
unsigned char eh_dst[6];
unsigned char eh_src[6];
unsigned short eh_type;
}ET_HEADER;

{
unsigned short arp_hdr;
unsigned short arp_pro;
unsigned char arp_hln;
unsigned char arp_pln;
unsigned short arp_opt;
unsigned char arp_sha[6];
unsigned long arp_spa;
unsigned char arp_tha[6];
unsigned long arp_tpa;
}ARP_HEADER;

然后是发送ARP请求报文的主线程,取得所有适配器的名字。其中,“adapter_name”表示一个用于存放适配器名字的缓冲区,而这些适配器名字将以UNICODE编码方式存入此缓冲区中。UNICODE编码方式就是用一个字的空间(两个字节)来存放一个字符。这样,每个字符间自然会出现一个'/0'。而两个适配器名字之间将会有一个字为'/0'作为间隔。adapter_length:这个缓冲区的大小:
if(PacketGetAdapterNames((char*)adapter_name, &adapter_length)==FALSE)
{
printf("PacketGetAdapterNames error:%d/n",GetLastError());
return 0;
}

打开适配器,此处我默认打开第一块适配器:
lpAdapter=(LPADAPTER)PacketOpenAdapter((LPTSTR)adapter_list[0]);
if (!lpAdapter||(lpAdapter->hFile==INVALID_HANDLE_
以太网头部和ARP头部结构赋值,StrToMac函数是笔者自定义的字符串转换为Mac地址的函数:
StrToMac("00E06E41508F",s_Mac); //"00E06E41508F"是笔者测试程序所用的本地机的网卡地址,测试者应将其改为测试机网卡地址
memcpy(et_header.eh_src,s_Mac,6);
StrToMac("FFFFFFFFFFFE",d_Mac); //目的物理地址设置为FFFFFFFFFFFE。
memcpy(et_header.eh_dst,d_Mac,6);
et_header.eh_type=htons(0x0806); //类型为0x0806表示这是ARP包
arp_header.arp_hdr=htons(0x0001); //硬件地址类型以太网地址
arp_header.arp_pro=htons(0x0800); //协议地址类型为IP协议
arp_header.arp_hln=6; //硬件地址长度为6
arp_header.arp_pln=4; //协议地址长度为4
arp_header.arp_opt=htons(0x0001); //标识为ARP请求
arp_header.arp_spa=inet_addr("172.24.21.10"); //"172.24.21.10"是我测试程序所用的本地机的IP,测试者应将其改为测试机IP
memcpy(arp_header.arp_sha,et_header.eh_src,6);
arp_header.arp_tpa=inet_addr(argv[1]);
memcpy(arp_header.arp_tha,et_header.eh_dst,6);
发送数据包:
lpPacket=PacketAllocatePacket(); //给PACKET结构指针分配内存
PacketInitPacket(lpPacket,buffer,512); //初始化PACKET结构指针
PacketSetNumWrites(lpAdapter,5); //设置发送次数
PacketSendPacket(lpAdapter,lpPacket,TRUE);//发送ARP请求包
最后别忘了扫尾工作:
PacketFreePacket(lpPacket); //释放PACKET结构指针
PacketCloseAdapter(lpAdapter); //关闭适配器
最后是监听线程,设置接收数据包的系列参数:
PacketSetHwFilter(lpAdapter, NDIS_PACKET_TYPE_DIRECTED); //设置网卡为直接模式
PacketSetBuff(lpAdapter,1024); //设置网卡接收数据包的缓冲区大小
PacketSetReadTimeout(lpAdapter,2); //设置接收到一个包后的“休息”时间
接收数据包:
PacketReceivePacket(lpAdapter, lpPacket, TRUE); //接收数据包
对数据包进行分析,以得出结论:
char *buf;
bpf_hdr *lpBpfhdr;
ET_HEADER *lpEthdr;
in_addr addr={0};
buf=(char *)lpPacket->Buffer;
lpBpfhdr=(bpf_hdr *)buf;
lpEthdr=(ET_HEADER *)(buf+lpBpfhdr->bh_hdrlen);
if(lpEthdr->eh_type==htons(0x0806)) //判断是否为ARP包
{
ARP_HEADER *lpArphdr=(ARP_HEADER*)(buf+lpBpfhdr->bh_hdrlen+sizeof(ET_HEADER));
char source_ip[20]={0},dest_ip[20]={0};
addr.S_un.S_addr=lpArphdr->arp_spa;
memcpy(source_ip,inet_ntoa(addr),strlen(inet_ntoa(addr)));
memset(&addr,0,sizeof(in_addr));
addr.S_un.S_addr=lpArphdr->arp_tpa;
memcpy(dest_ip,inet_ntoa(addr),strlen(inet_ntoa(addr)));
if(!strcmp(source_ip,ip) && !strcmp(dest_ip,"172.24.21.10")) //判断接收到的包的源IP与目的IP是否正确(字符串变量ip是从主线程传递过来的被探测机的ip)
{
if(lpArphdr->arp_opt==htons(0x0002)) //判断是否为ARP应答
{
printf("There is a Sniffer!/n");
}
}
}
 
用arp探测局域网中的主机 windows下用WinpCap发送arp数据包,探测某一ip地址的主机是否在线 立即下载

相关推荐

局域网探测主机存活局域网 主机存活 arp

采用ARP协议 探测局域网内主机存活 源代码 VC编写 采用ARP协议 探测局域网内主机存活 源代码 VC编写

利用ARP欺骗另一台电脑并偷窥

实验目的:欺骗别人的电脑和偷窥别人的屏幕实验仪器:一台pc机,VMware虚拟机实验步骤:1首先开启虚拟机,设置虚拟机里的IP,子网掩码,网管2打开terminal,输入如下指令arpspoof -i eth0 -t 172.28.15.20 172.28.15.254(欺骗172.28.15.20,告诉他我就是网关172.28.15.254)使其不能上网echo 1 &gt...

weixin_34050389的博客 282

如何将TDengine集成到Thingsboard?

1 概述 ThingsBoard是用于数据收集、处理、可视化和设备管理的开源物联网平台。它通过行业标准的物联网协议MQTT、CoAP和HTTP实现设备连接,并支持云和本地部署。 ThingsBoard迄今没有导入专业的时序数据库应用,用户可选择的只有PostgreSQL和Cassandra。虽然针对PostgreSQL引入了TimeScale插件,但由于其不是按照宽表的方式组织数据记录,TimeScale的优势根本发挥不出来。总之,这两种数据库不具备高效的数据吞吐能力。 而且,Thingsboard在

Wearable_device的博客 4765

16.2 ARP 主机探测技术

ARP (Address Resolution Protocol,地址解析协议),是一种用于将 `IP` 地址转换为物理地址(`MAC地址`)的协议。它在 `TCP/IP` 协议栈中处于链路层,为了在局域网中能够正确传输数据包而设计,由协议数据单元和对应的操作命令组成。`ARP` 既可以由操作系统处理,也可以由网卡处理。 该协议的作用是通过一个局域网上的互联网协议(IP)地址来查询对应的物理硬件地址,如数据包发送到路由器时,ARP 协议将使用嵌入在数据包中的目的 IP 地址查找对应的物理地址,路由器根据获

微软技术分享 1万+

windows局域网文件夹共享

windows局域网共享文件夹,亲测,包括可能出现的一些问题解决

yml15180824993的博客 4万+

【实战指南】基于YOLOv11的肺结节检测系统开发与优化(LUNA2016数据集)

本文提供了基于YOLOv11模型和LUNA2016数据集开发肺结节检测系统的完整实战指南。详细介绍了从环境搭建、数据预处理、模型训练与优化,到构建Web应用系统的全流程,旨在帮助开发者快速掌握医疗影像AI项目的核心开发技能。

weixin_29031057的博客 140

基于ARP协议的网络存活探测技术研究与实践

在现代计算机网络中,对局域网内设备的实时在线状态监测是至关重要的环节之一。本文将详细介绍一种基于Python Scapy库实现的ARP(Address Resolution Protocol)扫描方法,用于高效、准确地检测指定IP地址范围内的活跃主机。

正在成为 code ape 1769

如何使用apifox打包测试用例生成测试套件自动化执行

使用apifox打包测试用例生成测试套件自动化执行

weixin_55613512的博客 2886

ARP 实现主机探测(包含完整实现代码)

本文针对ARP实现主机探测进行讲解,从pcap的讲解到ARP原理详细解析,再到代码分析,最后给出了实现的源代码。

2301_81012881的博客 1315

从零到一:用STM32 FOC算法驯服无刷电机的艺术

本文详细介绍了如何使用STM32和FOC算法实现无刷电机的高性能控制。从硬件搭建、参数识别到闭环调节,一步步解析FOC算法的核心原理与调优技巧,帮助开发者掌握电机控制的关键技术,实现从零到一的精准驯服。

kkk56的博客 917

经典算法之——解决全排列问题以及详解

回溯”指的是“状态重置”,可以理解为“恢复现场”,是在编码的过程中,是为了节约空间而使用的,而在递归或者深度优先中根据需要的场合来配合回溯法可以进一步对自己的代码进行优化。, n-1, n},方向都为向左。邻位对换法是全排列生成算法中的其中一种,它的换位是双向的,通过保存数字的“方向性”来快速得到下一个排列。最后以 3 开头的全排列为[3, 1, 2], [3, 2, 1];以 1 开头的全排列为[1, 2, 3], [1, 3, 2];以 2 开头的全排列为[2, 1, 3], [2, 3, 1];

m0_68987535的博客 8794

ARP探测和ARP公告

如果 ARP 探测器没有从可能已经使用该 IP 地址的任何人那里生成响应,发起主机将认为该 IP 地址是唯一的,并将发送 ARP 公告以正式“声明”网络上的 IP 地址。目标 IP 地址已被使用,则网络上的其他主机非常不希望根据 ARP 缓存的内容无意中更新其 ARP 缓存。更新网络上的所有 ARP 缓存,而 ARP 探针会故意阻止 ARP 缓存更新,以继续防范 IP 地址冲突。地址都会创建完整的 ARP映射,网络上的主机可以在其 ARP 表中使用这对地址。这是有意为之,因为发送 ARP 探测的原因是。

weixin_45045419的博客 706

AutoSAR EcuM系列01- EcuM模块的功能概述和变体类型

在【ECU的软硬件架构】文章中我们了解ECU的功能和组成,那么ECU具体是怎么启动的呢?我们知道,AutoSAR标准架构有三层,即APPL应用层、RTE层和BSW层。而这些层又被进一步划分为更多单独的组件,如BSW层可能有80多个组件。在ECU启动时,这些组件必须相互交互,有时也必须以某种顺序交互。这些组件的启动顺序由ECU管理器模块或EcuM处理。EcuM负责整个ECU的初始化和去初始化,包括对一些系统模块如。......

1766

【网络安全 | 网络协议】ARP协议(地址解析协议)

在使用nmap时可以使用-PR指令,通过发送ARP请求包进行主机存活探测。那么这一过程的原理是什么呢?先了解什么是ARP协议。回到开头的问题,我们就可以给出答案了。当发送ARP请求包进行主机存活探测时,nmap会向目标网络广播一个ARP请求消息,其中包含要探测的IP地址。目标网络上的所有主机都会收到这个ARP请求消息。根据ARP协议的规定,只有匹配请求中IP地址的主机才会响应,其他主机会忽略该请求。如果目标网络上的主机存活,则会向nmap发送一个ARP响应消息,其中包含主机的MAC地址。

等风来 5990

[QMT量化交易小白入门]-四十四、年化收益48%的策略要兼容回测和实盘,将实盘改为定时任务的方式

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1369

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

arp 老化时间

在今天的文章中,我们将探讨一下如何对Windows Server 2008上的ARP缓存进行管理。在微软最新发布的服务器操作系统中,ARP缓存被改称为邻机缓存;尽管它相比以前的服务器版本,实际操作方式有所调整,但所提供的基本功能并无太大的变化。接下来,我们就简单了解一下什么是ARP,以及为什么它可以起到如此重要的作用。地址解析协议(ARP)属于TCP/IP协议栈的组成部分,作...

weixin_34290000的博客 4815

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

基于PING命令的主机探测

今天继续给大家介绍渗透测试相关知识,本文主要内容是基于PING命令的主机探测。 一、ping与traceroute 二、arping详解 三、netdiscover详解 四、hping详解 五、fping详解

永远是少年 1909

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

使用ARP协议探测局域网机器是否在线

为了保护自己不被局域网中的扫描器探测到,我们一般会在Windows自带的防火墙中关闭icmp协议,这样别人就无法Ping到自己,但使用arp协议却可让你无处藏身。 icmp工作在网络层,arp协议是更底层的。arp是地址转换协议,在局域网中机器之间的通话是根据物理地址(网卡Mac)识别的,而应用程序一般根据ip通讯,当我们需要与局域网中某一ip通话时,就在网上喊一嗓子:谁是x.x....

weixin_30337251的博客 611

网络——其它常用协议的学习(ARP、ICMP、Telnet、FTP、SMTP和POP3)

作者:小 琛 欢迎转载,请标明出处 文章目录ARP协议ARP协议的作用ARP的整个工作流程*ARP攻击(了解)ICMP协议TelnetFTPSMTP和POP3 ARP协议 ARP协议的作用 ARP(Address Resolution Protocol,地址解析协议)。 Arp -a可以查看当前Arp表 每一个主机在网络中都有其独有的IP地址,大多数应用程序都是根据IP地址进行通信的,但为了能够在物理网络上传送数据包,必须知道目的主机的物理地址(MAC地址),因此如何根据目的主机IP地址得到

qq_44745063的博客 2086

「python」: arp脚本的两种方法

第一种是使用arping工具: 1 #!/usr/bin/env python 2 import subprocess 3 import sys 4 import re 5 6 def arping(ipaddress = "192.168.1.1"): 7 p = subprocess.Popen("/usr/sbin/arping -c 2 ...

194

ARP扫描攻击(JAVA实现)

转载请注明: http://blog.youkuaiyun.com/HEL_WOR/article/details/50650465 前段时间翻看了点计算机网络方面的书,从DNS跳到了ARP协议后,就打算试试写一个ARP的扫描攻击程序出来,于是就有了这篇博客现在想想大学的时候我们寝室应该受到ARP扫描攻击了,因为我们寝室的一夜之间连上WIFI后都不能上网了,当时不知道对路由器做静态绑定,于是后面的时间我都是蹭的

HEL_WOR的博客 9436

金山ARP防火墙Beta版本公测正式开始

ARP攻击令很多用户苦恼,最近金山公司推出了金山ARP防火期Beta版本,并已经开始公测。 金山ARP防火墙能够双向拦截ARP欺骗攻击包,监测锁定攻击源,时刻保护局域网用户PC的正常上网数据流向,是一款是适于个人用户的反ARP欺骗保护工具! 金山ARP防火墙有什么特点? 网关动态探测+识别——识破伪造的网关地址 动态获取、并分析判断后为受保护P...

dibanque3854的博客 129

局域网内两台电脑arp -a查出来的差别很大_基础系列丨最容易被遗忘的IP和ARP知识...

网络层负责将报文从源送到目的包括TCP建立连接,也需要依靠网络层,来将这个连接请求,传递到对方。为设备提供逻辑地址,也就是IP地址主流是IPV4地址IPV4地址,为32位二进制数,长度4个字节,1字节等于8比特(位)ICMP主要用于检测网络的连通性也是面向连接对方收到我的请求后,需要发送回复ping 114.114.114.114Tracert主要用于检测,或者说跟踪,源到目的站点所经过的路径使用...

weixin_39883194的博客 534

如何探测内网存活主机

本文分享自微信公众号 - Bypass(Bypass–),作者:Bypass,侵删 如何探测内网存活主机 2020-09-25阅读 1.1K0 在渗透中,当我们拿下一台服务器作为跳板机进一步进行内网渗透时,往往需要通过主机存活探测和端口扫描来收集内网资产。 我们将主机扫描的场景大致可分为三种,1)直接在webshell下执行,通过系统自带命令或上传脚本工具进行扫描探测 ;2)通过反弹shell进行内网渗透,msf等渗透测试框架自带一些扫描模块;3)通过socks代理扫描内网(例如 proxychains+N

mingyqf的博客 3450

python 脚本之 IP地址探测

#第一种方法#!/usr/bin/env python #_*_ coding:utf8 _*_ #### 该脚本需要使用fping命令 如果没有安装需要提前安装fping #### yum install fping import os ip = "10.10.0.1/24" ips = ["10.10.0.1/24", "192.16.17.27/2...

dlm520947的博客 462

arp简介

大概了解一下ARP协议。ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写,它的作用是将IP地址转换成物理地址(就是常说的MAC地址),其详细过程参考《TCP/IP详解卷一》。协议ARP的分组格式如下: ------------------------------------------ 以太网目的地址(6个字节) 以太网源地址...

weixin_34235371的博客 102
上一篇: 一篇有独立思想的文章:IPv6为什么会失败?(下)
下一篇: 测试:你魅力与才气指数
SPS113
博客等级 码龄20年 0粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值