python中,如何實時獲取PING命令的結果

2021-10-06 08:25:29 字數 3274 閱讀 4978

ping命令在ping通或者不通的時候,大概是下面兩個情況

技術棧使用了 flask框架和redis

# 儲存ping資料的redis 1號庫

redis_sh = strictredis(host=

'127.0.0.1'

, port=

6379

, decode_responses=

true

, db=1)

defflush_sh_redis()

:# 清空redis 1號庫

redis_sh.flushdb(

)def

sh(command, ip)

: p = subprocess.popen(command, shell=

true

, stdout=subprocess.pipe, stderr=subprocess.stdout)

not_ping =

"ping %s (%s) 56(84) bytes of data."

%(ip, ip)

flag =

0# 自定義的返回值--避免ping失敗無資料返回

num =

1# 每一行ping結果標識 (key)

redis_sh.

set(

"sh1"

, not_ping +

"\n"

) row =

1for line in

iter

(p.stdout.readline, b''):

line = line.rstrip(

).decode(

'utf8'

)if flag ==0:

# ping操作有結果 第一次進入

redis_sh.

set(

"sh1"

, line +

"\n"

)# 將自定義的返回值覆蓋

flag =

1 num +=

1# key 值加一

row =

2else

:if row ==2:

"sh1"

, line +

"\n"

) row =

1else

: redis_sh.

set(

"sh"

+str

(num)

, line +

"\n"

)print

(num, line)

num +=

1 redis_sh.

set(

"sh"

+str

(num)

,"over"

)# over表示當前ping操作結束

defget_sh

(num)

: result = redis_sh.get(

"sh"

+ num)

return result

@diagnosis.route(

"/ping"

, methods=

["post"])

defping()

:# 執行ping命令

flush_sh_redis(

)# 每次請求ping時,清空指定redis某個庫

ip = request.form.get(

"ip")if

not ip:

return jsonify(status=

4004

, msg=

"ip引數不能為空"

)# 中文校驗

a = re.match(r"^[\x00-\xff]+$"

, ip)

ifnot a:

sysconfig_log.info(

"ping測試失敗"

)return jsonify(status=

4004

, msg=

'ping命令不能包含中文'

) command =

"ping -c 5 -w 10 %s"

% ip

try:# 起執行緒執行ping命令

task = threading.thread(target=sh, args=

(command, ip)

) task.start(

)except exception as e:

print

(e)return jsonify(status=

4004

, msg=

'ping命令執行失敗'

)return jsonify(status=

0, msg=

"開始進行ping測試"

)@diagnosis.route(

"/get_ping_result"

, methods=

["get"])

defget_ping_result()

:# 獲取ping結果

# num引數,表示前端第幾次獲取資料,num從1開始,前端在呼叫時,如果當前num值沒有獲取到資料,那麼num值不變,繼續呼叫該介面,獲取當前num值得資料,直到拿到資料為止

num = request.args.get(

"num"

) num =

str(num)

result = get_sh(num)

if result ==

"over"

:return jsonify(status=

2, msg=

"over")if

not result:

return jsonify(status=

1, msg=

"暫無資料"

)# 請求的資料暫時沒有生成,繼續使用當前num值發出請求

result = result.split(

"\n"

) result.pop(-1

) data =

return jsonify(data=data, status=

0, msg=

"ping測試成功"

)

IVRE中如何分析實時獲取的資料報?

ps 要是有哪位大牛知道怎麼進行自動化的操作,小弟跪求告知,多謝 ivre對資料的分析有兩種方法,一種是基於bro,另一種是使用argus的log或者netflow的log,我採用的是第一種方法,因為argus的log我之前沒有遇到過,而.pcap的檔案因為wireshark的流行,我想大家都會知道...

利用Python在PI中尋找生日

1 使用y cruncher工具得待pi的億萬位的txt文件 2 很簡單,首先是得到可操作的文件,然後提示使用者輸入要查詢的生日,預設的格式是year mouth day,例如94 01 01,先檢查輸入的生日格式是否正確,要是正確的話就從文件中進行查詢,若查詢到就返回其存在的個數,從查詢的結果來看...

如何通過python計算圓周率PI

如下 def pi n pi 0 for k in range n pinforkrptb 程式設計客棧 1 pow 16,k 4 8 k 1 2 8 k 4 1 8 k 5 1 8 k 6 return pi import time scale 20 print 執行開始 center scale...