Я разработал приложение для wakeOnLan (WOL) и отлично работает в той же серии IP-адресов.Wake On Lan В других сериях IP
Моя проблема: я не могу wakeOnLan, где системы находятся на другой серии IP-адресов в одной сети.
Для EX:
Моей системы А оказывает IP 172.16.46.76,
Я могу разбудить любой системы C с IP-адресом 172.16.46.13, а также в состоянии разбудить на LAN любой системы с в диапазоне от 172.16.46.1 до 172.16.45.254, используя широковещательный адрес 1721.16.46.255
Но когда я запускаю того же приложение из других системы B имея IP 172.16.51.26, я не в состоянии в keOnLan системы C с IP-адресом 172.16.46.13
Я проверил с помощью WakeOnLAN монитора, чтобы подтвердить, если система C получает волшебный пакет. И он принимает от системы A, но не от системы B. Я мог бы в состоянии системы пинга-C с обоего системы А и системы B
Может ли один предложить мне решение, где я делаю неправильно. Код я даю ниже для вашей справки.
import sys, struct, socket
# Configuration variables
broadcast = ['172.16.46.255','172.16.51.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',
}
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
print msg
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(*argv):
if len(argv) == 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 argv:
if i[0] != '/':
if ":" in i:
# Wake up using MAC address
print 'waking using MAC %s' % i
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(argv) == 1:
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('xx:xx:xx:xx:xx:xx')
Снимок из монитора Wake On Lan.
Я пробовал такой же сценарий с помощью стороннего инструмента из EMCO с сайта http://emcosoftware.com/wake-on-lan, и он смог разбудить мою систему C из системы B. Поэтому я думаю, что ваше предложение точка 1 в порядке. Так что я могу сделать дальше. как увеличить TTL от python – Rao
Это может быть опция 'IP_TTL' для' setsockopt'. Попытайтесь захватить свои широковещательные пакеты на другом ПК в той же подсети, используя Wireshark, и проверьте IP-заголовок. –
Добавлен снимок полученного пакета в той же подсети, позвольте мне, что я могу сделать дальше. какой будет заголовок IP, о котором вы говорите. – Rao