我研究了一遍又一遍,这是我对我喜欢的网站的第一个问题。我有一个基于Microchip的服务器/客户端,要求从另一个Microchip TCP服务器的网页,相同的版本。
我有一个开发板从另一个开发板请求网页,通过wire shark,可以看到通信,并看到GenericTCPClient.c代码只使用了ARP广播。它是有效的,但wire shark通信看起来与CURL或通用web浏览器请求相同的信息不同。
要么在我面前,要么是微芯片代码(客户端)不支持我认为它应该支持的东西。在读RFC的大学时代,我从头开始编写FTP和电子邮件程序,所以如果需要的话,我希望并需要了解通过套接字的低级请求。
另外,如果网页有用户名和密码...即http://admin:password@192.168.1.10/page.htm..。microchip客户端似乎不支持这一点,除非我没有看到曙光。
如果需要更改低级命令,来自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使用了debug verbose功能,并看到了它发送的内容,还看到了通过wireshark的通信,使用通用浏览器也是如此,但似乎无法获得类似的结果,使用GenericTCpCLient.c中的CURL中的相同低级命令。
因此,使用通过CURL或通用web浏览器捕获的命令作为用于从Microchip TCP客户端抓取网页的命令来从Microchip服务器抓取网页,不会显示相同的结果。
GenericTCPClient.c只使用ARP广播,但希望使用与CURL相同的命令。
我是不是遗漏了什么?CURL的工作非常棒,但是尝试在GenericTCPClient.c中使用相同的命令似乎不会产生相同的结果……尤其是URL中使用的是用户名和密码。
所以在坚果壳里..。Microchip GenericTCPCLient.c向Microchip TCP服务器请求网页,Wireshark显示ARP广播,而CURL和任何WEB浏览器显示正确的方式。
感谢您对其他类似帖子的反馈或指点。当我被难住的时候,这是我最喜欢的地方。
发布于 2016-01-15 01:52:53
使用交换机很难看到从一台嵌入式设备到另一台嵌入式设备的以太网流量。出于这个原因,我的办公桌上有一个以太网集线器。交换机将仅将流量路由到具有终端设备的特定端口;集线器将复制所有端口上的所有数据。
PC (和Wireshark)之所以能看到ARP广播,是因为它是广播。交换机会将该数据包发送到所有端口。如果TCP服务器正在响应,它将绕过PC (和Wireshark)直接响应TCP客户端。
我的建议是在PC上安装一台web服务器。调试尝试从PC获取页面的TCP客户端。您可以运行Wireshark,它将显示所有交互。
接下来,使用PC的web浏览器调试TCP服务器。同样,Wireshark将能够显示所有数据。
最后,对两个嵌入式设备之间的通信进行调试。
用户名和密码可能包含在HTTPHeaderParseAuthorization函数中。查找HTTP_USE_AUTHENTICATION。
发布于 2016-01-15 11:17:02
已解决..。在阅读RFC1945第11.1节之后,我发现我需要将"username:password“编码为base64。然后向套接字提供额外的参数。直到进一步研究我才知道这一点。我认为我需要传递给user:传入URL,(就像在web浏览器或cURL命令行中一样),而不是作为套接字的额外参数。用户:https://www.rfc-editor.org/rfc/rfc1945#section-11.1 @192.168.1.X/webpage.htm
TCPPutROMString(MySocket,(ROM *)“Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==");验证码是从我在另一个线程中找到的苹果开源密码转换生成的,方法是传入字符串”base_64 : base64“并将密码结果传递到套接字中。http://www.opensource.apple.com/source/QuickTimeStreamingServer/QuickTimeStreamingServer-452/CommonUtilitiesLib/base64.c
至于结果与使用cURL或web浏览器不同。它们都使用了在wireshark中显示为绿色的TCP命令。使用Microchip客户端显示为从客户端ip地址到服务器ip地址的ARP广播。即192.168.1.11到192.168.1.10广播。
https://stackoverflow.com/questions/34522910
复制相似问题