求解决方案(关于用C语言实现IP协议功能)

iheshi 2005-01-20 04:32:41
偶现在做一个和IP协议相关的东西。现在求一个程序片断。功能如下:
IP分组的封装模块:按照IP分组的格式,封装处理数据并填加相应头信息。

我求大概思路。伪代码也可(最好是C代码)。谢谢啦。主要是我想理清思路。

附:
一些概念:
IP协议是在网络层的协议.它主要完成数据包的发送作用. 下面这个表是IP4的数据包格式

0 4 8 16 32
--------------------------------------------------
|版本 |首部长度|服务类型| 数据包总长 |
--------------------------------------------------
| 标识 |DF |MF| 碎片偏移 |
--------------------------------------------------
| 生存时间 | 协议 | 首部较验和 |
------------------------------------------------
| 源IP地址 |
------------------------------------------------
| 目的IP地址 |
-------------------------------------------------
| 选项 |
=================================================
| 数据 |
-------------------------------------------------

下面我们看一看IP的结构定义

struct ip
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int ip_hl:4; /* header length */
unsigned int ip_v:4; /* version */
#endif
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned int ip_v:4; /* version */
unsigned int ip_hl:4; /* header length */
#endif
u_int8_t ip_tos; /* type of service */
u_short ip_len; /* total length */
u_short ip_id; /* identification */
u_short ip_off; /* fragment offset field */
#define IP_RF 0x8000 /* reserved fragment flag */
#define IP_DF 0x4000 /* dont fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
u_int8_t ip_ttl; /* time to live */
u_int8_t ip_p; /* protocol */
u_short ip_sum; /* checksum */
struct in_addr ip_src, ip_dst; /* source and dest address */
};
...全文
219 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bingbing1981 2005-01-21
  • 打赏
  • 举报
回复
up
dongyuanzhang 2005-01-21
  • 打赏
  • 举报
回复
tcp/ip的c源码书有几本阿!(嵌入式)

网上也可以找找!
FireEmissary 2005-01-21
  • 打赏
  • 举报
回复
去网上搜搜sniffer之类的工具吧,有些有代码
iheshi 2005-01-21
  • 打赏
  • 举报
回复
算了。偶自己再想想了。。。米人理偶?
iheshi 2005-01-21
  • 打赏
  • 举报
回复
我在想,实在没办法了,就只有去查Linux的原代码了。不好办啊。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧