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


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

连接超时

解决思路:

 1、我们telnet xxxx 却是通的

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


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

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

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


根据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)]

三张比较关键的点

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

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

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


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

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

hostname

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

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

hosts

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



修改

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

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


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

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