У меня есть настройки следующим образом:

                Internet
                    |
                    |                                                           192.168.0.3
PC1                 |                                                             Laptop1                                                  
   |---------------Switch(Gateway)---------------Pi1-------Pi2---------Pi3------------|
PC2                192.168.0.1              192.168.0.*(DHCP)     192.168.0.2     Laptop2                  
                                                                                192.168.0.4

С ноутбуков я могу пропинговать внешние веб-сайты, такие как «176.34.131.233» (DuckDuckGo), однако, когда я пытаюсь подключиться к этим серверам через браузер (вставив IP-адрес в строку URL), я получаю «Сервер не найден».

С рабочих столов все отлично работает.

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

Ноутбуки не работают с DNS, поэтому вставляют IP в URL.

На wireshark я заметил, что ноутбуки могут выполнить 3-х стороннее рукопожатие (SYN> SYN, ACK> ACK), но по какой-то причине он завершает 2 (с тем же портом dst и разными портами src).

По завершении рукопожатия соединение немедленно прерывается с помощью FIN, ACK с ноутбука, за которым следует обычное закрывающее соединение другого FIN, ACK с сервера, затем окончательный ACK (это закрытие соединений также дублируется через 2 разных порта),

Пакеты HTTP GET не отправляются на сервер.

В Pi работает мостовое программное обеспечение, которое я написал для себя на python, и, судя по тому, что ноутбуки могут пинговать внешние серверы и можно выполнить 3 способа установления связи, кажется, программное обеспечение работает.

Таким образом, вопрос в том, почему на земле происходит 2 набора 3-х сторонних рукопожатий и почему я могу пропинговать сайт, но не загружать его в свой браузер?

Если у кого-то есть какие-либо идеи или предложения, это было бы очень ценно.

Я думаю о том, как был настроен ноутбук (работает под управлением linux), какой-то брандмауэр в маршрутизаторе, блокирующий данные, или что-то в корне не так с моим кодом. Я изучил все безрезультатно.

1 ответ1

2

Эта часть, вероятно, является ядром вашей проблемы:

Ноутбуки не работают с DNS, поэтому вставляют IP в URL.

Когда браузер запрашивает документ по HTTP, он отправляет заголовок Host который указывает запрашиваемый домен. Этот заголовок полезен для запуска "виртуальных хостов", то есть хостинга нескольких сайтов на одном IP-адресе. Веб-сервер проверяет входящий заголовок Host чтобы определить, с каким клиентом веб-сайта он пытается связаться, и соответственно обрабатывает запрос.

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

Если вы не хотите использовать настоящий DNS, существует простой обходной путь: добавьте фактический домен в файл hosts . Вы не указали, какая ОС работает на проблемных компьютерах, поэтому вот общее руководство. Файл hosts находится в %SystemRoot%\System32\drivers\etc\hosts в Windows и /etc/hosts в Linux (более полный список см. В Википедии). Это простой текстовый файл, но для его редактирования вам потребуются права администратора. Просто добавьте строку в формате <ip> <domain> в конце, например:

151.101.193.69 superuser.com

Сохраните файл. Эта запись переопределит разрешение DNS для этого домена. Все HTTP-клиенты, использующие DNS, предоставляемый операционной системой , теперь разрешают superuser.com к 151.101.193.69 , поэтому браузеры будут отправлять соответствующие заголовки Host .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .