![两个应用程序必须绑定到同一端口](https://linux22.com/image/96291/%E4%B8%A4%E4%B8%AA%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%BF%85%E9%A1%BB%E7%BB%91%E5%AE%9A%E5%88%B0%E5%90%8C%E4%B8%80%E7%AB%AF%E5%8F%A3.png)
我有两个应用程序使用相同的 TCP 端口(和相同的接口)作为监控控制台,而不是应用程序的主端口。我对使用该端口不感兴趣,并且我无法更改 SO_REUSEADDR 或更改端口的源代码。
如何才能让这两个应用程序在同一个操作系统上运行?
答案1
如果内核允许这样做,它将无法知道哪个传入连接应该连接到哪个应用程序。
您应该让应用程序绑定到不同的 IP。大多数应用程序都可以执行此操作(但大多数应用程序也允许更改其端口...)
如果应用程序不允许这样做,我会在不同的网络堆栈上运行它们(两个不同的物理机,或者虚拟机,也许是docker)。
答案2
我自己没有测试过这个,但是对于 Linux,你可以为你的 NIC 设置两个不同的 IP 并使用这个bindhack
:
http://www.ryde.net/code/bind.c.txt
否则,可以使用十六进制编辑器更改二进制文件中的硬编码端口号。反汇编或在调试器中运行可能有助于找到更改它的正确位置。