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.)
- 
				andy
 - Administrator
 - Beiträge: 488
 - 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.
- 
				andy
 - Administrator
 - Beiträge: 488
 - 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