В целях тестирования я хочу построить сервер, который прослушивает TCP-соединения для каждого порта (или, по крайней мере, на большинстве портов) на определенном интерфейсе (например, eth0). Доступ к серверу осуществляется через SSH до eth1, поэтому проблем нет. (Я не забочусь о UDP или других протоколах)Прослушивание КАЖДОГО порта на машине
Я хочу сделать особый вид обнаружения/анализа промежуточных пакетов, поэтому мне нужно иметь возможность полностью установить соединение. Наличие HTTP-соединения было бы лучшим, потому что «клиент» мог быть реализован как JS в браузере.
Я начал с простого причального сервера, но должен был понять, что причал должен появляться, по крайней мере, в потоке на каждый порт, который он слушает. Это приводит к проблемам, когда я хочу слушать несколько тысяч портов. Или есть способ обойти это?
Моя следующая попытка была использовать iptables
:
Судо Iptables -t физ -A PREROUTING -i eth0 -p TCP -j DNAT --to-назначения 127.0.0.1: 8080`
Казалось, это сработало. Он позволяет подключаться к каждому порту, и трафик направляется на локальный порт 8080, где причал слушает. Но теперь я больше не знаю, какой порт использовался клиентом. Поскольку пристань думает, что соединение установлено через порт 8080. Есть ли способ определить реальный входной порт из причала? Я мог бы отправить порт как часть HTTP-запроса, но если клиент пытается связаться с портом 1234 .., а middlebox перенаправляет его на порт 5678. Я не могу узнать, какой порт использовался.
Я также пробовал решения для пользователей, такие как socat
. Проблема была еще хуже, чем раньше. Потому что теперь пристань также видел удаленный IP как 127.0.0.1.
Или, есть ли другой способ достичь этого?
Oh and btw: У меня есть полный контроль над машиной. Поэтому я мог бы изменить ядро или что-то еще. Прямо сейчас я использую Ubuntu 14.04 LTS, но если решение нуждается в чем-то другом, я могу пойти с этим.
Я думаю, что это может быть оффтоп для переполнения стека. Считаете ли вы использование 'inetd' для присоединения скрипта к портам? – Sobrique
Я также не уверен, что я должен попробовать суперпользователь вместо stackoverflow. Но обычно stackoverflow привлекает больше участников. Я не пробовал «inetd», я посмотрю на него. – masgo
Проводная акула пассивна. Мне нужно установить соединение с полным рукопожатием TCP и т. Д. – masgo