Hier zwei Proof-of-Concept Skripte, zuerst die Abfrage, die mit meiner Home-Leiste (2.96) / OS X 10.6.1 / Ruby 1.8.7 einwandfrei funktioniert.
[code0t0]require 'socket'
require 'pp'
abort 'Usage: broadcast_addr send_port receive_port' unless ARGV.length == 3
UDP_RECV_TIMEOUT = 1 # seconds
def pwrctrl(ip, send_port, recv_port)
extensions = Hash.new
begin
cmd = "wer da?\015\012"
sendSocket = UDPSocket.new
sendSocket.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1)
sendSocket.send(cmd, 0, ip, send_port)
recvSocket = UDPSocket.new
recvSocket.bind('0.0.0.0', recv_port)
while select([recvSocket], nil, nil, UDP_RECV_TIMEOUT)
resp = recvSocket.recvfrom(65536)
fields = resp[0].split(':')
ext_ip = fields[2]
extensions[ext_ip] = fields
end
rescue IOError, SystemCallError
ensure
sendSocket.close if sendSocket
recvSocket.close if recvSocket
end
return extensions
end
ip, send_port, recv_port = *ARGV
result = pwrctrl(ip, send_port, recv_port)
pp(result)
[/code0t0]
Nach kleiner Korrektur funktioniert jetzt auch das schalten:
[code0t0]require 'socket'
require 'pp'
abort 'Usage: ip_addr send_port outlet_nr ON|OFF' unless ARGV.length == 4
PASSWORD = 'user' # you might want to change this
def pwrctrl_switch(ip, port, outlet, state)
begin
cmd = state + outlet + PASSWORD + "\000\015\012"
pp(cmd)
s = UDPSocket.new
s.send(cmd, 0, ip, port)
rescue IOError, SystemCallError
ensure
s.close if s
end
end
ip, port, outlet, state = *ARGV
new_state = 'Sw_on' if state == 'ON'
new_state = 'Sw_off' if state == 'OFF'
abort 'Invalid state speicified' if not new_state
pwrctrl_switch(ip, port, outlet, new_state)[/code0t0]
[Ruby] Abfrage / Schalten (korr.)
-
- Administrator
- Beiträge: 487
- Registriert: Dienstag 15. Januar 2008, 11:51
- Wohnort: Düsseldorf
- Kontaktdaten:
Re: [Ruby] Abfrage / Schalten (korr.)
Danke
LG Andy
LG Andy
Re: [Ruby] Abfrage / Schalten (korr.)
ich möchte die Steckdose von einem Linux System ansteuern aber leider liegt der UDP Port auf 75/77. Ports unter 1024 dürfen nur vom root (Administrator) angesprochen werden. Also muss das Programm mit Adminrechten laufen. Da dies eine unnötige Sicherheitslücke darstellt wollte ich fragen, ob es irgendwie möglich ist, den Port umzulegen oder ob man eine Custom-Firmware erstellen kann, bei der der Port höher als 1024 ist.....!!!!!!!!!!!!!
__________
Our Actual Exams and Testking pmp prep gre exam provide you 100% pass guarantee. You can get access to and exams. Our ccnp route 300-101 pdf is also very useful tool.rc.edu for its easiness.
__________
Our Actual Exams and Testking pmp prep gre exam provide you 100% pass guarantee. You can get access to and exams. Our ccnp route 300-101 pdf is also very useful tool.rc.edu for its easiness.
-
- Administrator
- Beiträge: 487
- Registriert: Dienstag 15. Januar 2008, 11:51
- Wohnort: Düsseldorf
- Kontaktdaten:
Re: [Ruby] Abfrage / Schalten (korr.)
Halo Kokab,
Die Ports sind änderbar.
LG Andy
Die Ports sind änderbar.
LG Andy