⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 494.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="473.htm">上一层</a>][<a href="495.htm">下一篇</a>]
<hr><p align="left"><small>---------------------------------------------------------------------------- <br>

---- <br>

 cloudsky 于 00-6-19 10:24:25 加贴在 绿盟科技论坛(bbs.nsfocus.com)--UNIX系统 <br>

安全: <br>

几乎所有的tcp/ip协议族的校验和算法都是这个。区别在于各个协议需要校验的 <br>

数据不同,比如tcp/udp需要额外构造伪头标进行校验。希望下面的代码片段能解决 <br>

你的问题。这里唯一需要理解的就是构造完伪头标连带伪头标一并计算校验和。给 <br>

的例子是我以前一个udp应用中的片段,tcp的类似 <br>

void overflowTarget ( ... ) <br>

{ <br>

    u_char *            pPseudoHead   = NULL;  /* 指向伪头标的指针 */ <br>

    struct pseudoHead * ph            = NULL; <br>

    char *              rawBuffer     = NULL; <br>

    char *              udpDataBuf    = NULL; <br>

    size_t              rawBufferLen  = 0; <br>

    size_t              udpDataLen    = 0; <br>

    struct ip *         ipheader      = NULL; <br>

    struct udphdr *     udpheader     = NULL; <br>

    /* 计算UDP报文校验和,包括了UDP数据区,伪头标占用12个字节 */ <br>

    pPseudoHead         = rawBuffer + sizeof( struct ip ) - sizeof( struct p <br>

seudoHead ); <br>

    ph                  = ( struct pseudoHead * )pPseudoHead; <br>

    memset( pPseudoHead, 0, sizeof( struct pseudoHead ) + sizeof( struct udp <br>



hdr ) ); <br>

    udpheader->uh_sport = sourceAddress.sin_port; <br>

    udpheader->uh_dport = targetAddress.sin_port; <br>

    udpheader->uh_ulen  = htons( ( u_short )( sizeof( struct udphdr ) + udpD <br>

ataLen ) ); <br>

    udpheader->uh_sum   = 0; <br>

    ph->sourceIp        = sourceAddress.sin_addr; <br>

    ph->targetIp        = targetAddress.sin_addr; <br>

    ph->zero            = 0; <br>

    ph->protocol        = IPPROTO_UDP; <br>

    ph->length          = udpheader->uh_ulen; <br>

    /* 指定源和目标端口 */ <br>

    udpheader->uh_sum   = in_cksum( ( u_short * )pPseudoHead, <br>

        sizeof( struct pseudoHead ) + sizeof( struct udphdr ) + udpDataLen ) <br>

; <br>

    bzero( rawBuffer, sizeof( struct ip ) ); <br>

    ipheader->ip_v      = 4; <br>

    ipheader->ip_hl     = sizeof( struct ip ) / 4;  /* IP头长度计算所用单位为 <br>

32bit字 */ <br>

    /* 数据包长度用字节表示, 包括头的长度 */ <br>

    ipheader->ip_len    = htons( rawBufferLen ); <br>

    ipheader->ip_id     = 0;  /* 由内核去设置它,其次内核总是亲自计算IP头部校 <br>



验和 */ <br>

    /* 生存时间表示数据被丢失前保存在网络上的时间, 以秒计 */ <br>

    ipheader->ip_ttl    = 255; <br>

    ipheader->ip_p      = IPPROTO_UDP; <br>

    /* 指定源和目标IP地址 */ <br>

    ipheader->ip_src    = sourceAddress.sin_addr; <br>

    ipheader->ip_dst    = targetAddress.sin_addr; <br>

    return; <br>

}  /* end of overflowTarget */ <br>

---------------------------------------------------------------------------- <br>

---- <br>

 backend 于 00-6-19 20:50:53 加贴在 绿盟科技论坛(bbs.nsfocus.com)--UNIX系统安 <br>

全: <br>

在《用TCP/IP进行网际互连》(第一卷)的P133-135是关于UDP协议的, <br>

P151-152是关于TCP协议的。虽然里面没有详细的算法说明和代码,但它 <br>

的文字已经足够使你清楚TCP/UDP数据包校验和的计算原理了。 <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="473.htm">上一层</a>][<a href="495.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -