端口扫描概念
端口扫描原理
- 向目标主机的某个端口,发送建立链接的请求,如果开放了这个端口就会响应0 ,未开放则响应非0
设计方案规划
- 校验ip规则
- ip扫描
- 域名扫描
- 通过port建立链接
代码实现功能:
import socket
import re
def check_ip(ip):
# 校验ip
ip_address = re.compile('^(?:[0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.(?:[0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.'
'(?:[0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.(?:[0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$') # 正则表达式对象
if ip_address.match(ip) and len(ip) != 0:
return True
else:
return False
def scan_port(ip):
#接收用户扫描IP
# ip = input('输入IP>>>')
# ports = input('输入port 范围:eg 3-6>>>').strip()
# port_begin,port_end = ports.split('-')
port_begin, port_end = (31990, 32000)
for one in range(int(port_begin),int(port_end)+1):
# 使用IP实现tcp连接
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sk.settimeout(0.5)
# 访问成功返回0 返回有误返回非0 并不是报错
try:
coon = sk.connect_ex((ip,one))
if coon == 0:
print(f'主机{ip},{one} 已开放')
else:
print(f'主机{ip},{one} 未开放')
except:
pass
sk.close()
def scan_ip():
ip = input('输入需要扫描的IP>>>')
# 使用ip判断函数
if check_ip(ip):
scan_port(ip)
else:
print('ip格式有误,请检查')
# 域名扫描 --需要解析ip地址
def domain_name_sacn():
# 输入域名
domain_name = input('输入域名>>>')
# 可以做判断 ======================正则
if 'http://' in domain_name or 'https://' in domain_name:
domain_name = domain_name[domain_name.find("//"+3):]
print('正在解析的域名,,',domain_name)
# 获取ip
sever_ip = socket.gethostbyname(domain_name)
print(f'该域名{domain_name}的ip:{sever_ip}')
# 扫描端口函数
# 主入口
def main():
info = """
1 使用ip扫描
2 使用域名扫描
请选择(1/2)
"""
print(info)
# 接受用户输入
select = input('请选择(1/2)>>>')
if select == '1':
scan_ip()
elif select == '2':
domain_name_sacn()
else:
print('输入有误')
if __name__ == '__main__':
main()
嗨~今天你暴躁了吗?
~~~关注我,更多精彩内容带给你,关注私聊带走绝密知识~~~

浙公网安备 33010602011771号