#include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <net/ethernet.h> #include <netpacket/packet.h> #include <string.h> #include <net/if.h> #define SRC_MAC { 0x00,0x0C,0x29,0x6F,0x57,0xE7 }//源MAC地址 #define DEST_MAC { 0x00,0x0C,0x29,0xD3,0xD6,0xF7 }//目的MAC地址 struct arppacket { unsigned char dest_mac[ETH_ALEN];//接收方MAC unsigned char src_mac[ETH_ALEN];//发送方MAC unsigned short type; //0x0806是ARP帧的类型值 unsigned short ar_hrd;//硬件类型 - 以太网类型值0x1 unsigned short ar_pro;//上层协议类型 - IP协议(0x0800) unsigned char ar_hln;//MAC地址长度 unsigned char ar_pln;//IP地址长度 unsigned short ar_op;//操作码 - 0x1表示ARP请求包,0x2表示应答包 unsigned char ar_sha[ETH_ALEN];//发送方mac unsigned char ar_sip[4];//发送方ip unsigned char ar_tha[ETH_ALEN];//接收方mac unsigned char ar_tip[4];//接收方ip } __attribute__ ((__packed__)); int main(int argc,char *argv[]) { int fd = 0; struct in_addr s,r; struct sockaddr_ll sl; struct arppacket arp={ DEST_MAC, SRC_MAC, htons(0x0806), htons(0x01), htons(0x0800), ETH_ALEN, 4, htons(0x01), SRC_MAC, {0}, DEST_MAC, {0} }; fd = socket(AF_PACKET,SOCK_RAW,htons(ETH_P_ALL)); if (fd < 0) { printf("socket error\n"); return -1; } memset(&sl, 0, sizeof(sl)); inet_aton("192.168.11.220", &s); memcpy(&arp.ar_sip, &s, sizeof(s)); inet_aton("192.168.11.192", &r); memcpy(&arp.ar_tip, &r, sizeof(r)); sl.sll_family = AF_PACKET; sl.sll_ifindex = IFF_BROADCAST; while (1) { if (sendto(fd, &arp, sizeof(arp), 0, (struct sockaddr*)&sl, sizeof(sl)) <= 0) printf("send error\n"); else printf("send success\n"); sleep(1); } close(fd); return 0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 关于HTTP报文请求方法和状态响应码
- 使用Socket进行HTTP请求与报文讲解
- 前端必知必会HTTP请求系列(三)HTTP报文内的http信息
- 详解 HTTP 报文(二):Web 容器是如何解析 HTTP 报文的
- 报文批量处理方法简介
- 详解 http 报文
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。