我正在考虑使用新的Android (4.0) VpnService接口来实现简单的数据包捕获和分析。有人知道在VpnService实现中是否可以将收到的数据包直接写入活动/默认网络设备吗?当然,要接收数据,我也必须能够从网络设备读取数据。如果可以的话,可以使用哪些API来写入网络设备?
我正在考虑使用新的Android (4.0) VpnService接口来实现简单的数据包捕获和分析。有人知道在VpnService实现中是否可以将收到的数据包直接写入活动/默认网络设备吗?当然,要接收数据,我也必须能够从网络设备读取数据。如果可以的话,可以使用哪些API来写入网络设备?
tPacketCapture创建第二个套接字连接到远程计算机以转发数据包。我使用adb shell netstat
查看了tPacketCapture
:
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 出现了两次。
除非有更好的办法,否则我也得这样做。
VpnService.Builder.establish()
获取一个ParcelFileDescriptor
并将其包装在FileInputStream
中。读取流只会不断产生字节69('E')。我正在努力找出如何正确地与文件描述符进行交互,但迄今为止没有成功。 - Paul LammertsmagetFD()
提供给JNI函数。简而言之,C代码所做的是:char buf[1024]; while (long n = read(fd, buf, 1024)) { LOGV("readFd: %s", buf); };
- Paul Lammertsma