Определение номера порта TCP, к которому привязан клиент - PullRequest
5 голосов
/ 07 декабря 2008

Я создаю сокет TCP, не заботясь о номере порта для привязки к [socket.sin_port = 0]. Однако позже, если я хочу напечатать номер порта клиента, как мне это сделать? Клиентское приложение C (в Linux) создает много клиентов, которые подключаются к серверу. Для устранения проблем я фиксирую трафик на ethereal. Я думал о печати номера порта в журналах, когда возникает проблема, так что фильтрация на ethereal становится легкой.

Любая помощь будет оценена.

-Prabhu

Ответы [ 3 ]

10 голосов
/ 07 декабря 2008

Используйте вызов getsockname (), чтобы получить адрес и порт сокета после успешного соединения.

Редактировать: правильное имя метода. Иногда я не могу скопировать простое слово из одного окна в другое!

2 голосов
/ 07 декабря 2008

Я считаю, что Даррон имел в виду getsockname(). Это то, что вам нужно, если вам нужно программно определить номер порта на стороне клиента (сторона, вызывающая connect()). На стороне сервера (сторона, вызывающая bind()), вы будете использовать getpeername() для получения той же информации из подключенного сокета.

Однако, если вы отлаживаете и не можете изменить код, в конечном итоге вы используете такие вещи, как утилита netstat или sockstat, в зависимости от операционной системы. Я не уверен, какие утилиты доступны в Linux (или даже в вашем конкретном пакете), но я бы начал с man sockstat. Если он установлен, вы можете запустить его с любой стороны и посмотреть, какие конечные точки были назначены каким процессам. Объедините это с grep, и вы обычно сможете определить, какой адрес фильтровать в Ethereal. Удачи!

0 голосов
/ 07 декабря 2008
lsof -p <process id> | grep TCP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...