All pastes #909537 Raw Edit

Mine

public text v1 · immutable
·published 2008-02-19 06:36 UTC
rendered paste body
#!/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