Python实现的tcp端口检测操作示例,是一种通过Python编程语言来实现TCP端口扫描的方法。通过该方法,可以检测目标主机上哪些端口是开放的,从而确定目标主机上运行的服务。
以下是实现该方法的完整攻略:
- 导入socket、time和argparse模块
首先,需要导入Python中的socket、time和argparse模块。其中socket模块用于网络编程,time模块用于处理时间方面的功能,argparse模块用于解析命令行参数。
import socket
import time
import argparse
- 实现TCP端口扫描函数
下一步,需要实现一个TCP端口扫描函数,该函数利用socket模块建立TCP连接,通过连接结果确定目标主机上的端口是否开放。并且,在进行连接之后,需要鉴别是否正确建立了连接,同时控制函数每次执行的时间。
def scan_tcp_port(ip, port, timeout=3):
"""
TCP端口扫描函数
"""
try:
# 建立socket连接
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
# 检测端口是否开放
result = sock.connect_ex((ip, port))
# 关闭socket连接
sock.close()
# 判断连接结果是否正常
if result == 0:
return True
else:
return False
except:
return False
- 解析命令行参数
接下来,需要解析命令行参数,也就是输入目标主机的IP和端口范围。其中IP地址可以使用单个地址或CIDR块格式,端口范围默认是0-65535。
def parse_arguments():
"""
解析命令行参数
"""
parser = argparse.ArgumentParser(description="TCP端口扫描脚本")
parser.add_argument("-ho", "--host", metavar="IP/CIDR", required=True, help="主机IP地址或CIDR块")
parser.add_argument("-p", "--port", metavar="1-65535", default="1-65535", help="端口范围")
args = parser.parse_args()
return args
- 实现主函数并调用TCP端口扫描函数
最后,我们需要实现程序的主函数,包括对命令行参数的解析、TCP端口扫描结果的输出等。在调用scan_tcp_port函数时,使用time模块控制扫描的间隔时间,便于观察结果。
if __name__ == "__main__":
# 解析命令行参数
args = parse_arguments()
host = args.host
ports = args.port.split("-")
# 确定端口范围
if len(ports) == 1:
start = 0
end = int(ports[0])
else:
start = int(ports[0])
end = int(ports[1])
# 开始扫描端口
for port in range(start, end+1):
for ip in socket.gethostbyname_ex(host)[-1]:
if scan_tcp_port(ip, port):
print("[+] {0}:{1} is open".format(ip, port))
time.sleep(0.5)
示例
例如,我们要检测主机192.168.199.1的1-1000端口是否开放,可以在命令行中执行以下命令:
$ python3 tcp_scan.py --host 192.168.199.1 --port 1-1000
执行结果将输出开放的端口及其IP地址,如下所示:
[+] 192.168.199.1:22 is open
[+] 192.168.199.1:80 is open
另外一个示例为检测某个网络中的所有主机的22端口是否开放,可以在命令行中执行以下命令:
$ python3 tcp_scan.py --host 192.168.199.0/24 --port 22
执行结果将输出所有开放的22端口的IP地址,如下所示:
[+] 192.168.199.1:22 is open
[+] 192.168.199.2:22 is open
[+] 192.168.199.3:22 is open
...
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现的tcp端口检测操作示例 - Python技术站