标签: tun

带有VpnService的Android防火墙

我正在尝试使用VpnService为BS项目实现一个简单的Android防火墙.我选择VpnService是因为它将在非root设备上运行.它将记录连接并让您过滤连接.(基于IP)

有一个应用程序这样做是有可能的.

Google Play应用商店

我做了一些研究,发现VpnService创建了一个Tun接口.而已.(没有VPN实现只是一个隧道)它允许您为此接口添加地址并添加路由.它返回一个文件描述符.您可以读取传出的包并写入传入的包.

我创建了一个VpnService派生类,我开始服务.我可以tun0使用VpnService.Builder类进行配置.当我查看mobiwol'sadb shell netcfg它的连接时,创建一个tun010.2.3.4/32地址的接口.它将所有程序包路由到此专用网络并发送到Internet.我也在尝试.创建了10.0.0.2/32地址的接口.添加了具有addRoute功能的路由.0.0.0.0/0所以据我所知,我可以从所有网络捕获所有包.(我对这个主题很新,还在学习.我在互联网上找到了作品,所以我不太确定.如果我错了,请纠正我.)

我在服务中创建了2个线程.一个从文件描述符读取并使用受保护的套接字将其写入127.0.0.1.(我不确定我是否应该读/写127.0.0.1.也许这就是问题所在.)

我分析了从文件描述符中读取的数据包.例如:

01000101    byte:69     //ipv4 20byte header
00000000    byte:0      //TOS
00000000    byte:0      //Total Length
00111100    byte:60     //Total Length
11111100    byte:-4     //ID
11011011    byte:-37    //ID
01000000    byte:64     //fragment
00000000    byte:0      //"
01000000    byte:64     //TTL
00000110    byte:6      //Protocol 6 -> TCP
01011110    byte:94     //Header checksum
11001111    byte:-49    //Header checksum
00001010    byte:10     //10.0.0.2
00000000    byte:0
00000000    byte:0
00000010    byte:2
10101101    byte:-83    //173.194.39.78 //google
00111110    byte:-62
00100111    byte:39 …
Run Code Online (Sandbox Code Playgroud)

java networking android packet-capture tun

29
推荐指数
1
解决办法
2万
查看次数

Ubuntu,删除网络TAP接口

我正在通过程序创建网络接口,以便在模拟网络(NS-3)和真正的Linux主机之间建立桥梁.因此,当"桥接"节点在NS-3中接收数据包时,真正的Linux主机会接收数据包.

但是当我再次运行程序时,它无法"擦除"或删除网络接口,因为"设备或资源正忙".

我试图关闭接口down(ifconfig <myInterface> down),重新启动网络服务(service networking restart),尝试用tunctl(tunctl -d myInterface)删除TAP接口,但即使在几小时后,我仍然无法删除或重用此接口."设备或资源很忙".

你能解释一下如何删除或删除或重用界面吗?

ubuntu networking ns-3 tun

17
推荐指数
2
解决办法
2万
查看次数

如何与Linux tun驱动程序进行交互

我很难解决这个问题 - 我正在尝试编写一个与Linux隧道驱动程序交互的程序.在最基本的层面上,我只想创建一个能够通过网络隧道传输数据的应用程序.但是,我完全不知道如何正确设置隧道驱动程序以实现此目的.

我在Ubuntu 9.04上开发,我加载了隧道驱动程序内核模块.

存在设备/dev/net/tun,但是没有/dev/tunX设备.我无法使用创建这些设备ifconfig- /sbin/ifconfig tun0 up例如,每当我运行时,我都会收到以下错误:

获取接口标志时的tun0:ERROR:没有这样的设备.

如果我尝试查看/dev/net/tun设备,则会出现以下错误:

cat:/ dev/net/tun:文件描述符处于错误状态.

尝试/dev/tunX通过一个小程序打开,基本上,简单

tun_fd = open( "/dev/tun0", O_RDWR )
Run Code Online (Sandbox Code Playgroud)

返回-1:应用程序以root身份运行,但仍无法打开此隧道设备.可以打开/dev/net/tun,但这似乎不会生成/dev/tunX要使用的新设备.

总而言之 - 如何编写希望使用Linux隧道驱动程序的应用程序?任何见解将不胜感激.

谢谢; 〜罗伯特

c driver tunnel tun

16
推荐指数
2
解决办法
3万
查看次数

如何在OSX上设置TUN接口的IP地址(没有目标地址)?

如何在OSX上为TUN接口设置IP地址?我无法弄清楚如何在不指定目标IP的情况下为我的接口设置IP地址.我不想这样做 - 我想要或多或少地在以后的某个时间点建立到任意地址的隧道.先前的问题是无益的:

  1. 一个问题答案不明确,所以我尝试按照参考.
  2. 这个问题为tun设备指定了一个指向ip地址的点,因此它有一个目的地,这正是我不想要的.

osxtuntap的页面上,它说:

ifconfig tap0 10.1.2.3 up
Run Code Online (Sandbox Code Playgroud)

我不能在OSX 10.6上使用TUN接口:

$ sudo ifconfig tun0 10.1.2.3 up
ifconfig: ioctl (SIOCAIFADDR): Destination address required
Run Code Online (Sandbox Code Playgroud)

添加网络掩码没有帮助 - OSX似乎需要目标地址:

$ ifconfig tun0 10.0.0.1/24 netmask 255.255.255.0
ifconfig: ioctl (SIOCAIFADDR): Destination address required
Run Code Online (Sandbox Code Playgroud)

对于linux,我得到它的工作原理.根据这个页面,你打开()接口,并使用ip命令,并执行此操作,我之前做过这个,没有问题:

$ ip link set tun0 up
$ ip addr add 10.0.0.1/24 dev tun0
Run Code Online (Sandbox Code Playgroud)

我想做的就是我在linux中可以做的事情.


编辑:

我正在写一个小的UDP隧道应用程序.像这样:

tun1 - > udp app#1 - > udp tunnel - > udp app#2 - > tun2

如果udp应用程序位于不同的计算机上(假设是本地和远程),我想将他们各自的tun设备与ip地址关联起来,这样我就可以通过隧道将数据包从本地发送到远程数据包了.删除计算机上的tun设备的IP地址. …

ip macos networking ifconfig tun

8
推荐指数
1
解决办法
2万
查看次数

使用Python与MAC OSX(Lion)的TUN\TAP连接

我找到了以下tun\tap示例程序,但无法使其工作:

http://www.secdev.org/projects/tuntap_udp/files/tunproxy.py

我修改了以下几行:

f = os.open("/dev/tun0", os.O_RDWR)
ifs = ioctl(f, TUNSETIFF, struct.pack("16sH", "toto%d", TUNMODE))
ifname = ifs[:16].strip("\x00")
Run Code Online (Sandbox Code Playgroud)

修改了第一行以反映驱动程序的实际位置.它原来是

f = os.open("/dev/net/tun", os.O_RDWR)
Run Code Online (Sandbox Code Playgroud)

运行后,我收到以下错误:

 sudo ./tuntap.py -s 9000
 Password:
 Traceback (most recent call last):
   File "./tuntap.py", line 65, in <module>
     ifs = ioctl(f, TUNSETIFF, struct.pack("16sH", "toto%d", TUNMODE))
 IOError: [Errno 25] Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)

我正在使用从http://tuntaposx.sourceforge.net/download.xhtml安装的最新tun\tap驱动程序

python networking tap driver tun

7
推荐指数
1
解决办法
9443
查看次数

/ dev/ppp和/ dev/net/tun之间有什么区别?

PPP和tun/tap有什么区别?两者似乎都是用于在用户空间程序上实现网络.

使用PPP,内核创建ppp%d供使用,让用户空间程序为它提供后端.
使用tun/tap,内核创建tun%d供使用,让用户空间程序为它提供后端...

将程序从使用tun/tap (我的Android设备上似乎不可用)更改为ppp 有多难?

linux ppp tun

7
推荐指数
1
解决办法
4697
查看次数

什么是TAP/TUN设备的"目标地址"?

TAP/TUN设备的"目标地址"的目的是什么?

Pytun可让您轻松设置tap/tun设备的参数:

tun = TapTunDevice(name='mytun')
tun.addr = '10.66.66.1'
tun.dstaddr = '10.66.66.2'
tun.netmask = '255.255.255.0'
tun.up()
Run Code Online (Sandbox Code Playgroud)

这样做会导致设备配置如下:

$ ifconfig mytun
mytun: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.66.66.1  netmask 255.255.255.0  destination 10.66.66.2
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 500  (UNSPEC)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
Run Code Online (Sandbox Code Playgroud)

我知道系统现在有一个IP 10.66.66.1的虚拟接口.并且可以推测,在这种情况下,TUN设备将"连接"到IP地址为10.66.66.2的(例如VPN网关)设备.

但具体是什么目的,内核是否知道这是一个"点对点"接口,以及目的地的IP地址?它是否会以某种方式影响路由,简单地配置路由表无法实现?


设置dstaddr属性会产生SIOCSIFDSTADDRioctl.

netdevice(7)手册页只是说: …

tun

7
推荐指数
1
解决办法
5237
查看次数

使用ip tuntap命令点击接口和/ dev/net/tun设备

我正在使用ip tuntap创建一个tap界面,如下所示:

$ sudo ip tuntap add mode tap tap0
Run Code Online (Sandbox Code Playgroud)

之后,我设置了接口,并使用常用的IP命令对其进行寻址.我可以看到我的界面和简单的地址ifconfig.

现在,老师告诉我,通过创建一个tap接口(在这种情况下名为tap0),我会找到一个/dev/net/tap0节点,并且我可以在其中写入或读取它.但是,我找不到它.我"只是"有一个/dev/net/tun.

我是否必须处理此tun节点,或者我应该真的有tap0节点?

linux networking network-programming tap tun

6
推荐指数
2
解决办法
2万
查看次数

Android VpnService.为什么所有流量都通过TUN设备?

我使用VpnService创建了一个TUN设备.为什么TUN接口在我的设备的其他网络接口中具有最高优先级?

更新#1

这是我配置TUN设备的方式:

mInterface = new Builder().setSession(getString(R.string.app_name))
        .addAddress("10.0.1.1", 24)
        .addRoute("0.0.0.0", 1)
        .addRoute("128.0.0.0", 1)
        .establish();
Run Code Online (Sandbox Code Playgroud)

更新#2

这是route -n 没有 TUN设备的输出:

shell@m0:/ $ busybox route -n
busybox route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.197.55.0     0.0.0.0         255.255.255.0   U     0      0        0 rmnet0
Run Code Online (Sandbox Code Playgroud)

这是的输出route -n 所述TUN设备:

shell@m0:/ $ busybox route -n
busybox route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.1.0        0.0.0.0         255.255.255.0   U     0 …
Run Code Online (Sandbox Code Playgroud)

routing android tun

6
推荐指数
1
解决办法
1300
查看次数

使用Linux :: TunTap读取数据包

我已经整理了一个perl脚本,通过Linux :: TunTap将数据包读入用户空间,这一切似乎都运行良好:

#!/usr/bin/perl
use warnings;
use strict;
use Linux::TunTap;

$tun = new Linux::TunTap(NAME => 'localtun')
or die "Couldn't connect to IF\n";

while (my $packet = $tun->get_raw()) {
        print Dumper($packet);
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是:如何将表示从tntap设备读取的原始IP数据包的字符串转换为适当的数据结构进行处理?特别是我在源,目的地和序列号之后.

显然,原始IP数据包的原始格式不是很易读.这是通过tuntap接口发送ping后的输出:

{{{?}/??8V?| !"#$%&'()*+,-./0123456ET??@@4

如何从此处继续以编程方式处理此数据?

linux perl tcp-ip tun

6
推荐指数
1
解决办法
342
查看次数

标签 统计

tun ×10

networking ×5

linux ×3

android ×2

driver ×2

tap ×2

c ×1

ifconfig ×1

ip ×1

java ×1

macos ×1

network-programming ×1

ns-3 ×1

packet-capture ×1

perl ×1

ppp ×1

python ×1

routing ×1

tcp-ip ×1

tunnel ×1

ubuntu ×1