Python网络扫描:掌握基本的端口扫描和服务识别技术

2023-04-17 00:00:00 识别 扫描 和服务

网络扫描是指通过扫描目标设备的网络端口,获取设备开放的服务信息,从而确定设备的安全状态和系统运行情况。 Python是一种强大的编程语言,在网络扫描方面也提供了丰富的库和工具,本文将介绍Python网络扫描的基本知识和代码演示。

  1. 端口扫描

网络通信是通过端口来实现的,不同的服务会监听不同的端口。通过扫描目标设备的端口,可以确定设备开放的服务和疑似存在的漏洞等信息。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个端口。如果端口开放,则打印出端口号。

  1. 服务识别

除了端口扫描,服务识别也是网络扫描中的一种重要技术。通过服务识别,可以识别出设备所运行的操作系统、启用的服务、使用的协议和版本号等信息,从而更好地了解设备的安全情况。

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端口的名称和状态,我们可以了解设备上运行的服务信息。

  1. 示例演示

下面是一个综合演示代码,实现了一次网络扫描。该代码首先进行端口扫描,然后根据开放的端口号进行服务识别,并打印出设备的相关信息。

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在情况需要时进行网络扫描。同时,也需要注意不要滥用网络扫描功能,以避免侵犯他人的隐私和安全。

相关文章