⑴ rd是什麼意思
rd abbr. DOS命令 : 刪除空的子目;注冊營養師(Registered Dietitian);鄉村免費郵遞。
短語片語:
1.Ginsenoside Rd 人參皂甙Rd;人參皂苷Rd;人參皂甙。
2.Side Rd 輔路;
3.Main Rd 幹道;地址;
4.Ordinary Rd 一般道路;一般門路;
5.rd millennium 第3千年。
(1)javavpn連接擴展閱讀:
雙語例句:
1.By Colleen Hurley, RD, Certified Kids Nutrition Specialist The holidays are officially here, and many families celebrate the holiday season with food.
科爾林恩.赫爾利.RD,注冊兒童營養專家 節假日正式到來,許多家庭拿出食物慶祝這一節日。
2.They leaned against 4203-RD and worked through their rote of tender gestures: hand-holding, modest-mouthed kisses, a giddy lowering to the ground, me an awkward weight following them down.
他們倚靠在4203-RD上,一板一眼地做起那套溫柔把式:拉手、深淺有度的親吻、暈暈忽忽地往地上滑,我這個糟糕的重負則跟著他們倒地。
3.RD: We do not currently support SCA, but we definitely plan to.
RD:我們目前不會支持SCA,但是我們的確有這個計劃。
⑵ 通過hook connect 函數 實現 VPN功能是否可行
在android系統中,可以使用iptables控制單個應用網路訪問。在google code上有一個開源項目-droidwall就是基於iptables實現的。除了iptables可以實現控制單個應用網路訪問外,還可以通過攔截應用中的connect函數,達到控制應用訪問網路的目的。下面從幾個方面分析android應用中connect調用流程為例來實現攔截connect實現網路禁用和ip過濾。(以下分析基於4.2源碼)
1.android中網路訪問流程
1)android系統中訪問網路可以通過Socket.java、URL.java、HttpPost.java、HttpGet.java等關鍵類來訪問網路資源。通過代碼追蹤,這些類訪問網路資源最終需要通過native方式,調用linux系統下的socket函數訪問網路。在android4.2源碼中,java層訪問網路得native方法定義在源碼路徑libcore/luni/src/main/java/libcore/io/Posix.java中(4.0之前的網路系統、文件系統的native方法是獨立分開得,4.0之後組織在Posix.java中)。如下是Posix.java中的代碼片段:
public final class Posix implements Os { Posix() { } public native FileDescriptor accept(FileDescriptor fd, InetSocketAddress peerAddress) throws ErrnoException, SocketException; public native boolean access(String path, int mode) throws ErrnoException; public native void bind(FileDescriptor fd, InetAddress address, int port) throws ErrnoException, SocketException; ...... //對應linux下的connect系統調用 public native void connect(FileDescriptor fd, InetAddress address, int port) throws ErrnoException, SocketException;
2)Posix.java中的native方法實現源碼路徑libcore/luni/src/main/native/libcore_io_Posix.cpp文件中,native connect方法實現代碼片段如下:
taticvoidPosix_connect(JNIEnv*env,jobject,jobjectjavaFd,jobjectjavaAddress,jintport)
{
sockaddr_storagess;
if(!inetAddressToSockaddr(env,javaAddress,port,&ss))
{
return;
}
constsockaddr*sa=reinterpret_cast<constsockaddr*>(&ss);
(void)NET_FAILURE_RETRY(env,int,connect,javaFd,sa,sizeof(sockaddr_storage));
}
有上代碼可知,java層connect最終功能由linux系統connect函數實現。
2.so注入
so注入可以參考古河大哥牛逼的libInject(點擊這里訪問)。
3.攔截connect庫編寫
在connect中,獲取傳入的參數ip地址,根據需要把需要禁用的ip地址改為127.0.01.以下是我測試的攔截connect函數關鍵代碼:
intnew_connect(intsockfd,conststructsockaddr*addr,socklen_taddrlen)
{
LOGDD("HOOK
====>newconnect****************");
charip[128]={0};
intport=-1;
if(addr->sa_family==AF_INET)
{
structsockaddr_in*sa4=(structsockaddr_in*)addr;
inet_ntop(AF_INET,(void*)(structsockaddr*)&sa4->sin_addr,ip,128);
port=ntohs(sa4->sin_port);
LOGDD("AF_INETIP===>%s:%d",ip,port);
}
elseif(addr->sa_family==AF_INET6)
{
structsockaddr_in6*sa6=(structsockaddr_in6*)addr;
char*ipv6=NULL;
inet_ntop(AF_INET6,(void*)(structsockaddr*)&sa6->sin6_addr,ip,128);
ipv6=strstr(ip,"f:");
if(NULL!=ipv6)
{
strcpy(ip,ipv6+2);
}
port=ntohs(sa6->sin6_port);
LOGDD("af_inet6
IP===>%s:%d",ip,port);
}
else
{
returnold_connect(sockfd,addr,addrlen);
}
if(strcmp(ip,"115.23.20.178")==0)
{
LOGDD("%s
==>127.0.0.1",ip);
structsockaddr_inmy_addr;
intmy_len=sizeof(structsockaddr_in);
bzero(&my_addr,sizeof(my_addr));
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(80);
my_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
returnold_connect(sockfd,(constsockaddr*)&my_addr,sizeof(my_addr));
}
else
{
returnold_connect(sockfd,addr,addrlen);
}
}
4.攔截connect函數功效
1)禁用應用網路訪問。
2)過濾廣告ip
3)禁用定位功能