首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python唤醒Lan

Python唤醒Lan
EN

Stack Overflow用户
提问于 2014-10-26 06:32:21
回答 1查看 1.4K关注 0票数 2

我正在尝试编写一个脚本,以检查我的intranet上的主机是否已启动。如果是,请等待10秒,然后再测试一次。如果已关闭,请将局域网数据包上的唤醒发送到主机,然后在10秒内再次测试。代码编译,但似乎不起作用。任何帮助都是非常感谢的。

代码语言:javascript
复制
import os
import socket
def main():
    hostname = "10.0.0.5" 
    response = os.system("ping -c 1 " + hostname)
    if response == 0:
        print ("Host " + hostname + "is up.")
        Time.Sleep(10)
        main()
    else:        
        print("Host " + hostname + "is down.")
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.sendto('\xff'*6 + '\x00\x21\x6A\xC7\x1A\x42'*16, ('10.0.0.5', 80))
        Time.Sleep(10)
        main()

更新:使用10.0.0.5主机,我将if条件更改为!=,以测试它是否正在发送数据包,但没有(通过确认)。我不知道它是否在运行我的代码tbh。

新代码似乎起作用了,唯一的问题是它忽略了time.sleep,只是在ping完成后重复

代码语言:javascript
复制
import os
import socket
import subprocess
import time
from time import sleep
x = 0
while x < 1:
        hostname = "10.0.0.5"
        output = subprocess.Popen(["ping.exe",hostname],stdout = subprocess.PIPE).communicate()[0]
if ('unreachable' in output):
        print hostname, 'is down.'
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.sendto('\xff'*6 + '\x00\x21\x6A\xC7\x1A\x42'*16, ('10.0.0.255', 80))
        time.sleep(10)
else:
        print hostname, 'is up.'
        time.sleep(10)
x = x + 0
EN

回答 1

Stack Overflow用户

发布于 2014-10-27 01:46:05

在更新的code.also中,缩进是关闭的,在输出中寻找“不可访问的”对于do.what来说不是最好的选择,如果它超时或显示了另一个错误?我会用返回代码代替。

下面是一个更新的version.make,一定会保留缩进。

代码语言:javascript
复制
import os
import time
import socket
import subprocess

hostname = "10.0.0.5"

while 1:
    sp = subprocess.Popen(["ping.exe", hostname], stdout = subprocess.PIPE)

    sp.wait() # Wait for ping.exe to terminate.

    return_code = sp.returncode # Get the return code

    if return_code != 0:
        print hostname, 'is down.'
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        #I'm not that familiar with this part.assuming yours is correct.
        s.sendto('\xff'*6 + '\x00\x21\x6A\xC7\x1A\x42'*16, ('10.0.0.255', 80))
    else:
        print hostname, 'is up.'

    time.sleep(10) # Sleep for 10 seconds
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26570440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档