#!/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