一个简易的带图形界面的网络监控器
Tofloor
poster avatar
Bluek404
deepin
2015-04-28 02:34
Author
本帖最后由 Bluek404 于 2015-4-27 18:40 编辑
  1. package main

  2. import (
  3.         "io/ioutil"
  4.         "log"
  5.         "os"
  6.         "strconv"
  7.         "time"

  8.         "github.com/conformal/gotk3/gtk"
  9. )

  10. var net string

  11. func readIntFromFile(path string) (int, error) {
  12.         b, err := ioutil.ReadFile(path)
  13.         if err != nil {
  14.                 return 0, err
  15.         }
  16.         b = b[:len(b)-1] // delete "\n"
  17.         i, err := strconv.Atoi(string(b))
  18.         if err != nil {
  19.                 return 0, err
  20.         }
  21.         return i, nil
  22. }

  23. func getNetIn() int {
  24.         i, err := readIntFromFile("/sys/class/net/" + net + "/statistics/rx_bytes")
  25.         if err != nil {
  26.                 log.Fatal(err)
  27.         }
  28.         return i
  29. }

  30. func getNetOut() int {
  31.         i, err := readIntFromFile("/sys/class/net/" + net + "/statistics/tx_bytes")
  32.         if err != nil {
  33.                 log.Fatal(err)
  34.         }
  35.         return i
  36. }

  37. func parseSize(src int) string {
  38.         if src == 0 {
  39.                 return "0 B/s"
  40.         }
  41.         var unit string

  42.         for i := 0; ; i++ {
  43.                 size := 1 << uint(i*10)
  44.                 if src < size {
  45.                         size = 1 << uint((i-1)*10)
  46.                         src = src / size
  47.                         switch i - 1 {
  48.                         case 0:
  49.                                 unit = "B"
  50.                         case 1:
  51.                                 unit = "KB"
  52.                         case 2:
  53.                                 unit = "MB"
  54.                         case 3:
  55.                                 unit = "GB"
  56.                         }
  57.                         break
  58.                 }
  59.         }
  60.         return strconv.Itoa(src) + " " + unit + "/s"
  61. }

  62. func main() {
  63.         if len(os.Args) == 1 {
  64.                 net = "wlan0"
  65.         } else {
  66.                 net = os.Args[1]
  67.         }

  68.         gtk.Init(nil)
  69.         win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
  70.         if err != nil {
  71.                 log.Fatal("Unable to create window:", err)
  72.         }
  73.         win.Connect("destroy", func() {
  74.                 gtk.MainQuit()
  75.         })
  76.         win.SetSkipTaskbarHint(true)
  77.         win.SetDecorated(false)
  78.         win.SetKeepAbove(true)

  79.         l, err := gtk.LabelNew("")
  80.         if err != nil {
  81.                 log.Fatal("Unable to create label:", err)
  82.         }
  83.         l2, err := gtk.LabelNew("")
  84.         if err != nil {
  85.                 log.Fatal("Unable to create label:", err)
  86.         }

  87.         box, err := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0)
  88.         if err != nil {
  89.                 log.Fatal(err)
  90.         }

  91.         box.PackStart(l, false, true, 0)
  92.         box.PackStart(l2, false, true, 0)

  93.         win.Add(box)
  94.         win.ShowAll()

  95.         ticker := time.NewTicker(time.Second * 1)
  96.         go func() {
  97.                 oldNetIn := getNetIn()
  98.                 oldNetOut := getNetOut()
  99.                 for _ = range ticker.C {
  100.                         netIn := getNetIn()
  101.                         netOut := getNetOut()
  102.                         l.SetMarkup(" " + parseSize(netIn-oldNetIn))
  103.                         l2.SetMarkup(" " + parseSize(netOut-oldNetOut))
  104.                         oldNetIn = netIn
  105.                         oldNetOut = netOut
  106.                 }
  107.         }()

  108.         gtk.Main()
  109. }
Copy the Code
按住Alt可拖动(当然具体按键还是得看窗口管理器的设置)默认是监控的wlan0
想要监控别的网卡的话在程序后面加上网卡名称作为参数就行
https://github.com/Bluek404/nsm

nsm64.7z

Reply Favorite View the author
All Replies
ahyanglf
deepin
2015-04-29 04:49
#1
深度监控器吗?
Reply View the author
pengnannan
deepin
2015-08-25 17:50
#2
本帖最后由 pengnannan 于 2015-8-25 09:53 编辑

你这图行GTK完整吗
Reply View the author
pengnannan
deepin
2015-08-25 17:52
#3
我去这不是golang 吗 能加咱好友不我这在学呢
请留qq
Reply View the author
New Thread

Popular Events

More
国际排名
WHLUG