当前位置:  技术问答>linux和unix

关于接收端对TCP报文校验和的处理

    来源: 互联网  发布时间:2015-08-05

    本文导语:  我用以下的函数对接收到的TCP报文校验和进行处理 struct pseudo_tcphdr {      struct in_addr ip_src;      struct in_addr ip_dst;      u_char zero;      u_char protocol;      u_short len; }; u_short tr_cksum (u_short * addr, int...

我用以下的函数对接收到的TCP报文校验和进行处理

struct pseudo_tcphdr
{
     struct in_addr ip_src;
     struct in_addr ip_dst;
     u_char zero;
     u_char protocol;
     u_short len;
};


u_short tr_cksum (u_short * addr, int len, struct in_addr sip, struct in_addr dip, u_char protocol)
{
     register int nleft = len;
     register int sum = 0;
     register u_short * w;
     u_short answer = 0;
     struct pseudo_tcphdr pseudo_hdr;

     pseudo_hdr.ip_src.s_addr = sip.s_addr;
     pseudo_hdr.ip_dst.s_addr = dip.s_addr;
     pseudo_hdr.zero = 0;
     pseudo_hdr.protocol = protocol;
     pseudo_hdr.len  = htons (len);

     w = (u_short *) &pseudo_hdr;
     sum += *w++; sum += *w++; sum += *w++;
     sum += *w++; sum += *w++; sum += *w++;

     w = addr;
     while (nleft > 1)
     {
           sum += *w++;
           nleft -= 2;
     }

     if (nleft == 1)
     {
           *(u_char *)(&answer) = *(u_char *)w;
           sum += answer;
     }

     sum = (sum >> 16) + (sum & 0XFFFF);
     sum += sum >>16;
     answer = ~sum;
     return answer;
}

      ....
     while (1)
     {
           if ((cc = recvfrom (receiversd, buf, buflen, 0, (struct sockaddr *) &sock, &socklen)) > 0)
           {
                 cc -= ethhdrlen;
                 pip = (struct ip *) (buf + ethhdrlen);
                 iphdrlen = pip->ip_hl 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux怎样将网卡接收到的数据包交给不同模块处理
  • 请问:signal(), sigaction()函数会不会使自已所有的进程挂起啊,(这样就等接收各种信号,进行一些处理工作啊)
  • 服务器并发接收文件的处理方法
  • 求思路:linux C下多线程接收数据如何进行存储再统一处理
  • [请教内核高手]内核在何处处理接收到的信号
  • 『高分』如何实现串口发送数据同时处理接收数据(C/C++)
  • socket发送端、接收端同一机器,kill掉接收端进程,发送端也被kill?
  • 如何知道接收到的广播包是从哪个网络端口接收到的?
  • 求助:UDP编程,无法接收广播数据包 iis7站长之家
  • 发出SIGUSR1命令后,接收进程怎样定义接收后的动作
  • 设计一个嵌入式透明网关,从eth0接收到的数据发送到eth1,从eth0接收到的数据转发到eth1,用原始套接字做的,但是eth0接收到eth1的数据又发给了eth1,这样在两者之间形成循环,怎么办?
  • 在装有uclinux板中,怎么读取红外线接收器 接收到的数据
  • postfix 在内网可以正常接收与发送邮件,但向局外,不能接收与发送
  • sendmail,内部发送接收可以,当用外部的域名,无法发送和接收,如163账号。
  • 如何判断包已经接收完?
  • socket 接收数据问题
  • 红外设备发送接收程序设计
  • 如果测试开发板每秒接收到的最大数据量?
  • 如何让程序接收底层数据?
  • 怎么实现Windows和Linux之间数据的接收发送
  • 关于串口接收的问题,一直很疑惑……
  • Linux下怎么用socket接收zip文件流?怎么把zip文件读成流?
  • 请问如何清除UDP接收缓存?????????????
  • 关于实时信号的传送,接收问题。
  • FTP接收文件的问题
  • 求助:UDP编程,无法接收广播数据包


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3