📄 awl_checksum.c
字号:
#include <string.h>#include <stdlib.h>#include <netinet/in.h>#include <netinet/tcp.h>#include <awl_checksum.h>static unsigned short inline checksum(unsigned short *buffer,int size){ unsigned long cksum = 0; while(size>1){ cksum += *buffer++; size -= sizeof(unsigned short); } if(size){ cksum += *(unsigned char *)buffer; } cksum = (cksum >> 16) + (cksum & 0xffff); cksum += (cksum >> 16); return((unsigned short )(~cksum));}unsigned int inline tcp_checksum(unsigned long saddr, unsigned long daddr, unsigned short *buffer, int size){ unsigned long sum = 0; char *buf; struct tcp_fake_header *tfh; int tfh_len = sizeof(struct tcp_fake_header); buf = (char *)malloc(tfh_len+size); tfh = (struct tcp_fake_header *)buf; memcpy(buf+tfh_len,buffer,size); tfh->saddr = saddr; tfh->daddr = daddr; tfh->mbz = 0; tfh->proto = IPPROTO_TCP; tfh->header_len = htons(sizeof(struct tcphdr)); sum = checksum((unsigned short*)buf,tfh_len+size); free(buf); return(sum);}unsigned int inline ip_checksum(unsigned short *buffer,int size){ return(checksum(buffer,size));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -