#include "stdafx.h"
#include <stdlib.h>#include <stdio.h>#include <pcap.h>void main(int argc, char **argv){ pcap_t *fp;char errbuf[PCAP_ERRBUF_SIZE];u_char packet[100];int i;pcap_if_t *alldevs;pcap_if_t *d;int inum;int j=0; /* 获得设备列表 */ if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); exit(1); } /* 打印列表 */ for(d=alldevs; d; d=d->next) { printf("%d. %s", ++j, d->name); if (d->description) printf(" (%s)\n", d->description); else printf(" (No description available)\n"); } if(j==0) { printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); return ; } printf("Enter the interface number (1-%d):",j); scanf("%d", &inum); if(inum < 1 || inum > j) { printf("\nInterface number out of range.\n"); /* 释放设备列表 */ pcap_freealldevs(alldevs); return ; } /* 跳转到已选设备 */ for(d=alldevs, j=0; j< inum-1 ;d=d->next, j++); /* 打开输出设备 */ if ( (fp= pcap_open(d->name, // 设备名 100, // 要捕获的部分 (只捕获前100个字节) PCAP_OPENFLAG_PROMISCUOUS, // 混杂模式 1000, // 读超时时间 NULL, // 远程机器验证 errbuf // 错误缓冲 ) ) == NULL) { fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", argv[1]); return; } pcap_freealldevs(alldevs); /* 假设在以太网上,设置MAC的目的地址为 1:1:1:1:1:1 */ packet[0]=255; packet[1]=255; packet[2]=255; packet[3]=255; packet[4]=255; packet[5]=255; /* 设置MAC源地址为 2:2:2:2:2:2 */ packet[6]=10; packet[7]=10; packet[8]=10; packet[9]=10; packet[10]=10; packet[11]=10;packet[12]=96;packet[13]=00; /* 填充剩下的内容 */ for(i=14;i<100;i++) { packet[i]=i%256; } /* 发送数据包 */ if (pcap_sendpacket(fp, packet, 100 /* size */) != 0) { fprintf(stderr,"\nError sending the packet: \n", pcap_geterr(fp)); return; } return;}