双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

请求回应的icmp数据包得不到回应,都是什么原因造成的?

huntwolf huntwolf 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我用winpcap构造的原是数据包,可以检测到数据包经过发出去了,但就是没有回应!
mac 地址和ip地址经过反复验证并没错.郁闷死,兄弟姐妹们,帮帮小弟吧
谢谢先,
是不是构造数据包时有问题啊?

我把构造数据包的过程贴在下面:

void InitPack(unsigned long desIP)
{

unsigned char Icmpbuffer[sizeof(icmphdr)];
unsigned char Iphbuffer[sizeof(iphdr)];
int len=sizeof(icmphdr);
//unsigned char ethbuffer[sizeof(ehdr)];
icmphdr* pIcmph=(icmphdr*)Icmpbuffer;
iphdr* pIph=(iphdr*)Iphbuffer;
ehdr* pEth=(ehdr*)Sendbuffer;

/*****构造icmp数据包******/
pIcmph->Code=0;
pIcmph->Type=8;
pIcmph->ID=(USHORT)GetCurrentProcessId();
pIcmph->Checksum=0;
pIcmph->Seq=0;
for(int i=0;i<32;i++)pIcmph->Data[i]='A';
/***** 计算校验和****/
pIcmph->Checksum=checksum(( USHORT* )pIcmph,sizeof(icmphdr));

/******构造ip头********/
pIph->ver_ihl=(4<<4 | sizeof(iphdr)/sizeof(unsigned long));
pIph->tlen=htons(sizeof(iphdr)+sizeof(icmphdr));
pIph->ttl=128;
pIph->proto=1;
pIph->tos=0;
pIph->identification=1;
pIph->flags_fo=0;
pIph->crc=0;
char FAR name[10];
if(gethostname(name,10)!=0)AfxMessageBox("get name error");
PHOSTENT hostinfo=gethostbyname(name);
m_LocalIp = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
pIph->saddr=inet_addr(m_LocalIp);
pIph->daddr=desIP; //目的ip地址

/***** 计算校验和****/
pIph->crc=checksum(( USHORT* )pIph,sizeof(iphdr));

pEth->eh_dst[0]=0x00; //目的mac地址
pEth->eh_dst[1]=0x0b;
pEth->eh_dst[2]=0x5f;
pEth->eh_dst[3]=0xe2;
pEth->eh_dst[4]=0x3c;
pEth->eh_dst[5]=0xc6;
getmac(pEth->eh_src);
pEth->eh_type=0x0800;

memcpy(Sendbuffer,pEth,14);
memcpy(Sendbuffer+14,pIph,20);
memcpy(Sendbuffer+34,pIcmph,40);
}
//计算校验和函数
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum = 0;
while (size > 1) {
cksum += *buffer++;
size -= sizeof(USHORT);
}
if (size) {
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >> 16);

return (USHORT)(~cksum);
}
...全文
评论 8
收藏 已收藏
分享
返回顶部
huntwolf
网络编程 18,356 成员 64,161 内容