Created
September 20, 2013 01:18
-
-
Save FiXato/6632123 to your computer and use it in GitHub Desktop.
Simple Ruby script to retrieve some useful Internet connexion statistics from a Siemens Gigaset sx762 modem/router.
By default it only returns the Up- and Down-stream statistics, External IP & MAC addresses and Uptime, but if you pass the --verbose argument, you get the raw data back as well.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# router_statistics.rb: Simple Ruby script to retrieve some useful Internet connexion statistics from a Siemens Gigaset sx762 modem/router | |
# (c) 2013, Filip H.F. "FiXato" Slagter <fixato+router_statistics@gmail.com> | |
# By default it only returns the Up- and Down-stream statistics, External IP & MAC addresses and Uptime, but if you pass the --verbose argument, you get the raw data back as well. | |
# | |
# Sample output (with faked IP/MAC addresses): | |
# Siemens Gigaset sx762 Statistics: | |
# ================================================================================ | |
# Up: 833 / 825 kbps [Attn: 408 dB / Noise: 56 dB / Pwr: 122 dBm] | |
# Down: 1309 / 1316 kpbs [Attn: 602 dB / Noise: 61 dB / Pwr: 149 dBm] | |
# IP/MAC: 203.0.113.0 / 10:00:00:00:FF | |
# Uptime: 1061 minutes (~= 17.69 hours) (~= 0.74 days) | |
ROUTER_PASSWORD='ReplaceWithYourRouterPassword' | |
ROUTER_URL = 'http://192.168.2.1' | |
cmd=<<-EOS | |
curl --user-agent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1626.0 Safari/537.36" \ | |
--silent \ | |
-L \ | |
-e #{ROUTER_URL}/UE/welcome_login.html \ | |
--data "form_submission_type=login" \ | |
--data "form_submission_parameter=" \ | |
--data "current_page=welcome_login.html" \ | |
--data "next_page=status_internet.html" \ | |
--data "i=1" \ | |
--data "your_password=#{ROUTER_PASSWORD}" \ | |
--data "Login=OK" \ | |
"#{ROUTER_URL}/UE/ProcessForm" \ | |
| grep scmData | |
EOS | |
stats = {} | |
json_string = `#{cmd}`.gsub('var scmData = ','').strip[0...-1] | |
# Parse the flattened key/value pairs from the json_string into a simple hash | |
json_string.scan(/\["([^\[]+)", "([^\[]+)"\]/) do |m| | |
stats[m[0]] = m[1] | |
end | |
puts 'Siemens Gigaset sx762 Statistics:' | |
puts '='*80 | |
puts ' Up: %5i / %5i kbps [Attn: %3i dB / Noise: %2i dB / Pwr: %3i dBm]' % [stats['UpstreamCurrRate'], stats['UpstreamMaxRate'], stats['UpstreamAttenuation'], stats['UpstreamNoiseMargin'], stats['UpstreamPower']] | |
puts ' Down: %5i / %5i kpbs [Attn: %3i dB / Noise: %2i dB / Pwr: %3i dBm]' % [stats['DownstreamCurrRate'], stats['DownstreamMaxRate'], stats['DownstreamAttenuation'], stats['DownstreamNoiseMargin'], stats['DownstreamPower']] | |
puts 'IP/MAC: %s / %s' % [stats['ExternalIPAddress'], stats['V_MACAddress']] | |
puts 'Uptime: %i minutes (~= %0.2f hours) (~= %0.2f days)' % [stats['Uptime'].to_i / 60.00, stats['Uptime'].to_i / 3600.00, stats['Uptime'].to_i / 86400.00] | |
puts | |
if ARGV.include?('--verbose') | |
require 'yaml' | |
require 'json' | |
puts "JSON string: ", json_string | |
puts "" | |
puts "Parsed JSON in YAML format:", JSON.parse(json_string).to_yaml | |
puts "" | |
puts "Parsed stats: ", stats.to_yaml | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment