fangtoby / ArpFlood

Arp Flood Send Tools

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

#基础
#c语言实现mac帧
#功能
#选择创建类型 eth 0/1 | arp | eth_arp
#输入目标mac 地址
#输入源mac地址 实现mac地址伪造,是目标无法返还获取
#输入目标ip 源ip
#填充传输数据
# arp 50 / eth 64
#优化创建效率
#创建arp攻击工具,迫使对方路由器重启或是网站瘫痪
#路由器重启之后,通过airport抓包工具,抓取有效登陆包,实现wifi密码破解
#网站瘫痪,是对方网站无法服务
/*
   根据rfc894的说明,以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步码 + 1字节帧开始定界符 + 6字节的目的MAC + 6字节的源MAC + 2字节的帧类型 + 1500 + 4字节的FCS。
   按照上述,最大帧应该是1526字节,但是实际上我们抓包得到的最大帧是1514字节,为什么不是1526字节呢?
   原因是当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和出错,就丢弃此帧。如果校验和正确,就判断帧的目的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,就将帧交给“设备驱动程序”做进一步处理。这时我们抓包的软件才能抓到数据,因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据,其最大值是6 + 6 + 2 + 1500 = 1514。
   以太网规定,以太网帧数据域部分最小为46字节,也就是以太网帧最小是 6 + 6 + 2 + 46 + 4 = 64。除去4个字节的FCS,因此,抓包时就是60字节。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充以满足数据帧长不小于64 字节。由于填充数据是由MAC子层负责,也就是设备驱动程序。不同的抓包程序和设备驱动程序所处的优先层次可能不同,抓包程序的优先级可能比设备驱动程序更高,也就是说,我们的抓包程序可能在设备驱动程序还没有填充不到64字节帧的时候,已经捕获了数据。因此不同的抓包工具抓到的数据帧的大小可能不同。(比如,wireshark抓到的可能没有填充数据段,而sniffer抓到的就有填充数据段)

   查看网络接口MTU的方法:
   Windows下,在命令提示符下输入netstat -e -v
   FreeBSD下,输入netstat -i
 */
------------------------------------------  
以太网目的地址(6个字节)  
以太网源地址(6个字节)  
帧类型(ARP = 0806)(2个字节)  
------------------------------------------  
硬件类型(Ethernet=01)(2个字节)  
协议类型(IPv4=0800)(2个字节)  
硬件地址长度(1个字节)  
协议地址长度(1个字节)  
OP操作选项(ARP request=01,ARP reply=02)(2个字节)  
发送端以太网地址(6个字节)  
发送端IP地址(4个字节)  
目的以太网地址(6个字节)  
目的IP地址(4个字节)  
--------------------------------------------  

1> libpcap 

libpcap是一个网络数据包捕获函数库,功能非常强大,Linux下著名
的tcpdump就是以它为基础的。我们可以利用它来完成自己的sniffer。

linux_sockets.c

cc -o linux_sockets.c -lpcap -o linux linux_sockets

wget -c http://www.tcpdump.org/release/libpcap-1.5.3.tar.gz

tar zxvf libpcap-1.5.3.tar.gz

cd libpcap-1.5.3.tar.gz  

libpcap dependent( 
		flex: yum -y install flex
		bison: yum -y install bison
		yum install -y libpcap libpcap-devel
		)

./configure

make && make install

2> Example C

http://blog.chinaunix.net/uid-16813896-id-5086439.html

http://blog.chinaunix.net/uid-16813896-id-5087846.html

http://blog.csdn.net/yueguanghaidao/article/details/7663489

http://blog.chinaunix.net/uid-20698826-id-3155563.html

目标
	利用AF_PACKET 套接字发送一个任意的以太网帧
背景
	以太网是一个链路层协议。大多数网络程序员关注网络栈的传输层及以上,所以不需要直接处理以太网帧,但是某些场景下关注传输层以下也是有必要的。如:
	1)实现网络协议栈里面没有内置的以太网协议类型
	2)为测试目的,产生一个畸形或者其它非常规帧
应用场景
	假设你希望发送一个目的IP地址为192.168.0.83的ARP request报文。这个请求报文是以广播mac地址从eth0口发出
方法概要
	1. 选择需要的以太网类型
	2. 创建一个AF_PACKET套接字
	3. 决定使用的以太网接口的索引值
	4. 构造目的地址
	5. 发送以太网帧

3> 套接字的发送 send/sendto/sendmsg系统调用

	功能描述:
	发送消息。send只可用于基于连接的套接字,send 和 write唯一的不同点是标志的存在,当标志为0时,send等同于write。sendto 和 sendmsg既可用于无连接的套接字,也可用于基于连接的套接字。除了套接字设置为非阻塞模式,调用将会阻塞直到数据被发送完。

	用法: 
	#include <sys/types.h>
	#include <sys/socket.h>

	ssize_t send(int sock, const void *buf, size_t len, int flags);
	ssize_t sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
	ssize_t sendmsg(int sock, const struct msghdr *msg, int flags);

	参数:  
	sock:索引将要从其发送数据的套接字。
	buf:指向将要发送数据的缓冲区。
	len:以上缓冲区的长度。
	flags:是以下零个或者多个标志的组合体,可通过or操作连在一起

	MSG_DONTROUTE:不要使用网关来发送封包,只发送到直接联网的主机。这个标志主要用于诊断或者路由程序。
	MSG_DONTWAIT:操作不会被阻塞。
	MSG_EOR:终止一个记录。
	MSG_MORE:调用者有更多的数据需要发送。
	MSG_NOSIGNAL:当另一端终止连接时,请求在基于流的错误套接字上不要发送SIGPIPE信号。
	MSG_OOB:发送out-of-band数据(需要优先处理的数据),同时现行协议必须支持此种操作。

About

Arp Flood Send Tools

License:GNU General Public License v3.0


Languages

Language:C 99.5%Language:Shell 0.5%