Java-如何绑定到客户端套接字的接口?

时间:2019-07-12 10:04:01

标签: java networking

我有两个网络接口,一个有线的enp1s0(具有较小的度量)和无线的wlp2s0。 对于某些连接,我希望使用无线连接。

我已经在尝试将Socket.bind绑定到该接口,但是在将有线连接用于实际SYN数据包时,它似乎仅更改了源IP地址

这是测试代码:

    NetworkInterface nif = NetworkInterface.getByName("wlp2s0"); // Wireless interface
    Enumeration<InetAddress> nifAddresses = nif.getInetAddresses();
    InetAddress address = null;
    while (nifAddresses.hasMoreElements() && address == null) {
        InetAddress currentAddress = nifAddresses.nextElement();
        if (currentAddress instanceof Inet4Address) { // I have to use IPV4
            address = currentAddress;
        }

    }

    try (Socket socket = new Socket()) {
        socket.bind(new InetSocketAddress(address, 0));
        socket.connect(new InetSocketAddress("testhost.com", 443));
    }

我希望上面的代码能够正常连接并结束,相反,它等待然后超时失败,因为在连接到有线接口时,发送了SYN数据包,但没有收到SYN / ACK来完成TCP连接。 如果我仅连接到无线连接,则可以使用。

这是两个接口都打开时的路由表:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.24.211.1    0.0.0.0         UG    100    0        0 enp1s0
0.0.0.0         172.29.176.1    0.0.0.0         UG    600    0        0 wlp2s0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp1s0
172.24.211.0    0.0.0.0         255.255.255.0   U     100    0        0 enp1s0
172.24.211.1    0.0.0.0         255.255.255.255 UH    100    0        0 enp1s0
172.29.176.0    0.0.0.0         255.255.240.0   U     600    0        0 wlp2s0
193.203.232.96  172.24.211.1    255.255.255.255 UGH   100    0        0 enp1s0

0 个答案:

没有答案