linux创建tun接口,linux – 带有Tun接口的I/O.

目的是让程序拦截一组IP数据包并读取其原始内容,然后在修改之后将其重新插入网络.

我的方法是基于设置Tuntap接口(Tun,具体),然后让iptables和类似的方法将所需的数据包重定向到这个隧道接口.

出于测试目的,我编写了这个简短的shell脚本来设置Tun接口并添加所需的规则.现在,我打算在我的本地机器发送的任何数据包上测试它,目的地为123.123.123.123.这是启动脚本:

# Set up the tunnel

ip tuntap add dev maintun mode tun

ifconfig maintun inet 10.10.10.1 netmask 255.255.255.0 up

# Mark packets for forwarding to tun

iptables -t mangle -A PREROUTING -d 123.123.123.123 -j MARK --set-mark 2

# Apply ClientRouter table to mark 2 as it's defined in /etc/iproute2/rt_tables

# 201 ClientRouter

ip rule add fwmark 2 table ClientRouter

# Apply gw if to ClienRouter

ip route add default via 10.10.10.1 dev maintun table ClientRouter

我开始编写一个perl脚本来从Tun设备读取,但是我立即停留在多个点上:

>在我看来,这样做的方法是让脚本本身通过调用文件句柄上的ioctl()创建接口到/ dev / net / tun,但我不确定ioctl()想要的其他参数.这引导我接下来的两点:

>我看到第二个争论的提法是TUNSETIFF.我所知道的是它必须是数字的.它要求什么?

>从我收集的内容来看,第三个争论应该是某种标志,但我还没有设法找到它们的信息.据推测,一个标志用于选择是否应该是Tun或Tap隧道.关于这个的任何信息?

当我遇到ioctl()标志时,我想退后一步问:如何以编程方式从Tun设备读取,最好是事先设置的预配置设备?

此外,如果有人发现启动脚本有任何问题,请随时喊出来.

虽然理想情况下溶剂将在perl中,但它不一定是,这只是我能阅读最简单的语言. Java也不错.不幸的是,我的C识字率甚至没有达到应有的水平.

编辑:

如果采用与Tun / Tap不同的方法允许我按照第一段中的描述进行操作,那么当然欢迎任何建议.

注意:

我来到this question并且虽然相似但它没有提供ioctl()争论的答案.然而,它表明需要进行ioctl()调用.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值