检查设备是否在本地网络中使用特定IP

时间:2018-06-08 22:59:09

标签: python ubuntu networking ping nmap

我希望我的家庭自动化系统能够“知道”。我是否在家。因为我总是随身携带手机,我认为最好的方法是检查手机是否连接到wifi。我写了这个python脚本:

TIMEOUT = 30

result_array = []

for x in range(TIMEOUT):

    result_array.append("0")

counter = 0

while True:
    proc = subprocess.Popen(["ping", "-c 1", "-W 1", "192.168.1.101"], stdout=subprocess.PIPE)
    output = proc.stdout.read()
    result = re.search('transmitted, (.*?) received', str(output)).group(1)
    print(datetime.datetime.now().strftime("%H:%M:%S"), " ", result)
    result_array[counter] = result
    counter+= 1
    if counter == TIMEOUT:
        counter = 0


    if result == "1":
        time.sleep(1)

    online = False
    for x in result_array:
        if x == "1":
            online = True


    print(online)           

运行它看起来像这样......

如果我的手机连接到wifi:

00:39:36   1
True
00:39:37   1
True

如果我的手机没有连接到wifi:

00:39:39   0
True
00:39:40   0
True

没有得到" 1" 30次尝试将切换到返回False:

00:40:23   1
False
00:40:24   1
False

这适用于我的Android手机,但对我的女朋友iPhone无效。如果显示器未点亮,iPhone不响应ping(ICMP)请求。到目前为止,我尝试了arp,arping和nmap,并得到了一些有效的解决方案 - 至少在某种程度上。它们要么不可靠(即使我连接到wifi也会显示False)或者需要很长时间(1分钟+)才能意识到我已离线。

我希望脚本能够达到99%以上的准确率(如果我真的那么,它应该永远不会检测到我没有连接。这就是为什么我的脚本需要30次失败的尝试才能切换到离线状态)我希望它是在检测到我离线时尽可能快。

有关如何优化此问题的任何想法?

0 个答案:

没有答案