免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2260 | 回复: 8
打印 上一主题 下一主题

[网络子系统] 修改数据包传递流程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-13 13:46 |只看该作者 |倒序浏览
大家好,请教一个问题,在虚拟机里做更改数据包流程的实验,有两个网口eth0,eth1,修改dev.c中的netif_rx_skb(),  添加如下代码
struct net *net = dev_net(skb->dev);
if (0 == strcmp("eth1", skb->dev->name)){
                skb->dev = dev_get_by_name(net, "eth0");
                dev_queue_xmit(skb);
        }

目的是使所有从eth1收到的数据包,不经过二层,三层处理,直接从eth0发出去,这样修改有什么问题吗?
修改后,重新编译内核(内核版本为3.6.6)后,只要执行ip命令,系统就崩溃。。。

论坛徽章:
0
2 [报告]
发表于 2012-11-13 14:16 |只看该作者
你这样干,包里面所有的目标地址,源地址,端口都不对

论坛徽章:
0
3 [报告]
发表于 2012-11-13 14:51 |只看该作者
目的地址,端口,都是三层之上的内容呀,我是想直接在设备无关层转发数据包,也就是在进入桥接和ip层之前,直接从另一个网口将数据包发出去,这样的话,不用修改目的地址和端口吧,而源地址也不影响包的传递,不知道我理解的对不对,呵呵回复 2# janetliu9


   

论坛徽章:
0
4 [报告]
发表于 2012-11-15 16:41 |只看该作者
1.eth1 收到的包, 如果目的地址是eth1,这个包从eth0出去理论上还是回到eth1, 所以在死循环
2.网卡在收到数据,在调用netif_rx, 或者netif_receive_skb之前会通过eth_type_trans解析protocol,同时去掉eth头,所以你给dev_queue_xmit的包是没有mac的

论坛徽章:
0
5 [报告]
发表于 2012-11-16 10:36 |只看该作者
非常感谢您的回答,请问那我想实现eth0收到的包,无条件的从eth1发出去,是不是可以将net/ethernet/eth.c 中的eth_type_trans中skb_reset_mac_header(skb)和skb_pull_inline(skb,ETH_HLEN)注释掉,然后直接将net/core/dev.c 中的netif_rx()修改为
int netif_rx(struct sk_buff *skb)
{
      struct net *net = dev_net(skb->dev);
         if (0 == strcmp("eth1", skb->dev->name)){
                skb->dev = dev_get_by_name(net, "eth0");
                dev_queue_xmit(skb);
         }
         return NET_RX_DROP;
}
可是重新编译内核后还是不行。。。
回复 4# janetliu9


   

论坛徽章:
0
6 [报告]
发表于 2012-11-16 10:47 |只看该作者
回复 5# JohnGolden


    你这样修改后eth1进来的包怎么办?

论坛徽章:
0
7 [报告]
发表于 2012-11-16 10:56 |只看该作者
其实最终是要实现eth0进来的包无条件的从eth1出去,eth1进来的包无条件的从eth0出去,这样这台linux实现的相当于连接两个同一个ip网段的两个物理网络。可以说是相当于网桥设备,但是不希望数据包进入linux的网桥通路,直接在驱动层或者驱动无关层做转发。回复 6# Modifix


   

论坛徽章:
0
8 [报告]
发表于 2012-11-16 13:03 |只看该作者
你仔细想一下, 这样做是不是会收不到任何包,还能不能执行ip之类的命令

论坛徽章:
0
9 [报告]
发表于 2012-11-22 17:11 |只看该作者
谢谢您的回复,添加了mac头后,拓扑是简单的A(eth0)——(eth1)B(eth2)——C(eth0), 现在,A去ping C,发现C收到了ARP请求,并且也作出了ARP应答,但是B的eth2口就是收不到C的ARP应答,反之依然(即C去ping A,就是单向是通的),感觉eth2好像无法发包的同时无法收包,请问这是为什么呢?回复 8# janetliu9


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP