【问题标题】:What is the correct file path for a UNIX TCP Socket running on a virtualized IP?在虚拟 IP 上运行的 UNIX TCP 套接字的正确文件路径是什么?
【发布时间】:2015-03-26 13:11:07
【问题描述】:

我正在尝试为多个 IP 地址虚拟化 telnet 服务器。同时仍然能够与相同的远程服务器通信。

在虚拟 IP 上运行的 UNIX TCP 套接字的正确文件路径是什么?或者有没有办法在本地连接并忽略路由表?

我在环回上虚拟化了 IP,如下所示:

 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 ::1 prefixlen 128 
    inet 127.0.0.1 netmask 0xff000000 
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
    inet 10.10.0.24 netmask 0xff000000  
    inet 192.168.10.2 netmask 0xffffff00 
    inet 192.168.10.3 netmask 0xffffff00 
    inet 192.168.10.4 netmask 0xffffff00  
    nd6 options=1<PERFORMNUD>

路由表配置了静态路由,因此出站连接仍然可以到达预期的目的地。 (我试过关闭它,但它仍然没有帮助)

Routing tables
Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire

192.168.10.2       192.168.10.2       UH              0       75     en1
192.168.10.3       192.168.10.3       UH              0       75     en1
192.168.10.4       192.168.10.4       UH              0       75     en1

我可以确认服务器正在侦听并绑定到正确的套接字。

sudo lsof -i -n | \grep 'telnet'
Python    69212           root    6u  IPv4 0x7002eb6c7a9b50e1      0t0    TCP 192.168.10.4:telnet (LISTEN)
Python    69212           root    7u  IPv4 0x7002eb6c7db219b1      0t0    TCP 192.168.10.3:telnet (LISTEN)
Python    69212           root    8u  IPv4 0x7002eb6c4f254b51      0t0    TCP 192.168.10.2:telnet (LISTEN)

我尝试了几种不同的方式连接到本地服务器。并删除了本地服务器,以便我可以证明我在本地连接。

telnet -u /dev/tcp/192.168.10.5/23
    Trying /dev/tcp/192.168.10.5/23...
    /dev/tcp/192.168.10.5/23: No such file or directory

socat -v READLINE UNIX-CONNECT:/dev/tcp/192.168.10.5/23
    2015/01/27 11:32:39 socat[92588] E connect(6, LEN=26 AF=1 "/dev/tcp/192.168.10.5/23", 26): No such file or directory

【问题讨论】:

    标签: sockets unix tcp telnet


    【解决方案1】:

    你把事情搞混了。

    UNIX 套接字是一回事:它们使用文件系统中的对象,这些对象具有路径并且可以用它们来寻址。

    TCP/IP 套接字是另一回事。你可以对它们做同样的事情,但你用不同的方式处理它们。

    使用 telnet,你会这样做

    telnet -u 192.168.10.5
    

    和 socat 一样

    socat -v READLINE TCP:192.168.10.5:23
    

    /dev/tcp 的东西只是外壳组成的东西;它并不存在。

    【讨论】:

    • socat 版本很有魅力。当我运行telnet -u 192.168.10.5 时,我会返回192.168.10.5: ai_family not supported。在更详细地查看文档时,我需要 AF_UNIX 地址。我现在很好奇,有没有办法从 ip 和端口获取 AF_UNIX 地址?我想我希望这就是 /dev/tcp/hostname/port 的幕后发生的事情
    • @Luke 同样,没有用于 TCP/IP 连接的AF_UNIX 地址。这些是完全不同的命名空间。我不知道为什么它不适用于telnet...
    • 顺便说一句,-u 对您的 telnet 版本有什么作用?
    • BSD 风格 Forces telnet to use AF_UNIX addresses only。不过,我解决了这个问题,我使用的是相对路径(./path-to-socket),而不是套接字 $(pwd)/path_to_socket 的完全限定路径。不是 100% 确定为什么这很重要,但它现在可以使用 telnet -u
    猜你喜欢
    • 2016-05-08
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2022-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2017-05-20
    相关资源
    最近更新 更多