12

iOS上有什么方法可以NetBIOS使用IP地址解析名称吗?

可以使用终端命令NetBIOS在 Mac 上解析名称:

smbutil -v 状态 -ae

smbutil 是开源的,所以你可以在这里找到它:http: //www.apple.com/opensource/ -> http://opensource.apple.com//source/smb/

在 GitHub 上也是如此: https ://github.com/unofficial-opensource-apple/smb

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

4

1 回答 1

0

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

查看来自 Apple 的源代码,“状态”模式下的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 查询。从这个查询命令获取 Workgroup 和 Servername(不确定这是指哪个服务器)。

于 2020-01-17T17:56:40.960 回答