当前位置: 首页 > 知识库问答 >
问题:

在Python内部使用Bash仅获取IP地址

都阳
2023-03-14

我正在编写一个小的Python脚本(Python2.7.13)来执行ARP扫描。问题是我还不太懂Shell脚本...我正在Kali Linux上运行,到目前为止我使用的是:

import subprocess
interface = "wlan0"
ip = subprocess.check_output("ifconfig " + interface + " | grep 'inet'| cut -d':' -f2", shell = True).strip()    

通过这样做,我仍然可以得到IP:

'inet 192.168.0.43  netmask 255.255.255.0  broadcast 192.168.0.255\n14c\n14c'

要获得192.168.0.43作为我的ip变量,我需要向我的ip分配添加什么?我已经在网上查过了,但我就是找不到Linux上的解决方案。我只在Mac OS X上找到了很好的解决方案(使用Bash解析ifconfig以仅获得我的IP地址),但我希望这段代码首先在我的Kali Linuxhtml" target="_blank">安装上运行,然后我才能将它移植到Mac OS X上。我也已经尝试过使用这个答案(使用Python的stdlib查找本地IP地址),但我正在寻找一种操作ifconfig结果的方法,只是使用cut或awk。

共有1个答案

骆昊阳
2023-03-14

错误是cut-d':'在冒号上拆分,而不是在空格上拆分。但是使用外部实用程序解析ifconfig的输出无论如何都是疯狂的。Python在本机环境下做得很好,如果您不熟悉标准shell实用程序(也许即使您熟悉),它可能会更快,更容易阅读和理解。

ifconfig = subprocess.check_output(['ifconfig', interface])  # no shell=True
for line in ifconfig.split('\n'):
    fields = line.split()
    if fields[0] == 'inet':
        ip = fields[1]  # no need to strip() if you discard the tail
        break

这仍然不是完全可移植的,因为ifconfig的细节在不同的平台上看起来会有所不同(尽管这个特定的细节可能是可以的),接口名称在不同的平台上看起来也会有所不同。避免ifconfig的纯Python解决方案可能会更具可移植性。

在OSX上,inet前面的第一个字符是一个选项卡,但在Ubuntu上不是(所以我猜Kali也会这样)。我不得不修改代码来适应。有关可移植性问题的示例,请参阅编辑历史记录。

 类似资料:
  • 我想编辑bashrc文件,让它有一个简单的函数“myip”来运行。正如您可能猜到的,函数myip只打印我的计算机的内部IP地址。 我正在研究Mac ;OS ;X。 我怎么才能完成这件事?

  • 问题内容: 寻找一种使计算机具有当前外部IP的更好方法…可以正常工作,但宁愿不依赖外部站点来收集信息…我只能使用与Mac OS捆绑在一起的标准Python 2.5.1库X 10.5.x 问题答案: 如果您在获得外部IP的路由器后面,恐怕您别无选择,只能像您一样使用外部服务。如果路由器本身具有某些查询接口,则可以使用它,但是该解决方案将针对特定环境且不可靠。

  • 问题内容: 我正在尝试编写脚本来获取服务器上的所有IP地址。该脚本应可在所有主要发行版上使用。这是我所拥有的: 导致: 我如何首先删除前缀?第二,如何排除? 问题答案: 不需要。这是一种使用方法: 仅列出地址: 列出设备和地址:

  • 问题内容: 我不太确定如何获取计算机的外部IP地址,就像网络外部的计算机会看到它一样。 我下面的IPAddress类仅获取计算机的本地IP地址。 问题答案: 我不确定是否可以从在本地计算机上运行的代码中获取该IP。 但是,你可以构建在网站上运行的代码(例如在JSP中运行),然后使用返回请求来源IP的内容: 或者只是使用已经存在的服务来执行此操作,然后解析该服务的答案以找出IP。 使用AWS等Web

  • 问题内容: 我正在使用node.js,需要获取由ISP提供的外部IP地址。有没有一种方法可以不使用http://myexternalip.com/raw之类的服务来实现? 问题答案: 使用包装 https://github.com/alsotang/externalip

  • 问题内容: 获取我的本地主机IP地址。但这给了我答案。如果我知道的话。 我需要我的“真实” IP地址(例如192.168.xx)来修改配置文件。我怎么能得到? 问题答案: 我通常使用以下代码: 我不知道它的起源,但是它可以在Linux / Windows上运行。