#!/usr/bin/ruby1.8
require 'syslog'
Syslog::open('traffic2', Syslog::LOG_PID, Syslog::LOG_DAEMON)
Syslog.info("Traffic2 update: Starting run!")
Syslog::close
host = '192.168.24.31'
dev = 'eth1'
def checkXbox(host, dev)
i = 0
require 'pcaplet'
include Pcap
options = "host #{host}"
$status = 0
temp = 'DEADBEEF'
require 'timeout'
Timeout::Error
begin
cap = Pcap::Capture.open_live(dev)
cap.setfilter(options)
temp = timeout(3) {
while i < 3
cap.each_packet(3) { |pkt|
i = i+1
if pkt.udp?
if pkt.ip_src.to_s == host
$status = 1
elsif pkt.ip_dst.to_s == host
$status = 1
end
end
}
end
}
puts temp
rescue Timeout::Error => e
#Silently supress this error
puts "Timeout error caught!"
#puts e.message
#puts "Xbox is off?"
ensure
#pcaplet.close
cap.close if cap.respond_to?('close')
#puts "cap.close'd"
end
puts temp
puts $status
#if temp equals DEADBEEF then timeout occured
#if temp equals nil then xbox is on
#setup for returning true or false
if temp == nil
return true
elsif temp == 'DEADBEEF'
return false
end
end
xbox = checkXbox(host, dev)
printf("checkXbox returned #{xbox}\n")
#puts "true means on, false means off."
Syslog::open('traffic2', Syslog::LOG_PID, Syslog::LOG_DAEMON)
Syslog.info("Traffic2 update: I ran! xbox is #{xbox}")
Syslog::close
if xbox==FALSE
# flush qdiscs first!
print "Xbox is off\n"
system "tc qdisc del dev eth2 root 2>/dev/null"
system "tc qdisc del dev eth1 root 2>/dev/null"
system "sh /root/xbox_off.sh"
elsif xbox==TRUE
print "Xbox is on\n"
system "tc qdisc del dev eth2 root 2>/dev/null"
system "tc qdisc del dev eth1 root 2>/dev/null"
system "sh /root/new.sh"
else
puts "fatal oopsy encountered!"
end