📄 498.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="499.htm">下一篇</a>]
<hr><p align="left"><small>发信人: scz (小四), 信区: Security <br>
标 题: 计算tcp校验和的例子 <br>
发信站: 武汉白云黄鹤站 (Wed Jul 26 16:43:29 2000), 站内信件 <br>
这些东西总有人问,似乎每一拨学习socket编程的都要问一次, <br>
不废话了,给个可用的solaris下的计算例子算了: <br>
int sendSyn ( int sendSocket, u_long sourceIp, u_short sourcePort, u_long se <br>
qNum <br>
, struct sockaddr_in * dest ) <br>
{ <br>
u_char netPacket[ IPTCPSIZE ]; <br>
struct ip * iph; <br>
struct tcphdr * tcp; <br>
u_char * pPseudoHead; /* 指向伪头标的指针 */ <br>
u_char pseudoHead[12 + sizeof(struct tcphdr)]; /* 伪头标占12字 <br>
节 * <br>
/ <br>
u_short tcpHeadLen; /* 网络字节顺序 */ <br>
memset( netPacket, 0, IPTCPSIZE ); <br>
iph = ( struct ip * )netPacket; <br>
iph->ip_hl = 5; <br>
iph->ip_v = 4; <br>
iph->ip_tos = 0; <br>
iph->ip_len = htons( IPTCPSIZE ); <br>
iph->ip_id = htons( 2600 + ( rand() % 32768 ) ); /* 随机产生ip- <br>
>id <br>
*/ <br>
iph->ip_off = 0; <br>
iph->ip_ttl = 255; <br>
iph->ip_p = IPPROTO_TCP; <br>
iph->ip_sum = 0; /* 内核总是亲自计算IP头部校验和 */ <br>
iph->ip_src.s_addr = sourceIp; <br>
iph->ip_dst = dest->sin_addr; <br>
tcpHeadLen = htons( sizeof( struct tcphdr ) ); /* 网络字节顺序 <br>
*/ <br>
tcp = (struct tcphdr *)( netPacket + sizeof( struct ip ) <br>
); <br>
tcp->th_sport = htons( sourcePort ); <br>
tcp->th_dport = htons( dest->sin_port ); <br>
tcp->th_seq = htonl( seqNum ); <br>
tcp->th_ack = 0; <br>
tcp->th_x2 = 0; <br>
tcp->th_off = 5; <br>
tcp->th_flags = TH_SYN; <br>
tcp->th_win = htons( 10052 ); <br>
tcp->th_sum = 0; <br>
tcp->th_urp = 0; <br>
pPseudoHead = pseudoHead; <br>
memset( pPseudoHead, 0, 12 + sizeof( struct tcphdr ) ); <br>
memcpy( pPseudoHead, &( iph->ip_src ), 8 ); <br>
pPseudoHead += 9; /* 有一个字节用做对齐 */ <br>
memcpy( pPseudoHead, &( iph->ip_p ), 1 ); <br>
pPseudoHead++; <br>
memcpy( pPseudoHead, &tcpHeadLen, 2 ); <br>
pPseudoHead += 2; <br>
memcpy( pPseudoHead, tcp, sizeof( struct tcphdr ) ); <br>
tcp->th_sum = in_cksum( ( u_short * )pseudoHead, sizeof( struct t <br>
cphd <br>
r ) + 12 ); <br>
return( sendto( sendSocket, netPacket, IPTCPSIZE, 0, <br>
( struct sockaddr * )dest, sizeof( struct sockaddr_in ) ) ); <br>
} /* end of sendSyn */ <br>
-- <br>
也许有一天,他再从海上蓬蓬的雨点中升起, <br>
飞向西来,再形成一道江流,再冲倒两旁的石壁, <br>
再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... <br>
※ 来源:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: 203.207.226.124] <br>
</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="473.htm">上一层</a>][<a href="499.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 + -