网络扫描是指通过扫描目标装备的网络端口,获得装备开放的服务信息,从而肯定装备的安全状态和系统运行情况。 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在情况需要时进行网络扫描。同时,也需要注意不要滥用网络扫描功能,以免侵犯他人的隐私和安全。
本文来源:https://www.yuntue.com/post/83282.html | 云服务器网,转载请注明出处!