1.端口扫描原理
尝试与目标主机建立连接,如果目标主机有回复则说明端口开放
2.设计方案规划
- 增加多端口扫描
- 增加域名扫描
3.代码实现
- 知识点
方法 | 备注 |
---|---|
connect() | 主动初始化TCP服务器连接,一般address的格式为元组(hostname,prot),如果连接出错,返回socket.error错误 |
connect_ex() | connect()函数的扩展版本,出错是返回错误码,而不是抛出异常 。返回值为0,则代表连接成功 |
re. compile() | 编译正则表达式,生成一个 Pattern 对象,单独使用没有任何意义,需要和findall(), search(), match()搭配使用 |
split() | 通过指定分隔符对字符串进行切片 |
-
正则表达式
IP正则表达式:((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}
域名正则表达式:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.? -
代码
#扫描工具v1.1
#导包
import socket
import re
#1.检验ip
def check_ip(ip):
#1.正则表达判断ip是否正确,ip的正则表达式:((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}
ip_re=re.compile('((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')
if ip_re.match(ip