在虚拟化IP上运行的UNIX TCP套接字的正确文件路径是什么?

时间:2015-01-27 19:42:43

标签: sockets unix tcp telnet

我试图为多个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

1 个答案:

答案 0 :(得分:0)

你正在混淆。

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

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

使用telnet,你可以

telnet -u 192.168.10.5

和socat就像

socat -v READLINE TCP:192.168.10.5:23

/dev/tcp这些东西只是由shell组成的东西;它并不存在。