RMI hostname与hosts源码原理java.net.ConnectException: Connection timed out: connect xdubbo agent解读(2)

原本只想拦截远程java进程,没想到倒是rmi访问远程出了鬼,是个什么鬼呢

java.rmi.ConnectException: Connection refused to host: 221.179.46.190; nested exception is: 

java.net.ConnectException: Connection timed out: connect



连接超时

解决思路:

 1、我们telnet xxxx 却是通的



2、异常221.179.46.190应该是虚拟的,是根据创建socket connect时找不到目标服务器,存根代理的虚拟生成的




根据jdk rt.jar源码了解到221.179.46.190整个生产流程

 Naming[registry.lookup(parsed.name)]-->客户端注册存根RegistryImpl_Stub[Remote lookup(String var1)]...注入invoke.....读对象流等.....RemoteObject[readObject(java.io.ObjectInputStream in)]--> UnicastRef[readExternal(ObjectInput var1)]  -->  LiveRef[LiveRef read(ObjectInput var0, boolean var1)] -->TCPEndpoint[TCPEndpoint readHostPortFormat(DataInput var0)]

三张比较关键的点




3, 从第2点分析得知,我们的centos hostname设置的有问题或者说hosts有问题

我们现在看看centos的实际情况

hostname



hosts




修改


看到没有,为什么我改成2个呢?  一个是k8s-node-1  一个是k8s,其实有k8s-node-1一个就足够了,这是为了说明hostname与hosts在远程发起tcp请求时的异同,相同点是hostname与hosts同域名,则socket请求鉴权会通过,若hosts其中一个不与hostname同域名,则鉴权失败就会回到连接超时直到失败,从源码socket得知是通过hostname来映射hosts的ip的


发起客户端请求,测试成功!




猜你喜欢

转载自blog.csdn.net/luozhonghua2014/article/details/80579373
今日推荐