我正在考虑使用新的android(4.0)VpnService接口来实现简单的数据包捕获和分析的可能性。有谁知道是否可以在VpnService实现中获取您收到的数据包并将其写入活动/默认网络设备?当然,要接收数据,我必须能够从网络设备中读取数据。如果可能,可以使用哪些API写入网络设备?
答案 0 :(得分: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
注意97.74.42.79:80两次。
猜猜除非有人有更好的主意,否则我必须这样做。
答案 1 :(得分:6)
我使用过VPN API。您有一个tun设备,您可以在其中指定路由。但阅读完之后,你需要自己处理这些数据包。通常这意味着将它们交给VPN服务器。 Android SDK提供了一个简单的ToyVPNServer示例。
但是,如果没有实现VPN,那么简单的类似pcap的接口很难(甚至可能)实现。
您可以解析TCP / UDP标头创建一个具有相同src / dest端口/ ip的自己的套接字,在此套接字上使用protect(),以便它不通过tun0路由。由于tPacketCapture仅支持udp / tcp而不支持icmp,因此可能会使用此方法。