Python 如何确定设备使用的ip范围?

Python 如何确定设备使用的ip范围?,python,networking,Python,Networking,这是一个奇怪的问题,基本上我有一台计算机通过以太网电缆连接到一台机器上。没有其他网络或互联网接入。机器设置了一个网络,允许您远程登录 我需要尽可能简单的方法来确定设备使用的ip范围。这将变成一个python脚本。这不仅仅是显而易见的192.168.x.x 我在看'arp'命令,还有一个叫做'netifaces'的库。我不确定是否有更简单的方法可以用。它必须适用于Linux、OSX和Windows。这台机器运行的是安卓操作系统 基本上,我只需要能够以最简单的方式确定设备当前使用的ip范围 “arp

这是一个奇怪的问题,基本上我有一台计算机通过以太网电缆连接到一台机器上。没有其他网络或互联网接入。机器设置了一个网络,允许您远程登录

我需要尽可能简单的方法来确定设备使用的ip范围。这将变成一个python脚本。这不仅仅是显而易见的192.168.x.x

我在看'arp'命令,还有一个叫做'netifaces'的库。我不确定是否有更简单的方法可以用。它必须适用于Linux、OSX和Windows。这台机器运行的是安卓操作系统

基本上,我只需要能够以最简单的方式确定设备当前使用的ip范围

“arp-a”命令似乎是目前最有前途的命令

试试这个

import socket
import fcntl
import struct

def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])

get_ip_address('eth0')  # '192.168.0.110'

APIPA使用IPv4链路本地范围
169.254.0.0/16
为主机分配IP地址,当接口没有其他方法获取地址时。关于此范围有一些规则,例如,您不能为该范围建立子网,不能对其进行路由等。有关详细信息,请参阅


您确实需要确定链路另一端的设备是否正在使用此范围。如果它是一个专用设备,它可能没有,它将有一个手动分配的固定地址。如果是这种情况,您将无法使用您的链接本地地址与它联系。

换句话说,您尝试查找机器的ip??它是什么类型的机器?你有关于它的设置的文档吗?你说它“建立了一个网络”,它可能也充当DHCP服务器吗?您可以尝试使用数据包分析器,如Wireshark,看看是否可以在那里找到它。@coder是的,我可以用nmap来完成,但我不知道要扫描的ip范围。Nmap在这方面效果很好,我只是不知道如何找到要扫描的范围,如“Nmap x.x.*.0/24”@pRate wireshark很好地工作,但这需要自动化,我或多或少地在机器上寻找某种类型的通用命令,可以提供一些有关当前连接到的网络的信息,我现在正在通过提取网络接口信息和过滤子网掩码等方法来实现这一点。我相信这是在设置DHCP服务器,这是一个android操作系统。我想你需要忘记一些假设。您的声明,“…明显的192.168.x.x”显示了对住宅网络的偏见。这一网络范围实际上并不明显。另外,不要假设网络是
/24
。网络掩码长度可以是
/8
/31
之间的任意长度。这将不起作用,因为网络接口并不总是将其命名为“eth0”,例如,我机器上的以太网接口现在命名为:“{HB232-123FH-J23JH}”“这是我编的,但这是格式。你可以把它设为x,去掉eth0,把它变成一个变量。这是一个开始,你可以做一些工作。@PatrickHaugh我现在实际上正在使用这个库,我有一个概念证明在工作,我只是对这个解决方案不太满意,但它现在正在工作。”。