虚拟 IP 上 UNIX TCP 套接字 运行 的正确文件路径是什么?
What is the correct file path for a UNIX TCP Socket running on a virtualized IP?
我正在尝试为多个 IP 地址虚拟化一个 telnet 服务器。同时仍然能够与相同的远程服务器通信。
虚拟 IP 上 UNIX TCP 套接字 运行 的正确文件路径是什么?或者有没有办法在本地连接并忽略路由 tables?
我已经虚拟化 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>
路由table配置了静态路由,这样出站连接仍然可以到达预期的目的地。 (我试过关掉它还是没用)
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
你把事情搞混了。
UNIX 套接字是一回事:它们使用文件系统中的对象,这些对象具有路径并且可以用它们寻址。
TCP/IP 套接字是另一回事。你可以对它们做同样的事情,但你对它们的处理方式不同。
使用 telnet,您可以
telnet -u 192.168.10.5
使用 socat 就像
socat -v READLINE TCP:192.168.10.5:23
/dev/tcp
的东西只是shell编出来的东西;它并不真正存在。
我正在尝试为多个 IP 地址虚拟化一个 telnet 服务器。同时仍然能够与相同的远程服务器通信。
虚拟 IP 上 UNIX TCP 套接字 运行 的正确文件路径是什么?或者有没有办法在本地连接并忽略路由 tables?
我已经虚拟化 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>
路由table配置了静态路由,这样出站连接仍然可以到达预期的目的地。 (我试过关掉它还是没用)
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
你把事情搞混了。
UNIX 套接字是一回事:它们使用文件系统中的对象,这些对象具有路径并且可以用它们寻址。
TCP/IP 套接字是另一回事。你可以对它们做同样的事情,但你对它们的处理方式不同。
使用 telnet,您可以
telnet -u 192.168.10.5
使用 socat 就像
socat -v READLINE TCP:192.168.10.5:23
/dev/tcp
的东西只是shell编出来的东西;它并不真正存在。