2010-10-01 2 views
1

Мне было интересно, как с помощью C узнать, какой порт клиент в данный момент слушает. т.е. я хочу знать, что такое порт источника, а не порт назначения.номер порта клиента

Заранее благодарен!

ответ

0

Структура адреса сокета должна быть заполнена системным вызовом connect(). Проверьте его после успешного возврата от этого вызова.

+0

Стив Джессоп дал мне ответ, который я искал, я не уверен, что делать с этим вопросом сейчас ... – Cenoc

0

Не уверен, что вы имеете в виду. Клиенты не слушают, серверы делают.

+0

Я думал, что они слушают открытый номер порта, на который они запрашивают ОС. Похоже, это так ... также по какой-то причине серверы торрентов требуют, чтобы вы отправляли порт, который прослушивает клиент. – Cenoc

+0

@Cenoc: это потому, что клиент bittorrent также выступает в качестве «сервера» для других машин в рое для подключения (т. Е. Получает входящие соединения). P2P смущает обычное разделение клиент-сервер, но когда речь идет об одном TCP-соединении, «клиент» подразумевает, кто инициировал соединение. –

+0

Правильно, но он по-прежнему подключается как клиент, поэтому мой вопрос: как мне найти этот исходный порт для отправки в этом сценарии? – Cenoc

0

Если вы говорите о том, как сканировать для все открытые порты, то вы можете воспользоваться портовым сканером. Существует много многих исходных кодов, но я определенно не рекомендую вам использовать один из них, они обычно медленны, даже если включена многопоточность. Зачем? Там nmap: http://nmap.org/

0

В зависимости от того, что вы хотите (что я слишком тупо угадываю прямо сейчас), вы хотите вызвать либо getsockname(), либо getpeername().

Смежные вопросы