Не удается подключиться к хосту в C: имя хоста не найдено (11001) в Windows, проблема с DNS? - PullRequest
1 голос
/ 11 марта 2011

Я пытаюсь использовать API, который подключается к удаленному серверу в C, но у меня по-прежнему появляется следующее сообщение об ошибке:

log_message: 15:13:19.489 I [ap:1388] Connecting to AP A3.spotify.com:4070

log_message: 15:13:19.490 E [ap:1324] AP Socket Error: Hostname not found (11001)

log_message: 15:13:19.491 E [ap:3396] Connection error:  4

log_message: 15:13:19.491 I [ap:1388] Connecting to AP A1.spotify.com:80

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

Вот поток TCP, который я перехватил с помощью Wireshark:

30  1.682802    MyLocalIp   193.182.8.15    HTTP    Continuation or non-HTTP traffic
31  1.702236    193.182.8.15    MyLocalIp   HTTP    Continuation or non-HTTP traffic
33  1.901706    MyLocalIp   193.182.8.15    TCP 50222 > http [ACK] Seq=12 Ack=12 Win=251 Len=0

Итак, согласно Wireshark, первое сообщение, отправленноемой компьютер имеет неправильную контрольную сумму заголовка.

Я знаю, что хост правильный, потому что, когда я использую тот же C API в Java с JNA, я получаю следующий результат:

log_message() called:15:46:48.718 I [ap:1388] Connecting to AP A1.spotify.com:4070

log_message() called:15:46:53.769 E [ap:1324] AP Socket Error: Undefined Error 0x4E20 (20000)

log_message() called:15:46:53.770 E [ap:3396] Connection error:  117

log_message() called:15:46:53.770 I [ap:1388] Connecting to AP A2.spotify.com:80

log_message() called:15:46:53.789 I [ap:938] Connected to AP: 193.182.8.12:80

Итакздесь происходит сбой соединения через порт 4070, что является нормальным явлением, поскольку оно блокируется брандмауэром компании, а затем это происходит успешно через порт 80.

А вот захват Wireshark для версии Java:

104 6.296125    MyLocalIp   193.182.8.15    TCP 50339 > http [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=8 SACK_PERM=1
107 6.575599    193.182.8.15    MyLocalIp   TCP http > 50339 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=7
108 6.575732    MyLocalIp   193.182.8.15    TCP 50339 > http [ACK] Seq=1 Ack=1 Win=65536 Len=0
109 6.582627    MyLocalIp   193.182.8.15    HTTP    Continuation or non-HTTP traffic
110 6.614789    193.182.8.15    MyLocalIp   TCP http > 50339 [ACK] Seq=1 Ack=512 Win=6912 Len=0
112 6.714201    193.182.8.15    MyLocalIp   HTTP    Continuation or non-HTTP traffic
113 6.722057    MyLocalIp   193.182.8.15    HTTP    Continuation or non-HTTP traffic
115 6.746484    193.182.8.15    MyLocalIp   TCP http > 50339 [ACK] Seq=500 Ack=677 Win=8064 Len=0
116 6.750938    193.182.8.15    MyLocalIp   HTTP    Continuation or non-HTTP traffic
117 6.751093    MyLocalIp   193.182.8.15    HTTP    Continuation or non-HTTP traffic
118 6.985366    193.182.8.15    MyLocalIp   HTTP    [TCP Retransmission] Continuation or non-HTTP traffic
119 6.985416    MyLocalIp   193.182.8.15    TCP [TCP Dup ACK 117#1] 50339 > http [ACK] Seq=787 Ack=544 Win=65024 Len=0 SLE=500 SRE=544
121 7.013666    193.182.8.15    MyLocalIp   HTTP    Continuation or non-HTTP traffic
124 7.213661    MyLocalIp   193.182.8.15    TCP 50339 > http [ACK] Seq=787 Ack=1803 Win=65536 Len=0
132 7.703708    MyLocalIp   193.182.8.15    HTTP    [TCP Retransmission] Continuation or non-HTTP traffic
133 7.721265    193.182.8.15    MyLocalIp   HTTP    Continuation or non-HTTP traffic

Я попытался добавить IP 193.182.8.15 в мой файл System32 / drivers / etc / hosts для имени хоста A1.spotify.com, A2.spotify.com и A3.spotify.com, но это ничего не изменило.

Я выключил брандмауэр Windows и антивирус, он тоже не помог.

Я попытался запустить его дома без прокси-сервера и брандмауэра, но это было то же самое (за исключением того, что в версии Javaслужба смогла подключиться через порт 4070)

Есть идеи?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 13 марта 2011

Вы не сказали, какую сетевую библиотеку вы используете.Предположительно, сторонняя или внутренняя библиотека.
Я собираюсь сделать дикое предположение, но могу поспорить, ваша сетевая библиотека ожидает IP-адреса, а не DNS-имена?Вы пытались запрограммировать свое приложение, чтобы оно просто подключалось к «193.182.8.15» вместо «a3.spotify.com»?Если это работает, выполните вызов gethostbyname, чтобы преобразовать DNS-имя в IP-адрес.

Вот еще несколько вещей, которые можно попробовать

Введите это в командной строке:

ping a3.spotify.com

В случае успеха результат будет выглядеть примерно так:

Pinging a3.spotify.com [193.182.8.15] with 32 bytes of data:
Reply from 193.182.8.15: bytes=32 time=79ms TTL=49
Reply from 193.182.8.15: bytes=32 time=79ms TTL=49
Reply from 193.182.8.15: bytes=32 time=79ms TTL=49
Reply from 193.182.8.15: bytes=32 time=79ms TTL=49

Ping statistics for 193.182.8.15:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 79ms, Maximum = 79ms, Average = 79ms

Вывод этой программы говорит мне две вещи.

  1. То, что a3.spotify.com правильноразрешает до 193.182.8.15.Нет необходимости в взломе файлов хостов.(Возможно, в вашей корпоративной сети вам это нужно).

  2. Поскольку я получил действительный пинг, это означает, что хост, вероятно, доступен.Но некоторые машины настроены так, что они не принимают пинг, поэтому отсутствие ответа на пинг не является окончательным ответом.Что важно увидеть, если ping успешно разрешил имя хоста.

Теперь введите это из командной строки, чтобы проверить подключение к порту 80.

telnet a3.spotify.com 80 ( нет telnet? см. ниже )

Он "подключается" (и переходит на пустой экран)?(Нажмите CTRL +] для выхода, затем нажмите «quit»)

Выполните тот же telnet, за исключением порта 4070.

ping и telnet - быстрый и грязный способ проверки разрешения DNS и IP: порт подключения.

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

Чтобы установить клиент Telnet Нажмите кнопку «Пуск», нажмите «Панель управления», а затем «Программы».

В разделе «Программы и компоненты» нажмите «Включить или отключить функции Windows».Если вас попросят ввести пароль администратора или подтверждение, введите пароль или предоставьте подтверждение.

В диалоговом окне «Функции Windows» установите флажок «Клиент Telnet».

Нажмите «ОК».Установка может занять несколько минут.

0 голосов
/ 17 марта 2011

Я наконец нашел решение: Запуск моей программы от имени администратора решил проблему

0 голосов
/ 11 марта 2011

Неправильные контрольные суммы заголовков не являются критическими.Многие программные средства основаны на аппаратном пересчете контрольных сумм заголовков, поэтому они редко предварительно вычисляют контрольную сумму заголовков в ЦП.Поскольку wireshark собирает информацию до того, как она поступает в микросхему, которая отправляет ее по проводам, wireshark сообщит о неправильных контрольных суммах заголовка с некоторой частотой.

Обратите внимание, что исходная ошибка была связана с хостом A3, но некоторые из ваших "доказательство того, что машины были достижимы, было продемонстрировано на хостах А1 и А2.Хорошие шансы, что эти хосты не используют один и тот же IP-адрес, поэтому я буду осторожен с «установкой их всех в XXXX» в файле hosts.

Также обратите внимание, что клиенты связывания могут быть настроены на пропуск хоста.записи файла.Я не уверен, что это так, но я хотел бы добавить публичный сервер имен в файл resolv.conf (или эквивалентный) и посмотреть, получите ли вы лучшие результаты.Если бы машина, на которой вы работали «дома», была тем же ноутбуком, который вы использовали «на работе», плохой файл resolv.conf «путешествовал бы с вами».

Удачи

...