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

时间:2016-09-30 17:48:09

标签: python networking

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

我需要最简单的方法来确定设备正在使用的ip范围。这将变成python脚本。它不仅仅是明显的192.168.x.x

我正在查看'arp'命令,还有一个名为'netifaces'的库。我不确定我是否可以使用更简单的东西。它必须适用于Linux,OSX和Windows。该机器正在运行Android OS

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

命令'arp -a'现在似乎是最有希望的。

2 个答案:

答案 0 :(得分:0)

试试这个

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'

答案 1 :(得分:0)

当接口无法获取地址时,APIPA使用IPv4链路本地范围169.254.0.0/16为主机分配IP地址。关于此范围有一些规则,例如您无法对范围进行子网划分,无法路由等。有关详细信息,请参阅RFC 3927, Dynamic Configuration of IPv4 Link-Local Addresses

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