-

- 加为好友
- 发送私信
- 在线聊天
-
xmjt621
- 等级:

- 可用分等级:
- 总技术分:
- 总技术分排名:
- 结帖率:
|
| 发表于:2008-08-21 00:09:57 楼主 |
我已参考网上各种资料 搜索了三天 均找不到答案 我先用winpcap 后用libnet include,lib,link等设置都已弄好 编译无措 我有一张普通以太网卡,一张无线网卡,ADSL接入后会显示第三个网络设备 我用前两个网卡name作参数都发包正常,但用ADSL显示的网卡九无法发包 不论winpcap还是libnet都是一样,发包函数返回错误,并且errBuf里没有错误代码 经调试发现最终错误发生在winpcap的PacketSendPacket函数中(libnet的libnet_write函数最终调用的也是这个) 更奇怪的是我的普通以太网卡连着adsl modem,包发出去应该能捕捉到的,可是我用抓包软件也看不到 我怀疑根本就没能发出去 我刚学的网络编程,如果有说的不明白的地方还请见谅,恳请各位前辈指导!!! 测试代码如下:(用每块网卡对一个地址发一个SYN包,libnet的代码简洁点,只贴上这个) #include <pcap.h> #include <remote-ext.h> #include <win32/libnet.h> #include <iostream.h> #pragma comment(lib, "libnet") #pragma comment(lib, "packet") #pragma comment(lib, "wpcap") int main() { pcap_if_t *alldevs; pcap_if_t *d; char errbuf[PCAP_ERRBUF_SIZE+1]; int i = 0; /* 获得接口列表 */ if (pcap_findalldevs(&alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf); exit(1); } libnet_t *l; //int packet_size;//存放数据包长度的变量 libnet_ptag_t t;//协议块标记 char *device = NULL;//设备名字,此时为NULL u_long destination_ip = inet_addr("222.64.198.99");// 目的IP地址 u_long source_ip = 0;//源IP地址 int c; //unsigned char buf[20]; pcap_addr_t *a; /* IP addresses */ for(d= alldevs; d; d= d->next) { a=d->addresses; if (!a) { continue ; } switch(a->addr->sa_family) { case AF_INET: source_ip = ((sockaddr_in *)(a->addr))->sin_addr.s_addr; l = libnet_init( LIBNET_RAW4,//libnet类型 d->name,//网络设备 errbuf); if (l == NULL) { fprintf(stderr, "libnet_init() failed: %s", errbuf); continue ; } t = libnet_build_tcp( 7000, /* source port */ 8000, /* destination port */ 0x01010101, /* sequence number */ 0x02020202, /* acknowledgement num */ TH_SYN, /* control flags */ 512, /* window size */ 0, /* checksum */ 10, /* urgent pointer */ LIBNET_TCP_H, /* TCP packet size */ NULL, /* payload */ 0, /* payload size */ l, /* libnet handle */ 0); /* libnet id */ if (t == -1) { fprintf(stderr, "Can't build TCP header: %s\n", libnet_geterror(l)); return 1; } t = libnet_build_ipv4( LIBNET_IPV4_H + LIBNET_TCP_H, /* length */ 0, /* TOS */ 242, /* IP ID */ 0, /* IP Frag */ 64, /* TTL */ IPPROTO_TCP, /* protocol */ 0, /* checksum */ source_ip, /* source IP */ destination_ip, /* destination IP */ NULL, /* payload */ 0, /* payload size */ l, /* libnet handle */ 0); /* libnet id */ if (t == -1) { fprintf(stderr, "Can't build IP header: %s\n", libnet_geterror(l)); return 1; } /* * Write it to the wire. */ c = libnet_write(l); if (c == -1) { fprintf(stderr, "Write error: %s\n", libnet_geterror(l)); return 1; } else { fprintf(stderr, "Wrote %d byte TCP packet; check the wire.\n", c); } libnet_destroy(l); break; case AF_INET6: break; default: printf("\tAddress Family Name: Unknown\n"); break; } } pcap_freealldevs(alldevs); return 0; } 我运行的结果: Wrote 54 byte TCP packet; check the wire. Wrote 54 byte TCP packet; check the wire. Write error: |
|
|
|
100
修改
删除
举报
引用
回复
| |