[Ruby] Abfrage / Schalten (korr.)

nbarlek
Beiträge: 2
Registriert: Freitag 2. Oktober 2009, 12:09

[Ruby] Abfrage / Schalten (korr.)

Beitrag von nbarlek » Sonntag 11. Oktober 2009, 16:43

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]

andy
Administrator
Beiträge: 487
Registriert: Dienstag 15. Januar 2008, 11:51
Wohnort: Düsseldorf
Kontaktdaten:

Re: [Ruby] Abfrage / Schalten (korr.)

Beitrag von andy » Sonntag 11. Oktober 2009, 19:56

Danke

LG Andy

Kokab
Beiträge: 1
Registriert: Montag 23. Februar 2015, 07:28

Re: [Ruby] Abfrage / Schalten (korr.)

Beitrag von Kokab » Montag 23. Februar 2015, 07:30

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.

andy
Administrator
Beiträge: 487
Registriert: Dienstag 15. Januar 2008, 11:51
Wohnort: Düsseldorf
Kontaktdaten:

Re: [Ruby] Abfrage / Schalten (korr.)

Beitrag von andy » Montag 23. Februar 2015, 09:41

Halo Kokab,

Die Ports sind änderbar.

LG Andy

Antworten