Python网络扫描:掌握基本的端口扫描和服务识别技术
网络扫描是指通过扫描目标设备的网络端口,获取设备开放的服务信息,从而确定设备的安全状态和系统运行情况。 Python是一种强大的编程语言,在网络扫描方面也提供了丰富的库和工具,本文将介绍Python网络扫描的基本知识和代码演示。
- 端口扫描
网络通信是通过端口来实现的,不同的服务会监听不同的端口。通过扫描目标设备的端口,可以确定设备开放的服务和疑似存在的漏洞等信息。Python提供了socket模块,可以实现端口扫描功能。
首先,我们需要导入socket模块,使用socket.getaddrinfo()函数获取目标设备的IPV4地址和端口号。接着,使用socket.socket()函数创建socket对象,设置socket的timeout属性,以避免长时间的等待。然后,使用socket.connect_ex()函数尝试连接目标主机,如果连接成功,则表明该端口开放,否则表明该端口关闭。
下面是一个简单的端口扫描代码:
import socket host = input("Enter the host name: ") print("Scanning host: ", host) for port in range(1, 1025): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(0.1) result = sock.connect_ex((host, port)) if result == 0: print("Port {} is open".format(port)) sock.close()
在上面的代码中,我们使用for循环扫描目标设备的前1024个端口。如果端口开放,则打印出端口号。
- 服务识别
除了端口扫描,服务识别也是网络扫描中的一种重要技术。通过服务识别,可以识别出设备所运行的操作系统、启用的服务、使用的协议和版本号等信息,从而更好地了解设备的安全情况。
Python中,可以使用第三方模块nmap实现服务识别功能。nmap是一款强大的端口扫描和服务识别工具,可以在不同的操作系统中使用。在Python中,可以使用python-nmap模块来集成nmap的功能。
首先,我们需要安装nmap和python-nmap模块,命令如下:
sudo apt install nmap pip install python-nmap
接着,我们可以使用python-nmap模块来实现服务识别功能。下面是一个简单的服务识别代码:
import nmap nm = nmap.PortScanner() host = input("Enter the host name: ") print("Scanning host: ", host) try: nm.scan(host) except nmap.PortScannerError: print("Cannot scan host ", host) for port in nm[host]['tcp']: print('Port {}: '.format(port), nm[host]['tcp'][port]['name'], nm[host]['tcp'][port]['state'])
在上面的代码中,我们使用nmap.PortScanner()函数来创建一个端口扫描器。使用nm.scan()函数扫描目标设备,然后使用nm[host]['tcp']来获取TCP端口信息。通过打印输出TCP端口的名称和状态,我们可以了解设备上运行的服务信息。
- 示例演示
下面是一个综合演示代码,实现了一次网络扫描。该代码首先进行端口扫描,然后根据开放的端口号进行服务识别,并打印出设备的相关信息。
import socket import nmap host = input("Enter the host name: ") print("Scanning host: ", host) # Port Scanning print("Port scanning: ") open_ports = [] for port in range(1, 1025): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(0.1) result = sock.connect_ex((host, port)) if result == 0: open_ports.append(port) print("Port {} is open".format(port)) sock.close() # Service Detection print("Service detection: ") nm = nmap.PortScanner() try: for port in open_ports: nm.scan(host, str(port)) print('Port {}: '.format(port), nm[host]['tcp'][port]) except nmap.PortScannerError: print("Cannot scan host ", host)
在上面的代码中,我们首先使用socket模块进行端口扫描,然后根据开放的端口号使用nmap进行服务识别。通过打印输出设备的相关信息,我们可以更好地了解设备的运行情况和安全状况。
总结
Python网络扫描是一种常用的信息获取和安全评估技术,能够快速了解设备的网络拓扑结构、运行的服务和漏洞等信息。通过掌握基本的端口扫描和服务识别技术,我们可以使用Python在情况需要时进行网络扫描。同时,也需要注意不要滥用网络扫描功能,以避免侵犯他人的隐私和安全。
相关文章