双11狂欢大促

盲盒赢 定制羽绒服

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

— 惊喜奖品抢先看 —

IP校验和不对..

Aweiwei_ Aweiwei_ 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
关键代码..

typedef struct ip_hdr
{
/*unsigned char
version:4,
ihl:4;*/

unsigned char h_ver;
unsigned char tos;
unsigned short tot_len;
unsigned short id;
unsigned short
zero:1,
frag:1,
more_frag:1,
frag_off:13;
unsigned char ttl;
unsigned char protocol;
unsigned short checkSum;
unsigned long saddr;
unsigned long daddr;
/*The options start here. */
}IP_HEADER;

unsigned short checkSum(unsigned char * buff, int wlen)
{
unsigned long sum = 0;

if (wlen) {
unsigned long bogus;
__asm__("clc\n"
"1:\t"
"lodsl\n\t"
"adcl %3, %0\n\t"
"decl %2\n\t"
"jne 1b\n\t"
"adcl $0, %0\n\t"
"movl %0, %3\n\t"
"shrl $16, %3\n\t"
"addw %w3, %w0\n\t"
"adcw $0, %w0"
: "=r" (sum), "=S" (buff), "=r" (wlen), "=a" (bogus)
: "0" (sum), "1" (buff), "2" (wlen));
}
return (~sum) & 0xffff;
}

int IPGen(ip_hdr *hdr,unsigned long srcIP,unsigned long dstIP)
{
/*hdr->version=4;
hdr->ihl=5;//= =?*/
hdr->h_ver=(4<<4 | sizeof(ip_hdr)/sizeof(unsigned int));
hdr->tos=0;
hdr->tot_len=sizeof(ip_hdr)+sizeof(tcp_hdr);
hdr->id=0;
hdr->zero=0;
hdr->frag=0;
hdr->more_frag=0;
hdr->frag_off=0;
hdr->ttl=64;
hdr->protocol=IP_TCP;
hdr->saddr=srcIP,
hdr->daddr=dstIP;

hdr->saddr=htonl(hdr->saddr);
hdr->daddr=htonl(hdr->daddr);
hdr->tot_len=htons(hdr->tot_len);

hdr->checkSum=0;
hdr->checkSum=checkSum((char*)hdr,sizeof(ip_hdr));
return 0;
}

校验和的计算代码是从linux源码copy来的..应该不会错。
但是!
wireshark抓包永远是校验和错误的..whywhywhy....
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
Aweiwei_
网络 789 成员 368 内容