标签: gethostbyaddr

InetAddress.getCanonicalHostName()返回IP而不是Hostname

我在堆栈溢出中寻找了如何在Java中进行IP查找,但答案与我已经在做的事情相匹配,并没有解决我的问题.

这是我的代码:

public void printHostname( String ip ) {
    System.out.println( InetAddresses.forString( ip ).getCanonicalHostName( ) );
}
Run Code Online (Sandbox Code Playgroud)

InetAddresses只是一个来自番石榴库的实用程序类来获取InetAdress.

问题:此代码与某些IP地址一样正常工作,而不是与其他IP地址一起工作.

一个工作的例子

例如,对于IP 157.55.39.29,输出为:

msnbot-157-55-39-29.search.msn.com
Run Code Online (Sandbox Code Playgroud)

根据Linux host命令,这个结果似乎是正确的:

> host 157.55.39.29
29.39.55.157.in-addr.arpa domain name pointer msnbot-157-55-39-29.search.msn.com.
Run Code Online (Sandbox Code Playgroud)

一个不成功的例子

对于IP 123.125.71.75,该host命令返回:

> host 123.125.71.75
75.71.125.123.in-addr.arpa domain name pointer baiduspider-123-125-71-75.crawl.baidu.com.
Run Code Online (Sandbox Code Playgroud)

但是我的Java代码的输出是:

123.125.71.75
Run Code Online (Sandbox Code Playgroud)

而预期的产出应该是

baiduspider-123-125-71-75.crawl.baidu.com
Run Code Online (Sandbox Code Playgroud)

getCanonicalHostName方法的javadoc 说:

返回:
此IP地址的完全限定域名,或者如果安全检查不允许操作,则返回 IP地址的文本表示形式.

但我很确定这不是一个安全检查的问题......或者我不明白什么是错的.

你有什么建议来解释这种行为吗?你有解决方法吗?

编辑#1

在寻找解决方案时,我尝试在JDK中调试实现:

// first lookup the hostname
host = nameService.getHostByAddr(addr.getAddress());

/* check to see if calling code is …
Run Code Online (Sandbox Code Playgroud)

java dns gethostbyaddr

13
推荐指数
2
解决办法
1万
查看次数

难以使用Python的socket.gethostbyaddr()

我试图在python中使用socket.gethostbyaddr()来反转dns一个IP列表,它为某些值返回'Unknown Host',但是对同一个ip使用dig会返回Hostname.此外,挖掘似乎比使用python模块快得多,有什么具体原因吗?

import socket

# This returns 'Unknown Host' 
name, alias, addresslist = socket.gethostbyaddr('114.143.51.197')
Run Code Online (Sandbox Code Playgroud)

python networking dig gethostbyaddr python-sockets

9
推荐指数
1
解决办法
2万
查看次数

在Python中,获取有关IP地址的更多信息

gethostbyaddr在Python中知道,这对我有用.我希望得到更多关于IP地址的信息,就像人们可以在各种网站上找到的那样,例如谁拥有该IP地址,原籍国,......等等.我需要以编程方式完成此操作.

是否有用于Python的内置命令,或者我是否需要访问包含此类信息的某个数据库,或者是否有任何Python API?Python不是我的母语,所以我不熟悉如何在Python中解决这样的问题.

python reverse-dns gethostbyaddr pywhois

3
推荐指数
1
解决办法
2999
查看次数

如果未释放hostent中的指针,gethostbyname_r会泄漏内存吗?

原型gethostbyname_r是:

int gethostbyname_r(const char *name,
    struct hostent *ret, char *buf, size_t buflen,
    struct hostent **result, int *h_errnop);
Run Code Online (Sandbox Code Playgroud)

为了避免不可重入gethostbyname,我写了这些东西:

int host2addr(const char *host, struct in_addr *addr) {
    struct hostent he, *result;
    int herr, ret, bufsz = 512;
    char *buff = NULL;
    do {
        char *new_buff = (char *)realloc(buff, bufsz);
        if (new_buff == NULL) {
            free(buff);
            return ENOMEM;
        }   
        buff = new_buff;
        ret = gethostbyname_r(host, &he, buff, bufsz, &result, &herr);
        bufsz *= 2;
    } while (ret == ERANGE); …
Run Code Online (Sandbox Code Playgroud)

c linux networking posix gethostbyaddr

3
推荐指数
1
解决办法
1434
查看次数

Django 获取客户端的域名/主机名

获取用户的主机/域名(如果有)的最简单方法是什么?或者是否有一个函数可以查找用户的IP地址以查看它是否绑定到指定地址?(即 PHP 中的 gethostbyaddr())

HttpRequest.get_host() 仅返回用户的IP 地址。

python django gethostbyaddr

2
推荐指数
1
解决办法
1万
查看次数

Python 套接字:gethostbyaddr:反向 DNS 查找失败

socket.gethostbyaddr(ip_addr)我在特定站点上使用时获取主机名时遇到问题。

我不会详细说明这不适用于哪个网站。

因此,通过名称获取主机对于到目前为止我尝试过的每个站点都可以正常工作,但是当我尝试从中获取站点名称时,我收到一条错误消息 ing host not found

修复或替代方案对于拥有完整的数据来说是很好的。如果没有解决办法,我只能省略主机名。没什么大不了的。谢谢您的帮助。

# not full code
hostip = socket.gethostbyname(hostname)
print socket.gethostbyaddr(hostip)

Error: socket.herror: [Errno 11004] host not found
Run Code Online (Sandbox Code Playgroud)

python sockets reverse-dns gethostbyaddr

2
推荐指数
1
解决办法
9370
查看次数