了解如何使用 Scientific Linux 7.1 和 Python 检测网络设备了解如何使用 Scientific Linux 7.1 和 Python 检测网络设备了解如何使用 Scientific Linux 7.1 和 Python 检测网络设备了解如何使用 Scientific Linux 7.1 和 Python 检测网络设备
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

了解如何使用 Scientific Linux 7.1 和 Python 检测网络设备

在此页

  1. 在 Python 中使用 Linux 库
  2. 检测正确的论点
  3. 循环

有时您可能在内部遇到网络或防火墙问题,需要进行网络扫描以查找正在使用的 IP 地址。为此,我们可以使用现成的工具,例如 nmap、zmap 或 angryIP。但是,如果我们无法访问互联网来下载这些工具,我们只能使用手动命令进行扫描。然而,手动扫描可能会非常乏味,因为应该对我们网络上给定的每个 IP 地址进行扫描。

考虑到上述情况,我将在本教程中展示我们如何使用 Python 自动执行此任务,因为市场上几乎所有 Linux 发行版都提供 Python。

Python 是完美的选择,因为它允许我们自动执行操作系统可以执行的每项任务,我们只需要使用正确的库。

在 Python 中使用 Linux 库

我们当前研究的重点是 ping sweep 命令,用于检测我们网络上所有连接和开启的设备。我们正在构建的脚本对网络上的每个 IP 地址进行 ping。例如我们使用子网掩码/24,它将只循环通过 IP 的前 3 个八位字节。对于这个脚本,我们首先要考虑的是哪些系统库可以用于该任务,我们必须导入 sys 和 subprocess 库。这些库允许使用 python 解释器和操作系统本身的特定命令,在本例中为 Scientific Linux 7.1。

import sys, subprocess

我将我的脚本保存在名称 networkmonitor.py 下。

检测正确的论点

当我们使用命令运行脚本时

>>蟒蛇网络监控.py 10.0.0。

在 shell 上,如果命令的参数错误(如果 len(sys.argv)<>2:),脚本将显示正确的示例。 (打印 \networkmonitor.py 10.0.0.\)。

参数是扫描子网的 IP 地址,仅使用前 3 个八位字节。因此,如果参数正确,则命令 \ping -c1 \+sys.argv[1] 的结果将存储在一个变量中,在我们的例子中是 cmdping,sys.argv[1] 是\argument\ sys 模块中的变量,并将存储提供给脚本的第一个参数。在 UNIX 环境中,我们必须使用 ping -c1,因为 ping 命令会无限运行。

if len(sys.argv)<>2:
    print "networkmonitor 10.0.0."

子进程命令、它的参数和 for 循环


下一行开始for循环,一直执行到达到我们为它设置的限制(停止条件),条件就是我们要扫描的IP范围。此时,重要的是要考虑脚本扫描范围所需的时间,范围越大脚本运行的时间越长。 subprocess.Popen 允许我们启动 shell 命令并等待它完成。完成后,我们检查命令返回的状态。 cmdping+str(x),由子进程执行。Popen, 在 for 循环的每个循环中增加参数给出的 IP 的索引.

shell=true 表示进程将在 shell 上执行。但是,Python 文档网站警告使用 shell=true 的危险,因此请小心执行哪个命令。 subprocess.PIPE using as stderr 参数表示 Python 应打开一个到标准流的管道。

for x in range(99,110):
        p = subprocess.Popen(cmdping+str(x), shell=True, stderr=subprocess.PIPE)

在这种情况下,我们只测试了 11 个 IP 地址(从 99 到 110)。

现在我们必须检查 stderr 的内容,当变量为空时我们将停止(中断),否则我们将显示 stdout 内容。

out = p.stderr.read(1)
            if out == '' and p.poll() != None:
                break
            if out != '':
                sys.stdout.write(out)
                sys.stdout.flush()

如果 shell 保持真实状态,最后的代码必须运行。

现在完整的代码是:

import sys, subprocess
if len(sys.argv)<>2:
    print "networkmonitor 10.0.0."
else:
    cmdping ="ping -c1 "+sys.argv[1]
    for x in range(99,110):
        p = subprocess.Popen(cmdping+str(x), shell=True, stderr=subprocess.PIPE)
        while True:
            out = p.stderr.read(1)
            if out == '' and p.poll() != None:
                break
            if out != '':
                sys.stdout.write(out)
                sys.stdout.flush()

我们的小脚本的输出是:



如屏幕截图所示,该工具仅进行 ping 以获得肯定或否定的答案,然后移动到下一个 IP 地址,依此类推以分析整个地址范围。

应该指出的是,我不声称是上述分析代码的作者。我只是一步一步地解释它的功能,以便更好地理解系统命令和网络功能。我要感谢作者。

©2015-2025 艾丽卡 support@alaica.com