完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我注意到当我的浏览器(Firefox)不发送表单中的所有名称/值对时,CuthyHypPyApp.c中默认的后处理程序(和随后的重新启动调用)允许TCPIPPNETWORKY CONFIG填充一堆零点,或者潜在的旧坏数据。启动后的网络配置页面上的D框(用DHCP检查),找不到名称指针,并且HtpNETDATA中的字符数组没有改变。然后,当调用TCPIPSHHTPJPrtTyReBooT时,所有字符串都被写入TCPIPpNETWORKY CONFIG结构和NETWORD和NET.通过调用WebSetServInVMMMPFS默认打开Firefox中的网络配置页,只需按下重启界面页,而不改变任何复选框或字段。NE2.01b和2.02b在EKS2上。我已经附加了一个WiReSrack跟踪,其中静态IP在系统配置文件中被更改,但是没有其他来自演示WebSyVServInVMMMPFS项目的其他跟踪。
以上来自于百度翻译 以下为原文 I've noticed when my browser (firefox) doesn't send all the name/value pairs in a form, the default POST handler (and subsequent reboot call) in the custom_http_app.c allows the TCPIP_NETWORK_CONFIG to get filled with a bunch of zeroes, or potentially old bad data. If the POST packet omits the grayed out boxes on the Network Configuration page after bootup (with DHCP checked) the name pointers are never found and the char arrays in the httpNetData are not changed. Then when TCPIP_HTTP_Print_reboot is called the strings are all written into the TCPIP_NETWORK_CONFIG structure and NetDown and NetUp are called resulting in a badly configured interface. The screen attachments are produced by running the web_server_nvm_mpfs default opening the network config page in firefox, and just pressing the Restart Interface page without changing any of the check boxes or fields. I think I'm seeing this in 2.01b and 2.02b on the EKS2. I've attached a wireshark trace, where the static IP was changed in the system config file, but nothing else from the demo web_server_nvm_mpfs project. Attached Image(s) Attachment(s) reboot.zip (5.28 KB) - downloaded 40 times |
|
相关推荐
3个回答
|
|
我已经测试了你提到的网页。问题是,当“重启接口”按钮被按下并且“启用DHCP”未被选中时,“DHCP”值不是POST参数的一部分。页上实际上可能需要一个单选按钮,以允许在静态/DHCP之间进行选择。无论如何,这意味着即使DHCP i。s取消选择,静态值将是无用的,因为DHCP将被启用。无论如何,我看不到任何“垃圾”数据,但在那里。静态IP值是正确的。解决此问题的另一种方法是修改代码,并从DHCP== false作为默认值。可能更容易修复。如果你认为它比我发现的要多,请让我知道,这样我们就可以找到它的底部。P.S.HtpNETDATA数据结构是一个静态变量,如果DHCP=真,则它的成员不会被初始化。这是意图,就像DHCP被设置的那些值是不相关的。所以我能理解为什么你可以在其中看到一些未初始化的数据。如果你对DHCP服务器有问题,或者你需要那些静态IP值,那么是的,这可能是个问题。在这种情况下,我建议初始化。具有所需数据集的结构:生成时间定义、一些存储等。
以上来自于百度翻译 以下为原文 I've tested the web page that you mention. The problem is that the "dhcp" value is not part of the POST parameters when the "Restart Interface" button is pressed and the "Enable DHCP" is unchecked. Probably a radio button is actually needed on the page, to allow selection between static/dhcp. Anyway, what that means is that even if the dhcp is deselected, the static values will be useless, because DHCP will be enabled. Anyway, I couldn't see any "garbage" data in there though. The static IP values are correct. Another way to fix this is to modify the code and to start from dhcp == false as a default value. Probably easier to fix. If you think there's more to it than I've found, please let me know so we can get to the bottom of it. P.S. The httpNetData data structure is a static variable and its members are not initialized if the dhcp == true. This was the intention, as if DHCP is set those values are irrelevant. So I can understand why you can see some uninitialized data in there. If you have issues with the DHCP server or you otherwise need those static IP values, then yes, this might be a problem. In this case I'd recommend initializing that structure with a desired set of data: build time defines, some storage, etc. |
|
|
|
问题的一部分是浏览器的期望。我在Firefox和Chrome中看到了这一点,结果适用于两个浏览器。这个复制过程从ESK2的一个新引导开始。没有DHCP服务器。我已经连接到Web服务器并点击了NETCONFIG页面。在NETCONFIG页面上没有更改任何东西,我点击了“重新启动界面”ButoNi已经附加了一个WiReSARK的屏幕截图,通过第一个三个参数F的通知。在所有操作系统上,所有的浏览器都是相同的行为,但在这个案例中是这样的。HTTPSPONFIG将找到三个参数并在HtpNETDATA中填充字符串,并设置引导标志,但其他参数(IP,子网掩码、DNS等)永远不会被写入。StncPy永远不会发生在下面:当函数TcPIpH.HTPpPrimtReBug被调用时,它会将字符串(未被更新)复制到TCPIpJETNETWorksCONFIG结构HtpNETDATA.NETFrase:从原始帖子显示的屏幕截图显示IP、子网和其他参数为零,并将调用堆栈。这些字符串在启动后从未用网络配置初始化,例如可以用TCPIPpNetWorksCONFIG数据结构和这些函数:EBOOT函数只能更改在最后一个POST函数中更改的参数。或者网页可以被改变,所以所有参数都在“重启界面”按钮的每一个按下。(不幸的是,我不是一个浏览器行为或Java脚本的专家)---------------响应于你的上一篇文章,DHCP标志实际上是在HTTPSPONCOFIG函数调用中设置的:因为复选框在未选中时不发送“0”,所以简单地省略了从邮包、钻机中的名称/值对。三元运算符的HT手将永远不会分配给StaskFLAG。还要注意的是,当POST值得到“1”时,这不是一个“=”,所以其他的标志被关闭。像我这样的客户会尊重你在演示中改变这段代码的选择。你可以在第一次启动后禁用DHCP的原因是因为这个帖子的前半部分描述了错误。尝试关闭DHCP,然后“重置接口”,然后再次打开它,那么您将无法关闭它,因为从邮包中省略了名称/值“DCHP”。它第一次关闭的唯一原因是因为在一个新的引导程序中StaskFLAG在零上。我可以看到它是如何被忽视的,但是我必须在我的申请中解决这个问题。也许有组合框之类的东西。可能有几种方法来解决这些问题。新的嵌入式Web服务器的用户希望在实践中看到这些功能的一个示例:TCPIpHyStaskMultFigFigGETTCPIPHSTACKNETCONSITSET在邮政处理程序的条目或ReBOOT函数中对HTTP拥有的拷贝进行get集,然后只更改在打印功能。
以上来自于百度翻译 以下为原文 Part of the problem is what to expect from the browser. I have looked at this in firefox and chrome and the results apply for both browsers. This process to reproduce starts from a fresh boot of the ESK2. There is no DHCP server present. I've connected to the web server and clicked on the netconfig page. Without changing anything on the netconfig page I've clicked the "Restart Interface" button I have attached a screen shot of wireshark for what comes through via POST Notice the first three parameters from the form appear, but everything else is omitted. I am not sure this is the same behavior for all browsers on all operating systems, but it is true in this case. HTTPPostConfig will find the three parameters and fill the strings in httpNetData, and set the boot flag, but the other parameters (ip, subnet mask, dns, etc...) are never written. the strncpy never takes place below: if(!strcmp((char *)httpDataBuff, (const char *)"ip")) { // Save new static IP Address if(!TCPIP_Helper_StringToIPAddress((char *)(httpDataBuff + 6), &newIPAddress)) { bConfigFailure = true; break; } strncpy(httpNetData.ipAddr, (char *)httpDataBuff + 6, sizeof(httpNetData.ipAddr)); } when the function TCPIP_HTTP_Print_reboot gets called it will copy the strings (which have not been updated) into the TCPIP_NETWORK_CONFIG structure httpNetData.netConfig The screen shots from the original post shows the ip, subnet and other parameters as zeroes, and about to call stack up. Those strings were never initialized with the network config after boot such as could be done with the TCPIP_NETWORK_CONFIG data structure and these functions: TCPIP_STACK_ModuleConfigGet TCPIP_STACK_NetConfigSet Additionally the reboot function could only change parameters that were changed in the last POST function. Or the web page could be changed so all the parameters are submitted on every press of the "Restart Interface" button. (Sadly I am not an expert on browser behavior or java script) ----------------- In response to your last post, the DHCP flag is actually set in the HTTPPostConfig function call: else if(!strcmp((char *)httpDataBuff, (const char *)"dhcp")) { // Read new DHCP Enabled flag httpNetData.netConfig.startFlags = httpDataBuff[6] == '1' ? TCPIP_NETWORK_CONFIG_DHCP_CLIENT_ON : 0; } because the checkbox does not send a '0' when unchecked, the name/value pair is simply omitted from the POST packet, the right hand side of the ternary operator will never assign to startFlags. Also note when the POST value gets a '1' this is not an |= so other flags that were on get turned off. Customers like me will respect your choice to change this line of code in the demo. The reason you can disable DHCP after your first boot, is due to the bug described in the first half of this post. Try to turn DHCP off, then "Reset Interface" then turn it on again, then you won't be able to turn it off as the name/value 'dchp' is omitted from the POST packet. The only reason it turned off the first time is because startFlags inits to zero on a fresh boot. I can see how it got overlooked, but I'm going to have to fix this in my application. Perhaps with a combo box or something. There are probably a few ways to fix these issues. Users new to embedded web servers would like to see an example use of these functions in practice: TCPIP_STACK_ModuleConfigGet TCPIP_STACK_NetConfigSet maybe do a get set on the http owned copy at the entry of the post handler, or reboot function, then only change the parameters that are POSTED in the print function. Attached Image(s) |
|
|
|
在所有浏览器上的行为都是一样的,因为这就是脚本的编写方式。查看函数CuffiBox():如果启用了DHCP,则禁用IP、GW、掩码等。当发布完成后,当DHCP为0时,将不发送任何值。这可以通过调整HTTPSPATTION()来纠正:HTTPNETDATA。CurrNET= 0;/ /忘记旧设置HtpNETDATA.NETCONFIG。StCDFLAG=0;//假设DHCP是在DHCP启用时不执行STRCMP操作,因为这些参数不是由浏览器发送的。这是脚本所应该做的。如果您希望在DHCP打开时有意义的值,那么您也可以:-将脚本修改为EnAB。即使在DHCP打开时,也可以修改IP地址参数,或者修改HtpPsTaskCuffor()以从一些有意义的值开始。
以上来自于百度翻译 以下为原文 The behavior will be the same on all browsers because this is how the script is written. Look at function configIPBoxes(): if the dhcp is enabled, the ip, gw, mask, etc. are disabled. When the post is done, there will be no value send for dhcp when this is 0. This can be corrected by adjusting HTTPPostConfig() with: httpNetData.currNet = 0; // forget the old settings httpNetData.netConfig.startFlags = 0; // assume DHCP is off The strcmp operations are not performed when dhcp is enabled because those parameters are not sent by the browser - this is what the script says it should be done. If you want meaningful values even when the dhcp is on, then you either: - modify the script to enable the ip address parameters even when the dhcp is on - or modify the HTTPPostConfig() to start from some meaningful values |
|
|
|
只有小组成员才能发言,加入小组>>
5082 浏览 9 评论
1955 浏览 8 评论
1890 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3118 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2189 浏览 5 评论
636浏览 1评论
512浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
375浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
541浏览 0评论
442浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-2 18:39 , Processed in 1.108173 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号