2015-05-25 2 views
0

Как вы получите доменное имя из TCP-соединения?Java TCP Получить доменное имя?

Как я пытаюсь создать прокси-тип программного обеспечения, но он должен определить, что такое домен, а затем идти туда, где ему нужно. Однако я не уверен, как получить доменное имя от клиента.

+0

https://stackoverflow.com/questions/10554380/converting-an-ip-address-to-host- имя это то, что вы спрашиваете? – user123

+0

Нет, поэтому мне нужно это сделать. Если кто-то подключается через домен google.com, он получает IP-адрес 1.1.1.1. Однако, если кто-то подключается через домен bing.com, он получает значение 3.3.3.3 ip address. Мне нужно захватить доменное имя из соединения. – user3642449

ответ

1

Нет общего способа получения целевого домена или имени хоста из TCP-соединения, поскольку соединение определяется только целевым IP-адресом, а не именем хоста, и может быть несколько имен для одного целевого IP-адреса адрес. Но пока нет общего способа, чтобы получить целевое имя из всех соединений TCP можно с некоторыми протоколами поверх HTTP:

  • В случае HTTP вы можете посмотреть на заголовок HTTP хоста, который содержит целевой хост имя и устанавливается почти всеми HTTP-стеками (требуется с HTTP/1.1).
  • С помощью SSL вы можете попытаться извлечь имя хоста из исходного сообщения ClientHello в SSL-квитировании, если клиент использует SNI (указание имени сервера). Все современные браузеры используют SNI, но более старый браузер, такой как IE8, не является и не более старыми приложениями Java, Python, Perl, Ruby ....
+0

Спасибо за помощь! – user3642449

0

Вы можете использовать следующий фрагмент кода, который даст локальное доменное имя -

try { 
     InetAddress me = InetAddress.getLocalHost(); 
     String dottedQuad = me.getHostAddress(); 
     System.out.println("My address is " + dottedQuad); 
} catch (UnknownHostException e) { 
     System.out.println("I'm sorry. I don't know my own address."); 
} 
Смежные вопросы