为了测试目的,我想建立一个服务器,监听某个接口(例如eth0)上每个端口(或至少大部分端口)的TCP连接。通过SSH访问eth1可以访问该服务器,所以没有问题。(我不关心UDP或其他协议)
我想进行一种特殊的中间件检测/分析,因此我需要能够完全建立连接。具有HTTP连接将是最好的选择,因为“客户端”可以在浏览器中作为JS实现。
我开始使用简单的jetty服务器,但必须意识到jetty需要为其侦听的每个端口生成至少一个线程。当我想要监听几千个端口时,这会导致问题。 或者是否有办法绕过这个问题?
我的下一个尝试是使用iptables:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp -j DNAT --to-destination 127.0.0.1:8080
它似乎有效。它允许连接到每个端口,并将流量路由到jetty侦听的本地端口8080。但现在我不再知道客户端使用的端口。因为jetty认为连接是通过端口8080建立的。 是否有一种方法可以从jetty确定真正的入站端口?我可以将端口作为HTTP请求的一部分发送,但如果客户端尝试联系端口1234 ..并且中间件将其重定向到端口5678 ..我无法知道使用了哪个端口。
我还尝试了像socat这样的用户空间解决方案。问题比以前更糟,因为现在jetty也将远程IP视为127.0.0.1。
或者,有另一种方法可以实现这一点吗?
哦,顺便说一下:我完全控制这台机器。因此,我可以更改内核或需要的任何内容。现在我使用Ubuntu 14.04 LTS,但如果解决方案需要其他东西,我可以采用该方案。
我想进行一种特殊的中间件检测/分析,因此我需要能够完全建立连接。具有HTTP连接将是最好的选择,因为“客户端”可以在浏览器中作为JS实现。
我开始使用简单的jetty服务器,但必须意识到jetty需要为其侦听的每个端口生成至少一个线程。当我想要监听几千个端口时,这会导致问题。 或者是否有办法绕过这个问题?
我的下一个尝试是使用iptables:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp -j DNAT --to-destination 127.0.0.1:8080
它似乎有效。它允许连接到每个端口,并将流量路由到jetty侦听的本地端口8080。但现在我不再知道客户端使用的端口。因为jetty认为连接是通过端口8080建立的。 是否有一种方法可以从jetty确定真正的入站端口?我可以将端口作为HTTP请求的一部分发送,但如果客户端尝试联系端口1234 ..并且中间件将其重定向到端口5678 ..我无法知道使用了哪个端口。
我还尝试了像socat这样的用户空间解决方案。问题比以前更糟,因为现在jetty也将远程IP视为127.0.0.1。
或者,有另一种方法可以实现这一点吗?
哦,顺便说一下:我完全控制这台机器。因此,我可以更改内核或需要的任何内容。现在我使用Ubuntu 14.04 LTS,但如果解决方案需要其他东西,我可以采用该方案。
inetd
将脚本附加到端口上吗? - Sobriqueinetd
,我会去看一下它。 - masgo