LINUX.ORG.RU

Определить TCP порт для удаленного клиента.

 , ,


0

1

Приветствую!

Название написано довольно ненормально, но как сформулировать задачу в 1 предложении я не знаю.

Ситуация: Есть сервер, который открывает TCP. Открывать он может например 0.0.0.0:12345, 0.0.0.0:0, :::55555, 192.168.1.0:23568, 127.0.0.1:0 и так далее. То есть любой.

Теперь есть клиент, который «приходит» к серверу мультикаст-запросом и спрашивает у него порты, к которым он может присосаться.

И вот тут у меня затык и тупняк.

Как мне узнать, какие именно TCP-точки подходят данному клиенту. Адрес клиента я, само-собой, знаю. Знаю, так же, все открытые TCP с адресами и портами.

Отдавать ему все открытые порты не очень хорошая идея, потому как потом ему придется их перебирать, чего я и хочу избежать. Можно это как-то переносимым (по крайней мере linux, *bsd, ...) способом сделать? Джва дня уже парюсь...



Последнее исправление: seryoga (всего исправлений: 1)

обычно сервер садят на заранее оговоренный порт и на него и подключаются
почему возник вопрос ?

x905 ★★★★★
()

Что за клиент-то? А то мало ли, вдруг еще окажется, что самодельный upnp получится.

anonymous
()
Ответ на: комментарий от x905

Ну вот сервер умеет менять свой порт, может даже в процессе работы переоткрыться с другими значениями.

Но тут даже не в порту дело, а в правильной паре адрес:порт

открыто например:

192.168.1.3:12345
192.168.3.0:12346
127.0.0.1:23435
10.10.1.0:45678

приходит клиент с адресом, например, 192.168.2.100. Очевидно, что ему подходят первые 2, а остальные не подходят совсем. Причем это «очевидно» только тогда, когда знаешь, что маска у подсети 16, а не 24, например.

Вот я и хочу узнать если ли возможность как-то понять, исходя из инфы об адресе клиента, если ли для него доступная точка или же его следует отправить в гудок?

seryoga
() автор топика
Ответ на: комментарий от anonymous

да мои и клиент и сервер.

Оч похоже на upnp, да, но там все более очевидно. Там, если память не изменят, просто отзывается служба и клиент просто пытается соединиться с соответствующим адресом:портом. То есть сервис обычно открыт либо для всех (0.0.0.0), либо настройкой только в локальную сеть. Как-то так и у меня сейчас все работает.

seryoga
() автор топика
Ответ на: комментарий от Iron_Bug

Нет, все не так. Порт один (два, три), но клиенты его не знают.

seryoga
() автор топика
Ответ на: комментарий от seryoga

Ну а какая необходимость в самопале?

Есть подозрение, что касается архитектуры ботнета, это демотивирующий фактор.. Вы не могли бы развeять сомнения?

anonymous
()
Ответ на: комментарий от seryoga

Но тут даже не в порту дело, а в правильной паре адрес:порт

0.0.0.0:12356, не ?

x905 ★★★★★
()
Ответ на: комментарий от anonymous

Ну а какая необходимость в самопале?

В расширениях возможностей и более гибких настройках. И вопрос не в том «а нафига?», вопрос в том «а как?»

это касается архитектуры системы похожей на Tox.

seryoga
() автор топика
Ответ на: комментарий от anonymous

Есть подозрение, что касается архитектуры ботнета,

по крайней мере linux, *bsd, ..

будет круто. Касперский наверное прям в офисе от счастья искончится, он давно ботнеты на линуксах вангует. Можно даже автора прям щас сдать. По ТВ покажут, как раскрыли крупного ботнет писателя. Наверняка еще и из ЦРУ, а?

А вообще по теме: man getifaddrs. Получаешь все ифейсы. Для IPv4 берешь маски. Накладываешь на клиента, сравниваешь со своими. для IPv6 не актуально.

anonymous
()
Ответ на: комментарий от anonymous

точно! Может сработать. Спасибо, аноним.

Пора в отпуск.

seryoga
() автор топика
Ответ на: комментарий от seryoga

если даже сервер слушает несколько подсеток, то пакет от клиента не на деревню дедушке пришёл. и там есть как минимум IP, на котором пакет был принят. непонятно, в чём проблема.

Iron_Bug ★★★★★
()
Ответ на: комментарий от seryoga

Очевидно, что ему подходят первые 2

смотря какие маски на соответствующих сетевых интерфейсах.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.