我在堆栈溢出中寻找了如何在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地址的文本表示形式.
但我很确定这不是一个安全检查的问题......或者我不明白什么是错的.
你有什么建议来解释这种行为吗?你有解决方法吗?
在寻找解决方案时,我尝试在JDK中调试实现:
// first lookup the hostname
host = nameService.getHostByAddr(addr.getAddress());
/* check to see if calling code is …
Run Code Online (Sandbox Code Playgroud) 我试图在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) 我gethostbyaddr
在Python中知道,这对我有用.我希望得到更多关于IP地址的信息,就像人们可以在各种网站上找到的那样,例如谁拥有该IP地址,原籍国,......等等.我需要以编程方式完成此操作.
是否有用于Python的内置命令,或者我是否需要访问包含此类信息的某个数据库,或者是否有任何Python API?Python不是我的母语,所以我不熟悉如何在Python中解决这样的问题.
原型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) 获取用户的主机/域名(如果有)的最简单方法是什么?或者是否有一个函数可以查找用户的IP地址以查看它是否绑定到指定地址?(即 PHP 中的 gethostbyaddr())
HttpRequest.get_host() 仅返回用户的IP 地址。
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)