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

📄 438.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="317.htm">上一层</a>][<a href="439.htm">下一篇</a>]
<hr><p align="left"><small>:看白云的相关讨论. <br>

发信人: scz (小四), 信区: Socket <br>

标  题: [转载] [转寄] Re: 一个简单的网络侦听程序 (答 cloudsky) <br>

发信站: 华南网木棉站 (Mon Nov  8 17:46:45 1999), 转信 <br>

【 以下文字转载自 scz 的信箱 】 <br>

【 原文由 cloudsky.bbs@bbs.whnet.edu.cn 所发表 】 <br>

发信人: rain (八角虫), 信区: Programming <br>

标  题: Re: 一个简单的网络侦听程序 (答 cloudsky) <br>

发信站: 武汉白云黄鹤站 (Tue Aug 31 09:12:05 1999), 转信 <br>

: struct etherpacket <br>

: { <br>

:     struct ethhdr       eth; <br>

:     struct iphdr        ip; <br>

:     struct tcphdr       tcp; <br>

:     char            data[8192]; <br>

: }; <br>

: int main() <br>

: { <br>

:     struct etherpacket ep; <br>

:     struct iphdr *ip; <br>

:     struct tcphdr *tcp; <br>

:         ip=(struct iphdr *)(((unsigned long)&ep.ip)-2); <br>

                                                     ^^ <br>



:         tcp=(struct tcphdr *)(((unsigned long)&ep.tcp)-2); <br>

                                                        ^^ <br>

这里为什么不是直接用 ep.ip 和 ep.tcp,而是要先减2在转成 struct iphdr, struc <br>

t tc <br>

hdr <br>

原因是这样的:首先是本人学艺不精 :( <br>

其次是 gcc 编译时默认机器字对准,struct ethhdr 是14字节长,在 32 位机上, <br>

下一个变量就会从 16 字节开始,因此 struct iphdr 和 struct ethhdr 之间就 <br>

空出了两个字节,所以要减 2,iphdr 刚好 20 个字节,所以 tcphdr 和 iphdr 中 <br>

没有空隙,依旧是减 2。 <br>

后来我在仔细阅读过 gcc info 之后发现这样写就不用减 2 了 <br>

 struct etherpacket <br>

 { <br>

     struct ethhdr       eth; <br>

     struct iphdr        ip; <br>

     struct tcphdr       tcp; <br>

     char            data[8192]; <br>

 } __attribute__ ((packed)); <br>

该文本在 gcc2.72 的 gcc.info-9 中. <br>

cloudsky 看程序真是仔细,我贴了这么久从来没人问过这个问题, <br>

当然也许大家都懂,就咱哥俩笨,到现在才明白 :( <br>

-- <br>



                   哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 <br>

                   哈                          哈 <br>

                   哈 佛颜常笑,笑世上可笑之人 哈 <br>

                   忍 大肚能容,容天下难容之事 忍 <br>

                   忍                          忍 <br>

                   忍忍忍忍忍忍忍忍忍忍忍忍忍忍忍 <br>

※ 来源:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: 202.114.113.240] <br>

-- <br>

※ 转寄:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: 203.207.226.124] <br>

-- <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="317.htm">上一层</a>][<a href="439.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 + -