问一个java域名反向解析的问题

guoxiangjun 2009-08-07 05:04:00
要完成把一个外网ip地址转换成域名,,,查了很多资料。不知道该怎么办。查资料有2种解释 1:反向解析首先要求被解析的机器的DNS支持;很遗憾,国内大多数ISP并不提供这种服务,所以无论用什么开发工具,也不能反向解析出域名
2:通过dnsjava第三方jar实现。。。我有以下代码

public static String reverseDns(String hostIp) throws IOException {
Resolver res = new SimpleResolver();
Name name = ReverseMap.fromAddress(hostIp);
int type = Type.PTR;
int dclass = DClass.IN;
Record rec = Record.newRecord(name, type, dclass);
Message query = Message.newQuery(rec);
Message response = res.send(query);

Record[] answers = response.getSectionArray(Section.ANSWER);
if (answers.length == 0)
return hostIp;
else
return answers[0].rdataToString();
}

网上说这个例子可以执行,我试了怎么还是不行。。哪为大虾给个帮助呀。。。。。
...全文
298 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
s_kuang 2009-09-23
  • 打赏
  • 举报
回复
1:dns服务器必须要支持反向查询
2:如果反向查询的应答报文数据量较多,可能存在截断(TC 标志为1),则还需要重新构造查询报文,建立同dns服务器的tcp连接。上面中的flag标志用于区分TC标志为1,如果TC标志为1,则dns消息头部最前面2字节为dns头部的实际长度。
s_kuang 2009-09-23
  • 打赏
  • 举报
回复
unsigned int DNS_MakDnsInverseReqPkt(unsigned char *buf, unsigned int *buflen, unsigned int ulIP, unsigned short flag)
{
DNS_HEAD_S *pstDNS_head = NULL;
DNS_QUST_S query_name = {0};
unsigned char *cur = NULL;
int len = 0;

if(buf == 0)
{
return 1;
}


if(flag == 1) /*tcp flag is '1'*/
{
buf += 2;/*预留2字节*/
}

pstDNS_head = (DNS_HEAD_S *)buf;

pstDNS_head->usTransID = get_random();
pstDNS_head->usFlag = 0x0100;

pstDNS_head->usQutn = 1;

dns_head_hton(pstDNS_head);

cur = buf + sizeof(DNS_HEAD_S);


len = dns_mak_dom_inverse_qNameStr(query_name.ucName, ulIP);


printf("DNS_ParaseDnsRespPkt line = %u\r\n", __LINE__);

query_name.usQType = Q_PTR;
query_name.usQClass = 1;

dns_qust_hton(query_name);

/* snprintf(cur, len, "%s", query_name.ucName);*/
memcpy(cur, query_name.ucName, len);
cur += len;

memcpy(cur, &query_name.usQType, sizeof(query_name.usQClass) + sizeof(query_name.usQType));
cur += sizeof(query_name.usQClass) + sizeof(query_name.usQType);
*buflen = cur - buf;

if(flag == 1) /*tcp flag is '1'*/
{
len = cur - buf;
len = htons(len);
buf -= 2;/*预留2字节*/
memcpy(buf, &len, 2);
*buflen = cur - buf;
}


return 0;
}
anonymsean 2009-08-09
  • 打赏
  • 举报
回复
1:反向解析首先要求被解析的机器的DNS支持;很遗憾,国内大多数ISP并不提供这种服务,所以无论用什么开发工具,也不能反向解析出域名

上面这句说得很清楚了.DNS服务器一般不提供反向解析,如果说有谁能提供这样的JAR包来反向解析IP地址,那么我倒想知道是怎么实现的.
bayougeng 2009-08-09
  • 打赏
  • 举报
回复
如果DNS不支持的话,估计是没办法了。
除非你能搞到dns的数据库,然后反过来查。哈哈,能耐大了!
vaser 2009-08-07
  • 打赏
  • 举报
回复
没那jar包,无能为了乎!

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧