2015-02-27 4 views
0

Я пишу в качестве приложения для включения систем в сети с использованием функции WakeOnLan.WakeUp On Lan with Python

Я googled и в состоянии получить код от here. Мой код выглядит ниже. Я также отправил порт 9 в свой маршрутизатор.

У меня есть опция Wake On Lan для сетевой карты с управлением питанием. Я следовал инструкциям от here

Я установил Wake on Lan Monitor/Sniffer из here, чтобы проверить, могу ли я получить волшебный пакет для пробуждения. И система получает магические пакеты. Когда я выключаю и запускаю скрипт Python WOL из другой системы (ноутбука) в той же сети, моя система не включается.

Может кто-нибудь предложить мне решение.

Мои системы: Рабочий стол с Win 8.1, который необходимо просыпаться На Lan. Ноутбук с Win 8, которому необходимо запустить приложение и отправить волшебный пакет на рабочий стол.

Мои сетевые IP-адреса варьируются от 172.16.0.1 и т. Д., Поэтому используется 172.16.255.255 в качестве широковещательного адреса.

import sys, struct, socket 

# Configuration variables 
broadcast = ['172.16.255.255'] 
wol_port = 9 

known_computers = { 
    'mercury' : '00:1C:55:35:12:BF', 
    'venus'  : '00:1d:39:55:5c:df', 
    'earth'  : '00:10:60:15:97:fb', 
    'mars'  : '00:10:DC:34:B2:87', 
} 

def WakeOnLan(ethernet_address): 

    # Construct 6 byte hardware address 
    add_oct = ethernet_address.split(':') 
    if len(add_oct) != 6: 
     print "\n*** Illegal MAC address\n" 
     print "MAC should be written as 00:11:22:33:44:55\n" 
     return 
    hwa = struct.pack('BBBBBB', int(add_oct[0],16), 
     int(add_oct[1],16), 
     int(add_oct[2],16), 
     int(add_oct[3],16), 
     int(add_oct[4],16), 
     int(add_oct[5],16)) 

    # Build magic packet 

    msg = '\xff' * 6 + hwa * 16 

    # Send packet to broadcast address using UDP port 9 

    soc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    soc.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1) 
    for i in broadcast: 
     soc.sendto(msg,(i,wol_port)) 
    soc.close() 

def wol(*macs): 
    if len(macs) == 0: 
     print "\n*** No computer given to power up\n" 
     print "Use: 'wol computername' or 'wol 00:11:22:33:44:55'" 
    else: 
     for i in macs: 
      if i[0] != '/': 
       if ":" in i: 
        # Wake up using MAC address 
        WakeOnLan(i) 
       else: 
        # Wake up known computers 
        if i in known_computers: 
         WakeOnLan(known_computers[i]) 
        else: 
         print "\n*** Unknown computer " + i + "\n" 
         quit() 

     if len(macs) == 2: 
      print "\nDone! The computer should be up and running in a short while." 
     else: 
      print "\nDone! The computers should be up and running in a short while." 
     print 

wol('My System MAC address') 

ответ

0

Вы должны проверить, реагирует ли система на получение WOL-пакетов, а не только то, что он может получить его (то есть на самом деле просыпается). Если нет, вам нужно повернуть это на любом программном обеспечении или в BIOS-настройках вашего компьютера.

У меня также есть опыт, который на большинстве ноутбуков должен быть подключен к электросети, а также подключен кабель Ethernet, который был подключен к компьютеру, прежде чем вы отключите его для правильной работы.

Чтобы проверить, работает ли он на вашем компьютере, загрузите существующее программное обеспечение для отправки WOL Magic Packets и убедитесь, что оно работает до того, как вы сделаете предположение, что это что-то не так в вашем коде.

В Linux (например, на основе Debian) все, что вам нужно сделать, это:

sudo apt-get install etherwake

, а затем сделать

wakeonlan MAC-ADDRESS

+1

я знаю, что системы на Wi-Fi не поддерживает WakeOnLAN. Я использую ноутбук, чтобы разбудить мой рабочий стол, который подключен через кабель LAN. Я проверю с помощью стороннего инструмента, если я смогу разбудить свой рабочий стол и отправить ответ. – Rao

0

Я знаю, эта нить старый, но вам удалось заставить его работать? Прежде всего, я вижу, что вы использовали Win8.1 Согласно Википедии:

«Способность просыпаются от гибридного отключения состояния (S4) или полностью питание от состояния (S5) не поддерживается в Windows 8 и выше, [20] [21] и Windows Server 2012 и выше. [22] Это связано с изменением в поведения ОС, в результате чего сетевые адаптеры должны быть явно не вооружены для WOL при выключении этих состояний происходит WOL из сна состояние (S3) или негибридное состояние гибернации (S4). "

Поэтому я предлагаю попробовать с другой машиной/ОС и убедиться, что в BIOS включена опция WoL.

Редактировать: Я только что сделал небольшое приложение для python, и оно работает, я использую '!' оператора или нет. Поэтому я не уверен, что следующие строки:

Кроме того, я вижу, вы используете порядок байтов по умолчанию в вашем пакете:

struct.pack('BBBBBB', 

Вы не должны использовать «>» или '!' (крупноядерный/сетевой) оператор?

например.

struct.pack('!BBBBBB', 

Я боюсь, что если вы не используете тупоконечника оператора, то по умолчанию будет системным способом кодирования, и на машинах Intel будет схема прямой порядок байтов кодирования. Итак, вы отправляете свои байты в неправильном порядке.

https://docs.python.org/3.0/library/struct.html https://en.wikipedia.org/wiki/Endianness

0

Я использую Wireshark проследить мой WOL пакет

Я проверил мой код и он работает.

для WOL в окнах 8 + вы должны снять флажок быстрой загрузки

(как я уже говорил)

если вы хотите Acces удаленного компьютера для отключения или проверить авторизован

или для входа в систему

вам нужно добавить что-то в Regestry от удаленного ПК

see this picture to see where to add in regestry

(также), как я уже говорил :)

, если вы не сделаете этого, вы не можете иметь удаленный-доступ (Acces отрицали (5))

вы можете проверить его с ЦМД отправить выключение -s -m \ ipadressOfTheRemotePC

я только что создал некоторые массивное программное обеспечение, чтобы разбудить другой компьютер

проверка авторизованы или нет, и если его не будет делать это для вас, если один из оба вошли в систему.

код я использовал для моего WOL пакета является:

see this picture of my code