请问如何使用winpcap发送TCP报文?

Paristam 2007-09-26 07:19:43
//填充IP首部
ipHeader.h_verlen=(4<<4 | sizeof(ipHeader)/sizeof(unsigned long));
// ipHeader.tos=0;
ipHeader.total_len=htons(sizeof(ipHeader)+sizeof(tcpHeader));
ipHeader.ident=1;
ipHeader.frag_and_flags=0;
ipHeader.ttl=128;
ipHeader.proto=IPPROTO_TCP;
ipHeader.checksum=0;
ipHeader.sourceIP=inet_addr("61.135.150.93"); //本地IP
ipHeader.destIP=inet_addr(m_ipaddr); //目标IP

//填充TCP首部
tcpHeader.th_dport=htons(80); //端口80
tcpHeader.th_sport=htons(SOURCE_PORT);//源端口号
tcpHeader.th_seq=htonl(0x12345678);
tcpHeader.th_ack=0;
tcpHeader.th_lenres=(sizeof(tcpHeader)/4<<4|0);
tcpHeader.th_flag=2;//修改这里来实现不同的标志位探测,2是SYN,1是FIN,16是ACK探测 等等
tcpHeader.th_win=htons(512);
tcpHeader.th_urp=0;
tcpHeader.th_sum=0;

psdHeader.saddr=ipHeader.sourceIP;
psdHeader.daddr=ipHeader.destIP;
psdHeader.mbz=0;
psdHeader.ptcl=IPPROTO_TCP;
psdHeader.tcpl=htons(sizeof(tcpHeader));

memcpy(szSendBuf, &psdHeader, sizeof(psdHeader));
memcpy(szSendBuf+sizeof(psdHeader), &tcpHeader, sizeof(tcpHeader));
tcpHeader.th_sum=checksum((USHORT *)szSendBuf,sizeof(psdHeader)+sizeof(tcpHeader));

memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));
memcpy(szSendBuf+sizeof(ipHeader), &tcpHeader, sizeof(tcpHeader));
memset(szSendBuf+sizeof(ipHeader)+sizeof(tcpHeader), 0, 4);
ipHeader.checksum=checksum((USHORT *)szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader));

memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));

////////////////////////////////////////////////////////////////////

我这样构造报文后调用pcap_sendpacket函数也发送成功了。
但是用监控软件看不到网卡有发送的报文。
该如何解决????
...全文
366 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang_fujiang 2008-12-18
  • 打赏
  • 举报
回复
???
还没揭帖麽??
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
都是很好的建议! 值得学习
meiZiNick 2008-04-30
  • 打赏
  • 举报
回复
我也想了解,谢谢LZ.
vital123 2008-04-12
  • 打赏
  • 举报
回复
DING
skyful123 2008-04-09
  • 打赏
  • 举报
回复
UP
wuyuncxl 2008-03-27
  • 打赏
  • 举报
回复
不管你填什么,pcap_sendpacket应该都可以发出去的。
应该是你的监控软件不对。
你用WireShark抓包看看。
greatws 2008-03-19
  • 打赏
  • 举报
回复
包头不正确,或者是没有用底层抓包软件,建议使用sniffer
ripplewizard 2008-03-19
  • 打赏
  • 举报
回复
是否缺少以太报头
captain_x 2008-01-16
  • 打赏
  • 举报
回复
你的什么监控软件?
装在接收端的还是在你自己机器的?
先看一下接收端有没有收到包?
如果没有,要看是用什么监控软件,很可能是ls说的原因
那样的话你就要抓个正常的包,看看你的和正常的有什么区别了。
Yofoo 2008-01-16
  • 打赏
  • 举报
回复
pcap_sendpacket 缓冲区中的数据将不被内核协议处理, 监控软件看不到正常
lllxy 2008-01-16
  • 打赏
  • 举报
回复
先抓包看看你发出去的包与正常的包有什么不同,一个一个对,应该不难。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧