約莫在一年前 網管工作有個需求
希望能及時得知所有新北市連線學校 L3 與 Firewall 偵測即時連線狀態
最早期寫的版本是呼叫系統的 ping
但因是線性的
整個跑完需要約 25 分鐘 有夠慢 不夠及時
後來改寫成一個多執行緒版本
將他編譯成 windows 可執行檔
方便工程師除錯用
在教網環境下
多執行緒版整個跑完只需要 25 秒
從 internet 執行 也只需約 30 秒
執行時間僅需線性版的約不到 2% 時間
偵測結果也較為即時
最近需求也有些異動 因此著手改寫程式
原本的程式是在 Ruby 1.8.7 下寫的
新的電腦環境 Ruby 是1.9.1
對了 需安裝 net-ping library
結果悲劇發生......
挖 竟然主要的函式庫不支援 Ruby 1.9 挖哩咧......
好 冷靜 找另一台 PC
裝上 Ruby 1.8.7
gem install net-ping 成功
再執行一下程式
咦 奇怪 之前執行這之程式 沒提到需要這個 library (也許之前已經有裝了 我也不知道???)
失敗 還得要安裝一個 win32-security
好吧 gem install win32-security
再執行一次 喵的咧 還是失敗
我的天啊 居然是 library 原始碼就有錯
這個 library 也太.....
居然逼我要去改原始碼
路徑在 Ruby1.8.7\lib\ruby\gems\1.8\gems\win32-security-0.2.0\lib\win32\security
改寫 sid.rb 第262行 "use_ptr"
後面逗號去掉 存檔
再執行一次 咦? 還是不行?
google 了許久 才發現原來需要再安裝 windows-pr
gem install windows-pr
最後這個程式需要在系統管理員權限下執行
再裝個 ocra library 打包成 exe檔
大功告成
我的心得是:
Ruby 每個 distribution 打包套件差異甚大
且許多函式庫相依性甚高 也依賴不同的 Ruby 版本平台
沒 A函式不能跑,後來裝了A才知道還要裝B函式
B函式裝完還需要裝C函式
過程還真的是有點瑣碎 許多地方得注意
一度想用 Python 改寫
但發現 好像也挺麻煩的
所以還是偷懶一下
乖乖用 Ruby 囉
在邁向網管自動化的路上
回覆刪除需要工程師細心,費心與盡心
在程式上設計,調整與除錯
想起馬爺告訴我的事
user越easy
程式設計者 不知做了多少工
舉杯致敬
使用 nmap -sP 172.17.0.0/24 -oG - | grep 'your condition'
回覆刪除就可以達到這樣的需要了。僅供參考。 :)
感謝您的建議
刪除小弟也想過運用一些目前坊間常見的軟體來做偵測
但因這個程式需求 客製化程度甚高
且需要在短時間內完成網路偵測工作
所以才沒使用現有軟體
才會自己動手撰寫
仍然非常感謝您的建議
感恩