2013-11-17 2 views
1

Я не могу найти информацию по этой теме в Интернете и спрашивать здесь. Например, у меня есть сервер с IP 1.1.1.1 и 2.2.2.2 и два доменных имени, указывающих на него one.example.com и example2.net, и прослушивание на порту 1234 для входящих соединений.Получить доменное имя входящего соединения

Например:

C/C++:

listenfd=socket(AF_INET, SOCK_STREAM, 0); 
bind(...); 
listen(...); 
while(...) accept(...); 

или Java:

ServerSocket socket = new ServerSocket(1234); 
while(...) { 
    Socket connectionSocket = welcomeSocket.accept(); 
    ... 
} 

Когда клиент принял на моем гнездо мне нужно знать, что доменное имя/IP используется по клиент для подключения. Это может быть one.example.com или example2.net и/или IP 1.1.1.1 или 2.2.2.2 (если они связаны только с использованием IP-адреса).

Apache как-то определил ip/domain входящих запросов, и мне нужно сделать такую ​​вещь в чистом коде сокета. C++ (основной) или Java (или любой другой), мне нужно знать механику этого.

Извините за мой английский.

+1

Apache знает домен, который адресован, поскольку он включен в HTTP-заголовок. Вы не сказали, что делаете, так что это не вариант для вас. –

+0

Да, я имею дело с HTTP, поэтому этот вариант принадлежит мне. Наряду с ответом Paweł Stawarz он решает мою проблему. БЛАГОДАРЯ! –

ответ

2

IP хранится внутри IP packet header, и вы можете прочитать его оттуда. Чтобы получить хост, вам, вероятно, придется запросить DNS-сервер, отправив request (или используйте function, который сделает это за вас). Вы можете найти примеры для обеих проблем, даже на this site

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