在iOS上解析NetBIOS名称

在iOS上解析NetBIOS名称,ios,network-programming,netbios,Ios,Network Programming,Netbios,在iOS上有没有办法使用IP地址解析NetBIOS的名称 可以使用终端命令: smbutil-v状态-ae smbutil是开源的,因此您可以在此处找到它: -> 在GitHub上也是如此: 但是util广泛使用私有和Mac OS特定的框架,因此Xcode甚至无法为iOS编译源代码。我认为您只需要进行反向DNS查找,因为它看起来像DNS,是唯一用于从NetBios名称转换为IP的东西 查看来自Apple的源代码,处于“状态”模式的应用程序首先调用“仅使用“gethostbyname”从NetB

在iOS上有没有办法使用IP地址解析NetBIOS的名称

可以使用终端命令:

smbutil-v状态-ae

smbutil是开源的,因此您可以在此处找到它: ->

在GitHub上也是如此:


但是util广泛使用私有和Mac OS特定的框架,因此Xcode甚至无法为iOS编译源代码。

我认为您只需要进行反向DNS查找,因为它看起来像DNS,是唯一用于从NetBios名称转换为IP的东西

查看来自Apple的源代码,处于“状态”模式的应用程序首先调用“仅使用“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”然后使用函数“”向SMB端口上先前给定的IP地址发送某种SMB查询。从该查询中,命令获取工作组和服务器名(不确定这是指哪台服务器)。

您是否尝试将Apple smb代码隔离为仅用于名称解析的代码?看起来代码要少得多,只需要支持
nbns\u resolvename
:你能看看这个吗?您知道如何解决从已连接的wi-fi网络扫描中获取主机名的问题吗?App Store上的其他应用程序,如Fing、Net Analyzer,可以获取主机名。@ChintanShah如果您已经在枚举IP地址,您可以按所示反转DNS地址。不过,一般警告是,枚举网络可能会将你的应用程序标记为恶意软件,你可能想转而研究多播。