2015-12-30 3 views
0

Я исследовал снова и снова, и это мой первый вопрос к сайту, который я люблю. У меня есть сервер/клиент на базе Microchip, запрашивающий веб-страницу с другого сервера Microchip TCP той же версии.Клиент Microchip TCP, разговаривающий с сервером TCP Microchip

У меня есть одна доска разработки, которая запрашивает веб-страницу с другой платы разработки, а через проводную акулу видна связь и видно, что из кода GenericTCPClient.c используется только радиовещание ARP. Он работает, но связь с проводными акулами НЕ выглядит так же, как если бы CURL, или общий веб-браузер запрашивал ту же информацию.

Либо перед моим лицом, либо с кодом Microchip (клиент) не поддерживает то, что я думаю. Я написал программы FTP и электронной почты с нуля в дни колледжа, прочитав RFC, поэтому незнакомец не хочет и не хочет знать о запросах низкого уровня через сокеты, если это то, что требуется.

Плюс, если веб-страница имеет имя пользователя и пароль ... т. Е. http://admin:[email protected]/page.htm ... Клиент микрочипа, похоже, не поддерживает это, если только я не вижу свет.

простой пример из demo GenericTCPClient.c следующим образом, если необходимо изменить команды нижнего уровня.

 // Place the application protocol data into the transmit buffer. For this 
     // example, we are connected to an HTTP server, so we'll send an HTTP GET 
     // request. 
     TCPPutROMString(MySocket, (ROM BYTE*)"GET "); 
     TCPPutROMString(MySocket, RemoteURL); 
     TCPPutROMString(MySocket, (ROM BYTE*)" HTTP/1.1\r\nHost: "); 
     TCPPutString(MySocket, ServerName); 
     TCPPutROMString(MySocket, (ROM BYTE*)"\r\n\r\n"); 

     // Send the packet 
     TCPFlush(MySocket); 
     GenericTCPExampleState++; 

Я использовал отладки многословный функцию с помощью CURL и видел, что он послал, а также видели связь через Wireshark, и то же самое с помощью универсального браузера, но не могу показаться, чтобы получить аналогичные результаты, используя одни и те же команды низкого уровня видно из CURL, внутри GenericTCpCLient.c.

Таким образом, использование команд, захваченных через CURL или общий веб-браузер, в качестве команд для «GET» для захвата веб-страницы с клиента Microchip TCP, на сервер Microchip не показывает одинаковых результатов.

GenericTCPClient.c просто использует широковещательную передачу ARP, но хочет использовать те же команды, что и CURL.

Я что-то упустил? CURL работает потрясающе, но попытка использовать одни и те же команды в GenericTCPClient.c, похоже, не дает одинаковых результатов ... особенно в URL используется пользователь и пароль.

Итак, в оболочке ореха ... Microchip GenericTCPCLient.c, запрашивая WEB-страницу с сервера Microchip TCP, Wireshark показывает радиовещание ARP, в то время как CURL и любой веб-браузер показывают правильный путь.

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

+0

Вы не жутко смешиваете http и tcp/ip? –

+0

Это возможность. При использовании TCPPutROMString (MySocket, (ROM BYTE *) "HTTP/1.1 \ r \ nHost:"); и остальная часть того, что я считал нужным, от CURL в режиме отладки verbose, я, кажется, не получаю такие же результаты от использования wirehark. Wireshark показывает различный цветной трафик с использованием CURL для загрузки веб-страницы, а затем с использованием тех же команд в Microchip TCPClient, в Microchip TCPServer. Выйдя на медицинский отпуск, у меня нет всех инструментов передо мной до следующей недели, чтобы показать ответ CURL от wirehark по сравнению с ответом Microchip TCPClient от Wireshark. – Ignisfatuuz

+0

В основном я использовал строку за строкой ответа CURL в режиме отладки и вводил те же команды, что и в коде Microchip TCPClient. И получил разные трафик результатов от wirehark. – Ignisfatuuz

ответ

0

Возможность просмотра трафика Ethernet от одного встроенного устройства к другому затруднена с помощью переключателей. По этой причине у меня есть Ethernet-концентратор. Коммутатор будет маршрутизировать трафик только на конкретный порт с конечным устройством; концентратор будет дублировать все данные на всех портах.

Причина, по которой ПК (и Wireshark) может видеть широковещательную передачу ARP, - это передача. Коммутатор отправляет этот пакет всем портам. Если TCP-сервер отвечает, он напрямую отвечает на TCP-клиент, минуя ПК (и Wireshark).

Мое предложение - установить веб-сервер на ПК. Отладка TCP-клиента, пытающегося получить страницу с ПК. Вы можете запустить Wireshark, и он покажет все взаимодействие.

Далее отладить TCP-сервер с помощью веб-браузера. Опять же, Wireshark сможет отображать все данные.

Наконец, отлаживайте связь между двумя встроенными устройствами.

Имя пользователя и пароль, вероятно, покрываются функцией HTTPHeaderParseAuthorization. Найдите HTTP_USE_AUTHENTICATION.

0

Решено ... После прочтения RFC 1945 Раздел 11.1, я выяснил, что мне нужно было закодировать «имя пользователя: пароль» на базу 64. Затем укажите и добавьте аргумент в сокет. Я никогда не знал этого до дальнейших исследований. Думал, что мне нужно передать пользователя: передать URL-адрес (например, в веб-браузере или в командной строке cURL) не как дополнительный аргумент для сокета. http://tools.ietf.org/html/rfc1945#section-11.1 I.e. htttp: // user: [email protected]/webpage.htm

TCPPutROMString (MySocket, (ROM BYTE *) "Авторизация: Основной QWxhZGRpbjpvcGVuIHNlc2FtZQ =="); Код Auth был сгенерирован преобразованием base_64 с открытым исходным кодом Apple, который я нашел из другого потока, передав строку «имя пользователя: пароль» и получив результат base64 для передачи в сокет. http://www.opensource.apple.com/source/QuickTimeStreamingServer/QuickTimeStreamingServer-452/CommonUtilitiesLib/base64.c

Что касается результатов, отличных от использования cURL или веб-браузера. Они оба использовали команды TCP, которые отображались зелеными в wirehark. Использование клиента Microchip отображается как передача ARP с IP-адреса клиента на IP-адрес сервера. т.е. 192.168.1.11 - 192.168.1.10.

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