可以使用VpnService实现来捕获和发送数据包吗?

Mik*_*ery 10 android

我正在考虑使用新的android(4.0)VpnService接口来实现简单的数据包捕获和分析的可能性.有谁知道是否可以在VpnService实现中获取您收到的数据包并将其写入活动/默认网络设备?当然,要接收数据,我必须能够从网络设备中读取数据.如果可能,可以使用哪些API写入网络设备?

Joh*_*vdH 8

tPacketCapture为远程计算机创建第二个套接字以转发数据包.我看过tPacketCapture使用adb shell netstat:

Proto Recv-Q Send-Q Local Address              Foreign Address            State 
tcp        0      0 192.168.1.126:49828        97.74.42.79:80             ESTABLISHED
tcp6       0      0 ::ffff:127.0.0.1:5000      :::*                       LISTEN
tcp6       0    522 ::ffff:10.8.0.1:50294      ::ffff:97.74.42.79:80      ESTABLISHED
tcp6       0      0 ::ffff:192.168.1.126:34210 ::ffff:74.125.141.188:5228 ESTABLISHED
tcp6       0      1 ::ffff:192.168.1.126:43379 ::ffff:74.125.224.174:80   CLOSE_WAIT
tcp6       0      1 ::ffff:192.168.1.126:60217 ::ffff:74.125.239.14:443   CLOSE_WAIT
Run Code Online (Sandbox Code Playgroud)

注意97.74.42.79:80两次.

猜猜我必须做同样的事情,除非有人有更好的主意.


pla*_*hos 6

我使用过VPN API.您有一个tun设备,您可以在其中指定路由.但阅读完之后,你需要自己处理这些数据包.通常这意味着将它们交给VPN服务器.Android SDK提供了一个简单的ToyVPNServer示例.

但是,如果没有实现VPN,很难实现简单的pcap接口(如果可能的话).

可以解析TCP/UDP标头创建一个具有相同src/dest端口/ IP的自己的套接字,在此套接字上使用protect(),以便它不通过tun0路由.由于tPacketCapture仅支持udp/tcp而不支持icmp,因此他们可能会使用此方法.

  • LOGV将在第一个零字节处停止.对于IPv4,如果TOS为0(很可能),那么你将有一个0x0字节. (2认同)