首页云计算 正文

解决使用Python检查本地网络中运行的Web服务器的问题

2024-12-09 3 0条评论

使用Python检查本地网络中运行的Web服务器

在本地网络中查找和检测运行的Web服务器是一项常见任务,特别是在网络管理和安全测试中。Python提供了多种工具和库,使得这项任务变得更加简单和高效。本文将介绍如何使用Python检查本地网络中运行的Web服务器。

1. 基础准备

首先,需要确保你的系统已经安装了Python及相关库。本文将使用以下Python库:

  • socket:用于网络通信。
  • subprocess:用于运行系统命令。
  • requests:用于发送HTTP请求。

可以使用以下命令安装 requests库:

pip install requests

2. 获取本地网络的IP范围

要扫描本地网络中的Web服务器,首先需要知道本地网络的IP地址范围。可以使用 socketsubprocess库获取本机的IP地址,并推断出网络范围。

import socket
import subprocess

def get_local_ip():
    hostname = socket.gethostname()
    local_ip = socket.gethostbyname(hostname)
    return local_ip

def get_ip_range():
    local_ip = get_local_ip()
    ip_parts = local_ip.split('.')
    ip_range = f"{ip_parts[0]}.{ip_parts[1]}.{ip_parts[2]}.0/24"
    return ip_range

print("Local IP:", get_local_ip())
print("IP Range:", get_ip_range())

3. 扫描IP地址范围

使用 subprocess库运行 nmap命令,扫描本地网络中的IP地址范围,以查找开放的HTTP端口(80和443)。

import subprocess

def scan_network(ip_range):
    result = subprocess.run(['nmap', '-p', '80,443', ip_range], stdout=subprocess.PIPE)
    return result.stdout.decode()

ip_range = get_ip_range()
scan_result = scan_network(ip_range)
print(scan_result)

请确保已安装 nmap,可以使用以下命令安装:

sudo apt-get install nmap

4. 检测Web服务器

使用 requests库发送HTTP请求,检测响应是否来自Web服务器。

import requests

def check_web_server(ip):
    try:
        response = requests.get(f"http://{ip}", timeout=1)
        if response.status_code == 200:
            return True
    except requests.ConnectionError:
        return False
    return False

def find_web_servers(scan_result):
    web_servers = []
    lines = scan_result.split('\n')
    for line in lines:
        if 'Nmap scan report for' in line:
            ip = line.split(' ')[-1]
            if check_web_server(ip):
                web_servers.append(ip)
    return web_servers

web_servers = find_web_servers(scan_result)
print("Web Servers Found:", web_servers)

5. 完整代码示例

import socket
import subprocess
import requests

def get_local_ip():
    hostname = socket.gethostname()
    local_ip = socket.gethostbyname(hostname)
    return local_ip

def get_ip_range():
    local_ip = get_local_ip()
    ip_parts = local_ip.split('.')
    ip_range = f"{ip_parts[0]}.{ip_parts[1]}.{ip_parts[2]}.0/24"
    return ip_range

def scan_network(ip_range):
    result = subprocess.run(['nmap', '-p', '80,443', ip_range], stdout=subprocess.PIPE)
    return result.stdout.decode()

def check_web_server(ip):
    try:
        response = requests.get(f"http://{ip}", timeout=1)
        if response.status_code == 200:
            return True
    except requests.ConnectionError:
        return False
    return False

def find_web_servers(scan_result):
    web_servers = []
    lines = scan_result.split('\n')
    for line in lines:
        if 'Nmap scan report for' in line:
            ip = line.split(' ')[-1]
            if check_web_server(ip):
                web_servers.append(ip)
    return web_servers

if __name__ == "__main__":
    ip_range = get_ip_range()
    scan_result = scan_network(ip_range)
    web_servers = find_web_servers(scan_result)
    print("Web Servers Found:", web_servers)

分析说明表

步骤 说明
获取本地IP 使用 socket获取本机IP地址
获取IP地址范围 通过拆分本机IP地址推断出IP地址范围
扫描网络 使用 nmap扫描指定IP范围内的80和443端口
检测Web服务器 使用 requests库检查扫描结果中的IP是否有Web服务器响应
完整代码示例 提供所有步骤的整合代码,实现功能完整的Web服务器检测工具

总结

通过本文介绍的方法,您可以使用Python高效地检查本地网络中运行的Web服务器。此方法结合了 socketsubprocessrequests等库,实现了从IP地址获取到网络扫描再到Web服务器检测的完整流程。希望本文对您在网络管理和安全测试中有所帮助。

文章版权及转载声明

本文作者:admin 网址:http://news.edns.com/post/183183.html 发布于 2024-12-09
文章转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码