yimuniao
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2005-07-31
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2046回复:9

请问怎么把数据包的包头去掉?

楼主#
更多 发布于:2005-06-24 17:27
  client把所有外出的数据包加上了一个固定的包头,在网关需要把固定的包头给去掉,然后转发,有什么好办法吗?
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-06-25 22:18
这个需要要看你的情况,如果你的固定报头需要在路由前就被搞掉,那么你就在ip_rcv里面把这个报头去掉,如果你这个固定包头需要在路由后被搞掉,那么你就在ip_forward里面去搞掉就好了。

在Linux里面干这样的事情还是比较简单的,如果能够修改内核源码的话。
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
yimuniao
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2005-07-31
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-26 14:18
我想问一下,用memcpy,或者是memmove等方法,直接将内存的内容覆盖过去的话,会不会影响sk_buf的指针。还有就是sk_buf中的数据的存储是连续的么?它的ip头和udp头和数据在存储空间上是否连续?sk_buf中的其他指针的存储位置是什么样的?
能否不修改内核源码,直接在路由前写个加个内核模块,利用netfilter的钩子函数完成去包头的功能?
yimuniao
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2005-07-31
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-26 14:19
高手能留个msn吗?我想向您单独请教
yimuniao
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2005-07-31
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-26 14:19
我的msn:  fl_dlmu@hotmail.com
   qq:9708864
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-06-28 23:29
高手不敢当,只是看过一些Linux的协议栈代码而已。

你的问题实质是SKB_BUFF的问题,在Linux里面网络数据包放到SKB_BUFF里面的,这个东西是由两块内存组成的,一个是SKB_BUFF的自身信息,好象共240个字节,另一块就是实际的网络数据。你说的那些memcpy什么的实际就是操作第二块内存,但是在第一块内存里面,也就是那240个字节里面有一些指针,比如说以太头的地址、IP头的地址,所以如果你要修改第二块内存并且修改到这些地址,那么你就要改第一块内存了。

使用netfilter的钩子函数是可以完成的,因为在这些钩子函数里面你可能拿到SKB_BUFF的地址,这个时候你可以把第二块内存整个都换掉,所以是可以的。

给你的一点建议,搞清楚SKB_BUFF这个东西的作用和使用方法,这些问题对来说就不再是问题了。

我的MSN:monkeycsdn@hotmail.com  希望有机会和你讨论一些Linux协议栈和内核的问题,呵呵!
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
yimuniao
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2005-07-31
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-06-29 21:25
谢谢高手,现在可以对用户端的部分包进行解包
yimuniao
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2005-07-31
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-06-29 21:28
client把所有的数据包都加上一个ip包头&udp包头,我在服务器端的netfilter的NF_IP_PRE_ROUTING钩子点上加了个处理函数,感觉好像是正确了,可是连不上外面的ftp,测试的结果是 到了ftp的pwd命令之前停了,在ftp服务器端显示的结果是该用户已经认证通过,正等待下一个命令,不知道是怎么回事?
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-07-02 14:45
那估计你的感觉有问题,呵呵。从你问题看,估计是服务器的应答包出现问题,没有正确收到。

给你一点建议。这个时候你应该使用sniffer等抓包工具,详细分析连接过的每个包,看是否存在问题,只有这样才能很快的找出问题所在,祝好运!
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
yimuniao
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2005-07-31
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-07-10 13:25
重启机器就好用了
游客

返回顶部