#include <stdlib.h> #include <stdio.h> #include <pcap.h> #pragma comment(lib, "packet.lib") #pragma comment(lib, "wpcap.lib") int main(int argc, char **argv) { pcap_t *fp; char errbuf[PCAP_ERRBUF_SIZE]; u_char packet[200]; int i; /* Check the validity of the command line */ if (argc != 2) { printf("usage: %s interface", argv[0]); return 1; } /* Open the adapter */ if ((fp = pcap_open_live(argv[1], // name of the device 65536, // portion of the packet to capture. It doesn't matter in this case 1, // promiscuous mode (nonzero means promiscuous) 1000, // read timeout errbuf // error buffer )) == NULL) { fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", argv[1]); return 2; } /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */ packet[0]= 0xbd; packet[1]= 0xbd; packet[2]= 0xbd; packet[3]= 0xbd; packet[4]= 0xbd; packet[5]= 0xbd; /* set mac source to 2:2:2:2:2:2 */ packet[6]= 0x00; packet[7]= 0x0e; packet[8]= 0xc6; packet[9]= 0xd6; packet[10]= 0x80; packet[11]= 0x6c; // Eth type packet[12] = 0x86; packet[13] = 0xdd; //IPv6 header packet[14] = 0x60; packet[15] = 0x00; packet[16] = 0x00; packet[17] = 0x00; packet[18] = 0x00; packet[19] = 0x24; packet[20] = 0x3a; //next header packet[21] = 0x08; packet[22] = 0xfe; // source addr packet[23] = 0x80; packet[24] = 0x00; packet[25] = 0x00; packet[26] = 0x00; packet[27] = 0x00; packet[28] = 0x00; packet[29] = 0x00; packet[30] = 0x8c; packet[31] = 0x79; packet[32] = 0xe4; packet[33] = 0xf9; packet[34] = 0xf5; packet[35] = 0xa3; packet[36] = 0xe5; packet[37] = 0xeb; packet[38] = 0xff; // dest addr packet[39] = 0x02; packet[40] = 0x00; packet[41] = 0x00; packet[42] = 0x00; packet[43] = 0x00; packet[44] = 0x00; packet[45] = 0x00; packet[46] = 0x00; packet[47] = 0x00; packet[48] = 0x00; packet[49] = 0x00; packet[50] = 0x00; packet[51] = 0x00; packet[52] = 0x00; packet[53] = 0x01; packet[54] = 0x86; // icmp v6 header type packet[55] = 0x00; // code packet[56] = 0xe6; // check sum packet[57] = 0x43; packet[58] = 0x08; packet[59] = 0x00; packet[60] = 0x01; // router lifetime packet[61] = 0x10; packet[62] = 0x00; // reachable time packet[63] = 0x00; packet[64] = 0x00; packet[65] = 0x00; packet[66] = 0x00; // retrans timer packet[67] = 0x00; packet[68] = 0x00; packet[69] = 0x00; packet[70] = 0x03; // Option-type packet[71] = 0x04; // Option-length packet[72] = 0x40; // Option-prefix length packet[73] = 0xc0; // Option-L A packet[74] = 0xff; // Option-valid lifetime packet[75] = 0xff; // Option-valid lifetime packet[76] = 0xff; // Option-valid lifetime packet[77] = 0xff; // Option-valid lifetime packet[78] = 0xff; // Option-prefered lifetime packet[79] = 0xff; // Option-prefered lifetime packet[80] = 0xff; // Option-prefered lifetime packet[81] = 0xff; // Option-prefered lifetime packet[82] = 0x00; // Option-reserved packet[83] = 0x00; // Option-reserved packet[84] = 0x00; // Option-reserved packet[85] = 0x00; // Option-reserved packet[86] = 0xfc; // Option-prefix packet[87] = 0x00; // Option-prefix packet[88] = 0x00; // Option-prefix packet[89] = 0x00; // Option-prefix packet[90] = 0x00; // Option-prefix packet[91] = 0x00; // Option-prefix packet[92] = 0xf8; // Option-prefix packet[93] = 0x02; // Option-prefix packet[94] = 0x00; // Option-prefix packet[95] = 0x00; // Option-prefix packet[96] = 0x00; // Option-prefix packet[97] = 0x00; // Option-prefix packet[98] = 0x00; // Option-prefix packet[99] = 0x00; // Option-prefix packet[100] = 0x00; // Option-prefix packet[101] = 0x00; // Option-prefix packet[102] = 0x2c; // crc packet[103] = 0x6a; // crc packet[104] = 0x46; // crc packet[105] = 0xb5; // crc ///* Fill the rest of the packet */ //for(i=102;i<200;i++) //{ // packet[i]= (u_char)i; //} /* Send down the packet */ if (pcap_sendpacket(fp, // Adapter packet, // buffer with the packet 106 // size ) != 0) { fprintf(stderr,"\nError sending the packet: %s\n", pcap_geterr(fp)); return 3; } pcap_close(fp); return 0; }