在iOS上解析NetBIOS名称

12

你尝试过将苹果SMB代码隔离到仅需要名称解析的部分吗?这似乎是较少的代码,只需要支持nbns_resolvenamehttps://github.com/unofficial-opensource-apple/smb/search?utf8=%E2%9C%93&q=nbns_resolvename - Jeremy W. Sherman
1个回答

0

我认为你只需要进行反向DNS查找gethostbyaddr,因为看起来DNS gethostbyname 是唯一用于从NetBios名称到IP的转换。

从苹果公司的源代码来看,在'status'模式下,smbutil应用程序首先调用'nb_resolvehost',它只是使用'gethostbyname'从NetBios名称获取IP地址。 'gethostbyname'在幕后使用DNS:

nb_resolvehost_in(const char *name, struct sockaddr **dest)
{
    struct hostent* h;
    struct sockaddr_in *sinp;
    int len;

    h = gethostbyname(name);
    if (!h) {
        warnx("can't get server address `%s': ", name);
        herror(NULL);
        return ENETDOWN;
    }
    if (h->h_addrtype != AF_INET) {
        warnx("address for `%s' is not in the AF_INET family", name);
        return EAFNOSUPPORT;
    }
    if (h->h_length != 4) {
        warnx("address for `%s' has invalid length", name);
        return EAFNOSUPPORT;
    }
    len = sizeof(struct sockaddr_in);
    sinp = malloc(len);
    if (sinp == NULL)
        return ENOMEM;
    bzero(sinp, len);
    sinp->sin_len = len;
    sinp->sin_family = h->h_addrtype;
    memcpy(&sinp->sin_addr.s_addr, h->h_addr, 4);
    sinp->sin_port = htons(SMB_TCP_PORT);
    *dest = (struct sockaddr*)sinp;
    return 0;
}

调用此函数后,'smbutil status' 将使用函数 'nbns_getnodestatus' 在 SMB 端口上向先前给定的 IP 地址发送某种 SMB 查询。通过此查询,命令获取工作组和服务器名称(不确定此处指的是哪个服务器)。

请问您能否看一下这个帖子?您有没有什么想法来解决从连接的Wi-Fi网络扫描中获取主机名的问题?像Fing、Net Analyzer等其他应用程序都能够获取主机名。 - Chintan Shah
如果你已经在枚举IP地址,你可以像这里所示一样对地址进行反向DNS。但需要注意的是,枚举网络可能会导致您的应用被标记为恶意软件,建议考虑使用组播代替。 - Liam Kelly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接