Поиск IP-адреса и номера порта с помощью сокета API? - PullRequest
2 голосов
/ 19 января 2011

Я работаю над кодом, в котором мне нужно найти IP-адрес отправителя, номер порта отправителя и пакет прикладного уровня, отправленный им.

Я сделал это с помощью Raw Sockets (SOCK_RAW), он работает нормально и сделал свою работу за меня, но это слишком неуклюже.

Вопрос: Я могу использовать SOCK_STREAM и получить пакет уровня приложения напрямую, и это действительно чистый и простой метод, чем при использовании Raw-сокета, но таким образом я не смогу найти IP-адреси номер порта клиента.Есть ли какая-либо функция, которой я передаю дескриптор сокета, и он сообщает мне IP-адрес и номер порта другого конца.Я прочитал несколько страниц руководства, но не смог найти ни одной.

Я использую API-интерфейс linux socket на языке C.

Заранее спасибо.:)

Ответы [ 2 ]

3 голосов
/ 19 января 2011

Когда вы звоните accept(), чтобы принять входящее соединение, *address - это структура, заполненная IP-адресом и номером порта отправителя.

2 голосов
/ 19 января 2011

реализация сокета BSD определяет функцию с именем getpeername(), которая позволяет узнать IP-адрес и порт удаленной стороны tcp-сокета.

если у вас есть какой-либо из подключенных сокетов SOCK_STREAM, независимо от того, с какой стороны было установлено соединение, вы можете вызвать эту функцию, чтобы получить необходимую информацию.(это намного проще, чем необработанный сокет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...