Python网络安全:使用Python进行主机扫描和端口扫描

2023-04-17 00:00:00 扫描 主机 网络安全

在Python中进行主机扫描和端口扫描是网络安全中非常常见的操作之一。我们可以使用Python中的socket模块来创建套接字并进行连接,从而进行主机扫描和端口扫描。以下是使用Python进行主机扫描和端口扫描的详细说明和代码演示:

  1. 主机扫描

主机扫描是指扫描一个给定的IP地址范围(例如192.168.0.0-192.168.0.255)并查找哪些主机是活动的。我们可以使用socket模块中的ping方法来实现。这个方法会尝试向指定主机发送一条ICMP ping消息,如果主机活跃,则会收到响应。

以下是一个简单的IP地址范围扫描示例,它将扫描范围内的所有主机并打印出活动主机的IP地址:

import os

def ping_ip(ip):
    response = os.system("ping -n 1 " + ip)
    return response == 0

for i in range(0, 256):
    ip = "192.168.0." + str(i)
    if ping_ip(ip):
        print(ip)

在上面的代码中,我们使用了操作系统中的ping命令来发送ICMP ping消息。如果ping命令成功执行并返回0,则说明主机是活动的。

  1. 端口扫描

端口扫描是指尝试连接指定的IP地址和端口,如果连接成功,则说明该端口是开放的。我们可以使用Python中的socket模块来实现。

以下是一个简单的端口扫描示例,它将扫描指定IP地址上的所有端口并打印出开放的端口号:

import socket

target_host = "pidancode.com"

for port in range(1, 1025):
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.settimeout(0.1)
    try:
        client.connect((target_host, port))
        print("Port {} is open".format(port))
        client.close()
    except:
        pass

在上面的代码中,我们使用socket.socket方法创建一个TCP套接字,并使用client.connect方法尝试连接每个端口。如果连接成功,则可以认为该端口是开放的。

最后,我们有一个完整的网络安全应用程序,它将扫描指定IP地址范围内的所有主机并查找开放的端口:

import os
import socket

def ping_ip(ip):
    response = os.system("ping -n 1 " + ip)
    return response == 0

def scan_ports(ip):
    target_host = ip
    open_ports = []
    for port in range(1, 1025):
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.settimeout(0.1)
        try:
            client.connect((target_host, port))
            open_ports.append(port)
            client.close()
        except:
            pass
    return open_ports

ip_range = "192.168.0."

for i in range(0, 256):
    ip = ip_range + str(i)
    if ping_ip(ip):
        print("Scanning", ip)
        open_ports = scan_ports(ip)
        if open_ports:
            print(ip, "has the following open ports:", open_ports)

在上面的代码中,我们首先使用ping_ip方法检查每个IP地址是否是活动的,然后使用scan_ports方法扫描所有开放的端口。如果找到开放的端口,则打印出该IP地址和其开放的端口。

相关文章