一种获取IP地址的方法及系统
技术领域
本发明属于通信技术领域,尤其涉及一种获取IP地址的方法及系统。
背景技术
在软件开发过程中或一般的数据请求过程中,经常会遇到域名系统(DNS,DomainName System)污染导致DNS服务器解析异常的情况,进而导致应用无法正常访问服务器,获取不到相应的互联网协议(IP,Internet Protocol)地址,进而导致应用无法正常使用。
基于此,本发明提供一种获取IP地址的方法及系统,以能避免出现DNS污染或者DNS服务器解析异常,使得可以正常获取到IP地址,访问服务器。
发明内容
针对现有技术存在的问题,本发明实施例提供了一种获取IP地址的方法及系统,用于解决现有技术中在软件开发过程中,由于DNS污染或者DNS服务器解析异常,导致应用无法正常访问服务器的技术问题。。
本发明提供一种获取IP地址的方法,所述方法包括:
域名系统服务器通过预设的端口接收客户端发送的DNS访问请求;
根据所述DNS访问请求向DNS接口返回预定格式的IP数据包;
利用DNS接口对所述IP数据包进行解析,获取待请求的IP地址;
向所述客户端发送所述IP地址;
其中,所述DNS服务器为预先建立的,且独立于应用系统提供的DNS服务器;所述DNS接口为预先建立的,且所述DNS接口使用的解析协议独立于应用系统提供的解析协议。
上述方案中,所述DNS服务器通过预设的端口接收客户端发送的DNS访问请求,包括:
建立套接字通讯协议SSL;
所述DNS服务器基于所述SSL协议,通过预设的端口接收客户端发送的DNS访问请求。
上述方案中,所述DNS服务器基于所述SSL协议,通过预设的端口接收客户端发送的DNS访问请求,包括:
利用所述SSL协议中的SSLContext类调用getSSLContext方法获取SSL环境变量context;
利用所述环境变量context调用getSocketFactory方法获取socket工厂对象;
利用所述socket工厂对象的createSocket方法创建SSLScoket连接;
基于所述SSLScoket连接,通过预设的端口接收客户端发送的DNS访问请求。
上述方案中,所述根据所述DNS访问请求向DNS接口返回预定格式的IP数据包之前,还包括:
解析所述DNS访问请求,获取第一校验时间,所述第一校验时间为DNS服务器计算出的自身当前的时间毫秒值;
计算所述第一校验时间与本地时间毫秒值的时间差值;
判断所述时间差值是否大于预设的时间值,若所述时间差值大于所述预设的时间值,则忽略所述DNS访问请求。
上述方案中,所述根据所述DNS访问请求向DNS接口返回预定格式的IP数据包,包括:
若时间差值不大于所述预设的时间值,则利用加密算法对域名数据、IP数据及第二校验时间进行加密,并打包成IP数据包;
计算所述IP数据包的长度;
将所述IP数据包及所述IP数据包的长度返回至所述DNS接口;其中,所述第二校验时间指客户端计算出的自身当前的时间毫秒值。
上述方案中,利用DNS接口对所述IP数据包进行解析,获取待请求的IP地址,包括:
根据IP数据包的长度字段读取加密的数据;
利用预先约定的密钥对所述数据进行解密;
利用lookup回调方法在解密后的数据中读取待请求的域名,根据所述域名查询出相应的IP地址。
上述方案中,当所述DNS服务器异常时,所述方法还包括:
基于应用系统提供的解析协议,利用lookup回调方法调用Dns.SYSTEM.lookup(hostname)函数返回所述应用系统的DNS接口提供的解析数据。
本发明同时还提供一种获取IP地址的系统,所述系统包括:
域名系统服务器,用于通过预设的端口接收客户端发送的DNS访问请求;并
根据所述DNS访问请求向DNS接口返回预定格式的IP数据包;
DNS接口,用于对所述IP数据包进行解析,获取待请求的IP地址;并向所述客户端发送所述IP地址;
其中,所述DNS服务器为预先建立的,且独立于应用系统提供的DNS服务器;所述DNS接口为预先建立的,且所述DNS接口使用的解析协议独立于应用系统提供的解析协议。
上述方案中,所述DNS服务器具体用于:
利用所述SSL协议中的SSLContext类调用getSSLContext方法获取SSL环境变量context;
利用所述环境变量context调用getSocketFactory方法获取socket工厂对象;
利用所述socket工厂对象的createSocket方法创建SSLScoket连接;
基于所述SSLScoket连接,通过预设的端口接收客户端发送的DNS访问请求。
上述方案中,所述DNS接口具体用于:
根据IP数据包的长度字段读取加密的数据;
利用预先约定的密钥对所述数据进行解密;
利用lookup回调方法在解密后的数据中读取待请求的域名,根据所述域名查询出相应的IP地址。
本发明提供了一种获取IP地址的方法及系统,所述方法包括:域名系统服务器通过预设的端口接收客户端发送的DNS访问请求;根据所述DNS访问请求向DNS接口返回预定格式的IP数据包;利用DNS接口对所述IP数据包进行解析,获取待请求的IP地址;向所述客户端发送所述IP地址;其中,所述DNS服务器为预先建立的,且独立于应用系统提供的DNS服务器;所述DNS接口使用的解析协议独立于应用系统提供的解析协议;如此,通过建立DNS服务器及DNS接口,因DNS接口具有预先建立的DNS协议,且预先建立的DNS协议与系统协议不同,所以在利用自定义的DNS协议对域名进行解析时,可以避免DNS受到污染,从而能正常获取到待访问的IP地址,进行数据的正常访问。
附图说明
图1为本发明实施例一提供的获取IP地址的方法流程示意图;
图2为本发明实施例二提供的获取IP地址的系统结构示意图。
具体实施方式
为了在软件开发过程中或一般的数据请求过程中,避免DNS污染导致DNS服务器解析异常的情况出现,本发明提供了一种获取IP地址的方法及系统,所述方法包括:域名系统服务器通过预设的端口接收客户端发送的DNS访问请求;根据所述DNS访问请求向DNS接口返回预定格式的IP数据包;利用DNS接口对所述IP数据包进行解析,获取待请求的IP地址;向所述客户端发送所述IP地址;其中,所述DNS服务器为预先建立的,且独立于应用系统提供的DNS服务器;所述DNS接口使用的解析协议独立于应用系统提供的解析协议。
下面通过附图及具体实施例对本发明的技术方案做进一步的详细说明。
实施例一
本实施例提供一种获取IP地址的方法,如图2所示,所述方法包括:
S101,域名系统服务器通过预设的端口接收客户端发送的DNS访问请求。
本步骤中,当客户端需要进一步访问获取数据时,需要向DNS服务器获取IP地址来实现,那么客户端就需要向DNS服务器发送DNS访问请求,DNS服务器通过端口来接收DNS访问请求,使得客户端能访问服务器自身的IP地址及端口。其中,所述DNS访问请求包括:待请求的域名、第一校验时间及数据长度。这里,因发送DNS请求时,网络传输会有时间消耗,所以所述第一校验时间为DNS服务器计算出的自身当前的时间毫秒值。
DNS服务器通过预设的端口接收客户端发送的DNS访问请求,具体包括:建立套接字通讯协议SSL;所述DNS服务器基于所述SSL协议,通过预设的端口接收客户端发送的DNS访问请求。
这里,为了保证DNS服务器的安全性,本实施例使用SSL协议作为DNS请求的通讯协议,SSL协议是一种安全的套接字协议,在Android中使用SSL需要通过java提供的SSLSocket组件来实现,具体地,所述DNS服务器基于所述SSL协议,通过预设的端口接收客户端发送的DNS访问请求,包括:
利用所述SSL协议中的SSLContext类调用getSSLContext方法获取SSL环境变量context;利用所述环境变量context调用getSocketFactory方法获取socket工厂对象;利用所述socket工厂对象的createSocket方法创建SSLScoket连接;基于所述SSLScoket连接,通过预设的端口接收客户端发送的DNS访问请求。
为了避免运行商等第三方监听数据,导致数据不安全,本实施例中的DNS服务器预先建立的,且独立于应用系统提供的DNS服务器;且所述DNS服务器与客户端可以约定一个预设的端口,该端口独立于应用系统提供的端口,所述端口可以定义为(1500,65535)之间中的任意一个自然数,本实施例中的端口定义为10000。
另外,为了进一步确保数据的安全性,客户端在发送DNS访问请求之前,需要利用AES加密算法对DNS访问请求进行加密。
S102,根据所述DNS访问请求向DNS接口返回预定格式的IP数据包。
本步骤中,根据所述DNS访问请求向DNS接口返回预定格式的IP数据包之前,所述方法还包括:解析所述DNS访问请求,获取待请求的域名数据、第一校验时间及数据长度;获取本地时间毫秒值,根据所述时间毫秒值与所述第一校验时间确定一时间差值,判断所述时间差值是否大于预设的时间值,若所述时间差值大于所述预设的时间值,则忽略所述DNS访问请求,以防止DNS接口被第三方抓包后重试,提高请求的安全性。
那么根据所述DNS访问请求向DNS接口返回预定格式的IP数据包,具体包括:若所述时间差值不大于所述预设的时间值,则利用加密算法对域名数据、IP数据及第二校验时间进行加密,并打包成IP数据包;计算所述IP数据包的长度;将所述IP数据包及所述IP数据包的长度返回至DNS接口。其中,所述预定格式的IP数据包是指本实施例自定义的DNS协议格式的IP数据包。这里,因返回数据包时,网络传输会有时间消耗,所以所述第二校验时间指客户端计算出的自身当前的时间毫秒值。
S103,利用DNS接口对所述IP数据包进行解析,获取待请求的IP地址;并向所述客户端发送所述IP地址。
本步骤中,当DNS接口接收到所述IP数据包后,利用本实施例自定义的DNS解析协议对IP数据包进行解析,具体包括:
根据IP数据包的长度字段读取加密的数据;利用预先约定的密钥对所述数据进行解密;利用lookup回调方法在解密后的数据中读取待请求的域名,在索引表中根据所述域名查询出相应的IP地址。最后将相应的IP地址发送至客户端。这里,因所述DNS接口使用的解析协议是本实施例自定义的,独立于应用系统提供的解析协议,那么在利用自定义的DNS协议对域名进行解析时,可以避免DNS受到污染,从而避免出现DNS数据异常的情况。
当然,若本实施例提供的DNS服务器出现异常,比如出现宕机、SSLScoket连接超时或者返回数据异常时等,此时需要调用应用系统提供的DNS接口返回的解析数据,具体地,基于应用系统提供的解析协议,利用lookup回调方法调用Dns.SYSTEM.lookup(hostname)函数返回所述应用系统的DNS接口提供的解析数据,进而获取待访问的IP地址。
实施例二
相应于实施例一,本实施例还提供了一种获取IP地址的系统,如图2所示,所述系统包括:DNS服务器21、客户端22及DNS接口23;其中,
所述DNS服务器21用于通过预设的端口接收客户端22发送的DNS访问请求;具体地,当客户端22需要进一步访问获取数据时,需要向DNS服务器21获取IP地址来实现,那么客户端22就需要向DNS服务器21发送DNS访问请求,DNS服务器21通过端口来接收DNS访问请求,使得客户端22能访问DNS服务器21自身的IP地址及端口。其中,所述DNS访问请求包括:待请求的域名、第一校验时间及数据长度。这里,因发送DNS请求时,网络传输会有时间消耗,所以所述第一校验时间为DNS服务器21计算出的自身当前的时间毫秒值。
DNS服务器21通过预设的端口接收客户端22发送的DNS访问请求,具体包括:建立套接字通讯协议SSL;所述DNS服务器21基于所述SSL协议,通过预设的端口接收客户端22发送的DNS访问请求。
这里,为了保证DNS服务器的安全性,本实施例使用SSL协议作为DNS请求的通讯协议,SSL协议是一种安全的套接字协议,在Android中使用SSL需要通过java提供的SSLSocket组件来实现,具体地,所述DNS服务器21基于所述SSL协议,通过预设的端口接收客户端22发送的DNS访问请求,包括:
利用所述SSL协议中的SSLContext类调用getSSLContext方法获取SSL环境变量context;利用所述环境变量context调用getSocketFactory方法获取socket工厂对象;利用所述socket工厂对象的createSocket方法创建SSLScoket连接;基于所述SSLScoket连接,通过预设的端口接收客户端22发送的DNS访问请求。
为了避免运行商等第三方监听数据,导致数据不安全,本实施例中的DNS服务器21预先建立的,且独立于应用系统提供的DNS服务器;且所述DNS服务器21与客户端22可以约定一个预设的端口,该端口独立于应用系统提供的端口,所述端口可以定义为(1500,65535)之间中的任意一个自然数,本实施例中的端口定义为10000。
另外,为了进一步确保数据的安全性,客户端22在发送DNS访问请求之前,需要利用AES加密算法对DNS访问请求进行加密。
当DNS服务器21接收到DNS访问请求后,用于根据所述DNS访问请求向DNS接口23返回预定格式的IP数据包;具体包括:DNS服务器21解析所述DNS访问请求,获取待请求的域名数据、第一校验时间及数据长度;获取本地时间毫秒值,根据所述时间毫秒值与所述第一校验时间确定一时间差值,判断所述时间差值是否大于预设的时间值,若所述时间差值大于所述预设的时间值,则忽略所述DNS访问请求,以防止DNS接口被第三方抓包后重试,提高请求的安全性。
那么DNS服务器21根据所述DNS访问请求向DNS接口23返回预定格式的IP数据包,具体包括:若所述时间差值不大于所述预设的时间值,DNS服务器21则利用加密算法对域名数据、IP数据及第二校验时间进行加密,并打包成IP数据包;计算所述IP数据包的长度;将所述IP数据包及所述IP数据包的长度返回至DNS接口23。其中,所述预定格式的IP数据包是指本实施例自定义的DNS协议格式的IP数据包。这里,因返回数据包时,网络传输会有时间消耗,所以所述第二校验时间是客户端22计算出的自身当前的时间毫秒值。
当DNS接口23接收到所述IP数据包后,利用本实施例自定义的DNS解析协议对IP数据包进行解析,具体包括:
DNS接口23根据IP数据包的长度字段读取加密的数据;利用预先约定的密钥对所述数据进行解密;利用lookup回调方法在解密后的数据中读取待请求的域名,在索引表中根据所述域名查询出相应的IP地址。最后将相应的IP地址发送至客户端22。这里,因所述DNS接口使用的解析协议是本实施例自定义的,独立于应用系统提供的解析协议,那么在利用自定义的DNS协议对域名进行解析时,可以避免DNS受到污染,从而避免出现DNS数据异常的情况。
当然,若本实施例提供的DNS服务器21出现异常,比如出现宕机、SSLScoket连接超时或者返回数据异常时等,此时需要调用应用系统提供的DNS接口返回的解析数据,具体地,系统基于应用系统提供的解析协议,利用lookup回调方法调用Dns.SYSTEM.lookup(hostname)函数返回所述应用系统的DNS接口提供的解析数据,进而获取待访问的IP地址。
本发明提供的获取IP地址的方法及系统能带来的有益效果至少是:
本发明提供了一种获取IP地址的方法及系统,所述方法包括:域名系统服务器通过预设的端口接收客户端发送的DNS访问请求;根据所述DNS访问请求向DNS接口返回预定格式的IP数据包;利用DNS接口对所述IP数据包进行解析,获取待请求的IP地址;向所述客户端发送所述IP地址;其中,所述DNS服务器为预先建立的,且独立于应用系统提供的DNS服务器;所述DNS接口使用的解析协议独立于应用系统提供的解析协议;如此,通过建立DNS服务器及DNS接口,因DNS接口具有预先建立的DNS协议,且预先建立的DNS协议与系统协议不同,所以在利用自定义的DNS协议对域名进行解析时,可以避免DNS受到污染,从而能正常获取到待访问的IP地址,进行数据的正常访问。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。