python数据库开发 dga_python dig 模拟—— DGA域名判定用

#!/usr/bin/env python

importdns.resolver, sysdefget_domain_ip(domain):"""Get the DNS record, if any, for the given domain."""dns_records=list()try:#get the dns resolutions for this domain

dns_results =dns.resolver.query(domain)

dns_records= [ip.address for ip indns_results]exceptdns.resolver.NXDOMAIN as e:print "the domain does not exist so dns resolutions remain empty. domain:", domainexceptdns.resolver.NoAnswer as e:print "the resolver is not answering so dns resolutions remain empty, domain:", domainreturndns_records

hostname= sys.argv[1]print "Recursive name lookup (simulates dig)..."n=hostnametry:whileTrue:for rdata in dns.resolver.query(n, 'CNAME') :printn, "cname is", rdata

n=rdata.targetexcept:print get_domain_ip(n)

例如:

python dig_ip.py 8264.com

Recursive name lookup (simulates dig)...

8264.com cname is qaz2d84guo7uz5q2.gfnormal01at.com.

[u'121.29.18.91'] =>IP地址

python dig_ip.py www.baidu.com

Recursive name lookup (simulates dig)...

www.baidu.com cname is www.a.shifen.com.

www.a.shifen.com. cname is www.wshifen.com.

[u'103.235.46.39', u'103.235.46.40'] =>IP地址

来一个无查询结果的 DGA域名:

python dig_ip.py s09xo3-l5domek9ck5ct3go4m.com

Recursive name lookup (simulates dig)...

the domain does not exist so dns resolutions remain empty. domain: s09xo3-l5domek9ck5ct3go4m.com

[]

其中,dns.resolver.NoAnswer会在查询类别错误时候跑出此异常,例如:

python dig_ip.py www.baidu.com

Recursive name lookup (simulates dig)...

www.baidu.com cname is www.a.shifen.com.

www.a.shifen.com. cname is www.wshifen.com.

The DNS response does not contain an answer to the question: www.wshifen.com. IN CNAME

最后重构下代码:

#!/usr/bin/env python

importdns.resolver, sysdefget_domain_ip(domain):"""Get the DNS record, if any, for the given domain."""dns_records=list()try:#get the dns resolutions for this domain

dns_results =dns.resolver.query(domain)

dns_records= [ip.address for ip indns_results]exceptdns.resolver.NXDOMAIN as e:print "the domain does not exist so dns resolutions remain empty. domain:", domainexceptdns.resolver.NoAnswer as e:print "the resolver is not answering so dns resolutions remain empty, domain:", domainreturndns_recordsdefdig_ip(n):try:whileTrue:for rdata in dns.resolver.query(n, 'CNAME') :print n, "cname is", rdata

n=rdata.targetexceptException as e:printereturnget_domain_ip(n)if __name__ == "__main__":print "Recursive name lookup (simulates dig)..."

print dig_ip(sys.argv[1])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值