我寻找如何在堆栈溢出的Java中进行IP查找,但答案与我已经在做的匹配,并没有解决我的问题。
public void printHostname( String ip ) {
System.out.println( InetAddresses.forString( ip ).getCanonicalHostName( ) );
}
问题:此代码与预期的一些IP广告,而不是与其他一些。
例如,对于IP 157.55.39.29,输出为:
msnbot-157-55-39-29.search.msn.com
根据Linuxhost
命令,此结果似乎是正确的:
> host 157.55.39.29
29.39.55.157.in-addr.arpa domain name pointer msnbot-157-55-39-29.search.msn.com.
> host 123.125.71.75
75.71.125.123.in-addr.arpa domain name pointer baiduspider-123-125-71-75.crawl.baidu.com.
123.125.71.75
baiduspider-123-125-71-75.crawl.baidu.com
返回:
此IP地址的完全限定域名,如果安全检查不允许此操作,则返回IP地址的文本表示形式。
但我很确定这不是安全检查的问题...或者我不明白出了什么问题。
你有什么建议来解释这种行为吗?你有变通办法吗?
// first lookup the hostname
host = nameService.getHostByAddr(addr.getAddress());
/* check to see if calling code is allowed to know
* the hostname for this IP address, ie, connect to the host
*/
if (check) {
SecurityManager sec = System.getSecurityManager();
if (sec != null) {
sec.checkConnect(host, -1);
}
}
/* now get all the IP addresses for this hostname,
* and make sure one of them matches the original IP
* address. We do this to try and prevent spoofing.
*/
InetAddress[] arr = InetAddress.getAllByName0(host, check);
问题在于java.net.inetadress
有一个针对IP欺骗的特定过程。
它首先将名称解析为(an)ip地址(es)。这很好用。在您的例子中,结果是两个IP请求。inetadress
然后检查这些代理是否(至少有一个)解析为原始输入名称。
如果他们没有,它只是返回原始的ip地址。下图显示了检查baiduspider-123-125-71-75.crawl.baidu.com
后的情况
nslookup baiduspider-123-125-71-75.crawl.baidu.com
Server: 192.168.2.1
Address: 192.168.2.1#53
Non-authoritative answer:
Name: baiduspider-123-125-71-75.crawl.baidu.com
Address: 62.157.140.133
Name: baiduspider-123-125-71-75.crawl.baidu.com
Address: 80.156.86.78
字符串addr=address.gethostname(inetaddress.getbyname("123.125.71.75“);
输出与预期一样baiduspider-123-125-71-75.crawl.baidu.com
免责声明:由于我是一名Java开发人员,而不是安全专家,所以我并不完全了解使用伪造的ip地址所带来的安全影响。
我使用Spring Cloud Eureka Server和Config Server作为Discovery First,我的问题是: 当服务注册中心在eureka服务器中自行运行时,它返回的配置服务器URL为http://LOCALHOST:8888http://{HOST_NAME}}:8888的intead和其他服务器中托管的所有其他服务都找不到其配置。 日志行: 正在从以下位置的服务器获取
我试图让2支球队互相比赛。当我说团队1.玩(团队2)时,我称之为;当 i 生成的数字小于 0.5 时,team2 应获胜,如果大于 0.5,则团队 1 应获胜。当团队 1 获胜时,它会正确显示为尼克斯,但当团队 2 获胜时,它会显示内存地址。我怎么能让它正确地说网是赢的,而不是team@78987neu73
有没有办法让这起作用?修改IP地址(例如)是可以接受的。 我考虑过的事情: > 打开它,并根据IP地址标识所有主机:
问题内容: 这是我的发件人实体 当我尝试执行以下查询时: 发生以下错误: 错误:org.hibernate.property.BasicPropertyAccessor- HHH000123:类中的IllegalArgumentException:be.gimme.persistence.entities.Sender,属性的设置方法:senderId 错误:org.hibernate.prope
我正在使用Yaml(和Python!)第一次。我试图从一个.yaml文件中加载多个文档,但没有得到我所期望的结果。我正在期待一个包含每个文档的dicts的dict返回,但却得到了一个生成器对象...?我应该注意到,当我在前面的测试中对单个文档yaml文件使用yaml.load()(而不是load_all())时,我能够很好地取回一个字典。 ...产生以下终端输出: