Microchip
直播中

张红

7年用户 1231经验值
私信 关注
[问答]

如何获取连接的UDP客户端的远程MAC地址Harmony 1.09

你好!我有两个UDP服务器在运行,并且想从TCP UDP堆栈中读出连接的客户端的远程MAC地址。在MLA TCP堆栈中,使用UDPSocketinfo[_MYUDP_Socket1]、..remoteNode.MACAddr.v这没有问题。否则,UDP PATETSCAN永远不会被发送回客户端:-但是在哪里?有人能帮我吗?

回帖(6)

云达贞

2019-11-1 12:37:10
不是真的:UDP关心IP地址,不知道MAC地址。另外,在发送IP数据报时,如果该地址位于不同的网络中,则该MAC地址可能是网关的,而不是最终目的地。ARP模块处理MAC地址。可以使用:bool TCPIP_ARP_IsResolved(TCP)。IP_NET_HANDLE hNet、IPV4_ADDR*IPAddr、TCPIP_MAC_ADDR*MACAddr)将给您提供MAC地址,假定IP地址存在并且是在该网络中解决的。
举报

李祥芝

2019-11-1 12:53:44
很抱歉纠正你,但是真的:每个以太网数据包,也是一个UDP数据包,都有一个MAC地址,因为每个UDP数据包都是以太网数据包内的IP帧的一部分。每个网络适配器首先处理MAC地址!这就是为什么需要ARP的原因,因为如果客户端不知道对应于IP的MAC地址,它会发送一个“谁有?”ARP消息和具有搜索IP的主机与相应的MAC地址进行应答。然后,这个MAC成为ARP表的一部分“众所周知”。我认为更严重的问题是,和声IP堆栈仅将消息的UDP部分传递给UDP,这是正确的,或者我找不到指向完整的以太网分组的指针,该完整的以太网分组内部也有远程MAC。ve,MAC仍然是UDP分组信息的一部分,但不再和谐。当然,我可以使用TCPIP_ARP_IsResolved(...)来获取远程MAC,但我不想对每个获得的UDP分组都这样做,因为MAC信息已经随UDP分组到达,并且请求减慢。所有一切。所以我只是搜索解决方案,如何让MAC发送与UDP数据包从客户在微芯片MLA,如我上面所写。谢谢你的帮助!
举报

李祥芝

2019-11-1 13:02:35
在我发现远程MAC的信息存储在哪里之间:bool TCPIP_UDP_MySocketExtInfoGet(UDP_SOCKET,UDP_SOCKET_INFO*pInfo){UDP_SOCKET_DCPT*pSkt=_MyUDPSocketDcpt(s);....//-&g t;This Pointer是一个指向完整数据包(uint8_t*)pSkt-&g t;pCurrRxPkt-&g t;pMacLayer;//的指针,通过这个副本,您可以复制最后一个UDP数据包//远程和本地MAC TCPIP_MAC_MAC_ETHERNET_HEADER MAC_HEADER MAC_HEADER;memcpy(&MAC_HEADER,UDPInfo.pSkt-&g t;pCurrRxPkt-&g)的MAC报头信息。t;pMacLayer,sizeof(TCPIP_MAC_ETHERNET_HEADER);......}现在的问题更多的是编写一个不修改库并访问堆栈内部变量的函数。更好的是,UDP_SOCKET_INFO应该由指针扩展到MLA中的完整包!谢谢你
举报

李子跃

2019-11-1 13:08:48
不是真的。IPV4上的UDP数据包包括:-IPV4报头{32bitSourceAddress32bitDestinationAddress8bitZeroPadding8bitProtocol(=UDP)16bitLengthUDP报头{16bitSourcePort16bitDest.PORT1616位长16位校验和}数据…在堆栈中的下端,地址地址将通过ARP解决,如您所说的。然而,例如,如果您试图获得DNS服务器的MAC地址(例如,8.8.8.8),ARP将只获得本地网关的MAC地址(因为这将是响应“谁有8.8.8?”的网络适配器)。现在你的目的是学术性的,假设你正在访问的UDP服务器在你的本地子网上。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分