2016-04-16 4 views
2

I, традиционно, всегда был псевдоним/функции для легкого доступа к моей WAN IP от CLI:Получение WAN IP: разница между HTTP и DNS

$ type -a whatismyip 
whatismyip is a function 
whatismyip() 
{ 
    curl ipv4.icanhazip.com 
} 

Этот псевдоним был создан много лет назад, возможно, используя другой домен, но всегда используя HTTP.

Недавно я обнаружил, что все чаще упоминается однострочный, который находит ту же информацию через DNS.

Но действительно ли это так?

При написании этого, я использую привязку 4G, и результаты отличаются между протоколами.

Еще более удивительно, что они отличаются также между DNS-серверами.

И забавно, ns1.google.com, имеет различные результаты от 8.8.8.8.

$ whatismyip 
92.251.255.11 

$ dig +short myip.opendns.com @resolver1.opendns.com 
178.167.254.133 

$ dig TXT +short o-o.myaddr.l.google.com @8.8.8.8 
"74.125.73.77" 
"edns0-client-subnet 178.167.255.120/32" 

$ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com 
"178.167.255.120" 

$ ifconfig | grep 'inet addr:' 
      inet addr:127.0.0.1 Mask:255.0.0.0 
      inet addr:192.168.42.125 Bcast:192.168.42.255 Mask:255.255.255.0 
      inet addr:10.47.206.109 Bcast:10.63.255.255 Mask:255.192.0.0 

Любой имеющий дух объяснить это в некоторых подробно? :)

~~ EDIT: Просто чтобы прояснить, я попытался все вышеперечисленные команды в какой-то степени, и они дают стабильные результаты ~~

~~ EDIT2:. Первоначально я забыл опубликовать результаты whatismyip, но ни один из DNS-запросов не соответствовал HTTP-протоколу. Я пытаюсь воспроизвести его, но безуспешно. Я должен вернуться в это кафе:) ~~

EDIT3: Я вернулся туда и получил новые данные. Как и в прошлый раз!

ответ

0

Два DNS запросов вы сделали:

$ dig +short myip.opendns.com @resolver1.opendns.com 
$ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com 

должны были возвращать тот же адрес: ваш внешний IP-адрес. Возможно, ваш внешний IP-адрес изменился между вашими запросами, и поэтому вы получили разные результаты. Это никоим образом не часть протокола DNS, а скорее трюк, который стал возможным для этих DNS-серверов для возврата IP-адреса, вызвавшего запрос. Те и несколько других трюков DNS перечислены in this post.

С другой стороны:

$ dig TXT +short o-o.myaddr.l.google.com @8.8.8.8 

не может дать вам IP клиента, потому что 8.8.8.8 не авторитетный DNS сервер o-o.myaddr.l.google.com (ns1.google.com есть), поэтому он не получает свой IP непосредственно и ответ вы видите, это наилучшее приближение усилия, которое разрешено протоколом DNS (описание построчно):

  1. IP-адрес DNS-распознаватель, который связался с авторитетным сервером для TXT записи.
  2. Если доступно, подсеть (edns-client-subnet) клиента (вы в этом случае), от имени которого DNS-запрос сделал запрос.

Для получения дополнительной информации о edns-client-subnet вы можете прочитать this article.

+0

Я добавил разъяснение в вопрос. Мой внешний IP-адрес не изменился. –

+0

Какие DNS-запросы соответствуют HTTP-протоколу? – argaz

+0

О, дерьмо. Я, хотя я это и поставил в этом вопросе. Никто ! –