59 lines
1.3 KiB
Python
59 lines
1.3 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
import socket
|
|
import dns.resolver
|
|
import re
|
|
|
|
|
|
def __check_ip(ip):
|
|
p = re.compile('^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$')
|
|
if p.match(ip):
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
def __resolution_a(domain):
|
|
query_list = []
|
|
a = dns.resolver.resolve(domain, 'A')
|
|
for i in a.response.answer:
|
|
for j in i.items:
|
|
if j.rdtype == 1:
|
|
ip = j.address
|
|
query_list.append(ip)
|
|
return query_list
|
|
|
|
|
|
def __detect_port(ip, port):
|
|
"""检测ip上的端口是否开放
|
|
"""
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
try:
|
|
s.connect((ip, int(port)))
|
|
s.shutdown(2)
|
|
return True
|
|
except:
|
|
return False
|
|
|
|
|
|
def detection(domain, port):
|
|
is_ip = __check_ip(domain)
|
|
__data = []
|
|
if is_ip:
|
|
port_status = __detect_port(ip=domain, port=port)
|
|
__data.append({
|
|
"domain": domain,
|
|
"port": port,
|
|
"status": port_status
|
|
})
|
|
else:
|
|
ips = __resolution_a(domain=domain)
|
|
for ip in ips:
|
|
port_status = __detect_port(ip=ip, port=port)
|
|
__data.append({
|
|
"domain": ip,
|
|
"port": port,
|
|
"status": port_status
|
|
})
|
|
return __data
|