弟弟用安卓提供VpnSerivce Netty框架开发全球网络代理APP时遇到了问题。 需要使用VpnService.protect提供与最外层网络连接channel相对应的套接字。 否则,APP发送的包将转发到Tun卡,并且在无限循环中没有网络。
对于直连外联网的需求,可以反射获取与通道对应的套接字,并在Bootstrap中直接进行Protect。
publicstaticvoidprotectchannel {
try {
niosocketchannelniosocketchannel=(niosocketchannel ) channel;
socketchanneljavasocketchannel=(socket channel ) getjavasocketchannelmethod.invoke (niosocketchannel );
LocalVpnService.newInstance ().protect (javasocketchannel.socket ) );
}catch(exceptione ) {
log.d('nettysocks ',' protect channel : ' e.getmessage ) );
e .打印堆栈跟踪(;
}
}
但是,对于非直接连接的外联网,也就是说,如果要将Netty拥有的HttpProxyHandler添加到pipeline的末端,并在网络上设置Http代理,该HttpProxyHandler是如何设置的