Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux SSDP和接口IP地址_Linux_Upnp_Dlna_Network Interface_Ssdp - Fatal编程技术网

Linux SSDP和接口IP地址

Linux SSDP和接口IP地址,linux,upnp,dlna,network-interface,ssdp,Linux,Upnp,Dlna,Network Interface,Ssdp,我正在写一个/需要发送和接收消息。为了响应一些M-SEARCH数据包,我需要发送一个带有资源URL的回复(在本例中是HTTP服务器),我选择将其绑定到INADDR\u ANY(0.0.0)。当然,这个地址对于M-SEARCH数据包的发送者来说毫无意义:接收M-SEARCH的接口的地址是最合适的 如何确定要在回复数据包中发送的适当地址? 我考虑过的一些想法是: 将不同的接收器绑定到每个套接字。当接收者收到M-SEARCH数据包时,应答地址可以在应答中使用套接字的本地地址。然而,这需要了解并迭代所有

我正在写一个/需要发送和接收消息。为了响应一些
M-SEARCH
数据包,我需要发送一个带有资源URL的回复(在本例中是HTTP服务器),我选择将其绑定到
INADDR\u ANY
0.0.0
)。当然,这个地址对于
M-SEARCH
数据包的发送者来说毫无意义:接收
M-SEARCH
的接口的地址是最合适的

如何确定要在回复数据包中发送的适当地址?

我考虑过的一些想法是:

  • 将不同的接收器绑定到每个套接字。当接收者收到
    M-SEARCH
    数据包时,应答地址可以在应答中使用套接字的本地地址。然而,这需要了解并迭代所有接口,并随着接口可用性的变化添加和删除接收器
  • 在INADR\U ANY上放置一个接收器,并迭代接口网络掩码以确定可能的源。但是,多个接口可能共享同一子网
  • 在收到数据包IP目标地址时提取数据包IP目标地址。这是特定于IP的,可能会在网络抽象的某个地方丢失
  • getsockname(2)
    后跟
    getnameinfo(3)
    报告TCP/IP堆栈分配给套接字的IP地址。(很明显,如果服务器和客户端位于NAT系统的对侧,这与客户端可以使用的不匹配;在这种情况下,可能有一种聪明的UPnP技巧来发现客户端可以用来联系服务器的IP地址。)

    我假设您的服务器如下所示:

    lfd = socket();
    ret = bind(lfd,...);
    connection = listen(lfd, 10);
    /* add connection to your select queue or poll queue */
    
    您可以附加类似以下内容的代码:

    struct sockaddr_storage me;
    socklen_t *len = sizeof(me);
    char name[40];
    ret = getsockname(connection, &me, &len);
    ret = getnameinfo(&me, &len, name, sizeof(name), NULL, 0, NI_NUMERICHOST);
    

    检查
    me
    中的IP地址。因为这些是通用接口,所以它适用于IPv4或IPv6地址。

    SSDP通过UDP。。。马特·乔纳:啊,我在维基百科的页面上看到了很多关于“HTTP”的内容,并假设它是TCP。您可以连接UDP套接字,然后在连接的套接字上使用
    getsockname(2)
    。我对未连接的套接字不太确定,但连接套接字并不可怕。这似乎有效。我应该重新表述这个问题,把重点放在UDP上。