gpt4 book ai didi

python - 在 Python 中使用 Bash 仅获取 IP 地址

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:59 24 4
gpt4 key购买 nike

我正在编写一个小的 Python 脚本(Python 2.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'

我需要在我的 ip 分配中添加什么才能将 192.168.0.43 作为我的 ip 变量?我已经在网上查过了,但我在 Linux 上找不到解决这个问题的方法......我只在 Mac OS X(Parse ifconfig to get only my IP address using Bash)上找到了非常好的解决方案,但我希望这段代码首先在我的 Kali Linux 安装上运行,然后我才能将它移植到 Mac OS X我也已经尝试过使用这个答案(Finding local IP addresses using Python's stdlib),但我一直在寻找一种方法来操纵 ifconfig 的结果,只需使用 cut 或 awk...

最佳答案

错误在于 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 的细节在不同的平台上看起来会有所不同(尽管这个特定的细节可能没问题)并且接口(interface)名称在不同的平台上看起来也会不同。避免 ifconfig 的纯 Python 解决方案可能会更便携。

在 OSX 上,inet 之前的第一个字符是制表符,但在 Ubuntu 上不是(所以我猜 Kali 上也会如此)。我不得不更改代码以适应。有关可移植性问题的示例,请参阅编辑历史记录。

关于python - 在 Python 中使用 Bash 仅获取 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43828241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com