1. 程式人生 > >【Python】區域網ping掃描線上主機

【Python】區域網ping掃描線上主機

首先參考了這個實現
它是開多執行緒來呼叫cmd ping
LZ選擇用subprocess.Popen,讓子程序通過管道將輸入快取到系統buffer中。Popen會返回一個物件,可以通過它與子程序互動,獲取其狀態等。輪詢Popen物件判斷ping是否結束,進而檢查echo資訊判斷,得到線上主機列表。。
速度比多執行緒快很多,掃描1-255只需要不到10s

#-*- coding: utf-8 -*- 
import platform 
import sys 
import os 
import time 
import thread
from subprocess import Popen, PIPE

# 傳入ip地址,呼叫 cmd ping, 返回 Popen 物件
# 指定ping的stdout通過管道寫入設定的buffer中 def invoke_ping(addr): # windows 的引數和linux下不同 cmd = ['ping', '-n', '1', addr] ret = 0 try: ret = Popen(cmd, bufsize=1024, stdout=PIPE) except ValueError: print 'error occur in invoke_ping: ' + addr return ret # 簡單地通過 ping 回顯資訊檢查是否線上
def check_online(popen_obj): echo = popen_obj.communicate()[0].split('\n') if len(echo) >= 3: print echo[2] ttl_pos = echo[2].find('TTL') if ttl_pos != -1: ms_pos = echo[2].find('ms') i = ms_pos - 1 while i > 0 and echo[2][i:i+1
].isdigit() == True: i -= 1 ti = int(echo[2][i+1:ms_pos]) ttl = int(echo[2][ttl_pos + 4:]) return (ti, ttl) return tuple() def ping_scan(dst): oks = [] scq = {} net_addr = dst.split('.') for i in range(0, 256): net_addr[3] = str(i) tmp = invoke_ping( '.'.join(net_addr) ) if type(tmp) != int: scq[i] = tmp while len(scq) != 0: to_be_removed = [] for k, v in scq.items(): if v.poll() != None: ret = check_online(v) if len(ret) > 0: net_addr[3] = str(k) oks.append( ( k, ret) ) to_be_removed.append( k ) for i in to_be_removed: scq.pop(i) return oks if __name__ == '__main__': start_time = time.clock() dst_net = '172.30.58.229' online_list = ping_scan(dst_net) online_list.sort() prefix = '.'.join( dst_net.split('.')[0:3] ) for i in online_list: fmt = '%s time=%dms ttl=%d' print fmt % ( prefix+'.'+str(i[0]), i[1][0], i[1][1] ) print '%d hosts in total' % len(online_list) print 'process time: %lfs' % (time.clock() - start_time)

相關推薦

Python區域網ping掃描線上主機

首先參考了這個實現 它是開多執行緒來呼叫cmd ping LZ選擇用subprocess.Popen,讓子程序通過管道將輸入快取到系統buffer中。Popen會返回一個物件,可以通過它與子程序互動

筆記關於開發板、主機windows和虛擬機器ubuntu之間的ping

提前做好準備: 1.我們先將各個IP確定好: 主機windows IP為: 192.168.1.20 開發板執行uboot或linux IP為: 192.168.1.10 虛擬機器ubuntu IP為: 192.168.1.141 2. 將主機windows

VMware 2019校招線上考試 (python)(數量有限的最少硬幣問題、還能拖多久、最大整數)

1.硬幣個數有限,要求用最少的硬幣找錢。 硬幣個數有限,要求用最少的硬幣找錢。 假設各種硬幣面值t[i](順排),個數c[i],a[i][j]為用t[0]..t[i]面值的硬幣找錢j的最少硬幣個數。 則a[i][j] = min{k + a[i - 1][j

Python實現網站備份檔案掃描+原始碼分析

一開始我用的requests庫的get方法 但是這種方法會自動下載檔案,所以不可取 後來發現urllib2的庫相對來說不錯 原始碼如下# coding = utf-8 import urllib2 i

python批量掃描IP地址80/8080埠

主要是在實習當中用到的IP埠掃描的一個操作,python語言,輸出到txt文件中,同時顯示在dos輸出視窗上。 程式碼: 檔名:port_scan.py #!/usr/bin/env python import socket def check_port(address

python獲取linux主機ip的一種方法

python有好幾種方法可以獲取主機的ip地址。我常用的一種是通過socket.socket().inet_ntoa()來實現,非常方便;但這種方法有個限制就是要把網絡卡名(比如eth0)作為引數傳進來。所以加多了一個條件判斷,如果發現以上方法獲取ip拋異常時,那就用調起s

novaliberty版本openstack線上調整雲主機大小

有時虛擬機器建立後發現虛擬機器規格太小,滿足不了業務需求。於是需要線上拉伸虛擬機器的規格。 1、用admin使用者登入dashboard,建立滿足需求的虛擬機器規格 2、輸入適當的引數

Python正則表達式1(未完)

pes mmu get regular rop 則表達式 line out github 1、正則表達式唯一的用途就是在文本中匹配和尋找模式,模式可以簡單,也可以復雜。 2、Regexr 這個網站很個性的就是,有一個community標簽,打開後可以看到評分由高到低

LeetCodePythonBinary Tree Inorder Traversal

nod 不知道 otto div ack return integer neu else Given a binary tree, return the inorder traversal of its nodes‘ values. For example: Gi

Python決策樹的python實現

uia bmp say 不知道 times otto outlook lru bgm 【Python】決策樹的python實現 2016-12-08 數據分析師Nieson 1. 決策樹是什麽? 簡單地理解,就是根據一些 feature 進行分類,每個節點提一個問

Python基礎知識

數據 文件 專用 一切都 元組 內存 引用傳遞 asc ilo 1. python腳本語言的第一行,目的就是指出,你想要你的這個文件中的代碼用什麽可執行程序去運行它 #!/usr/bin/python 是告訴操作系統執行這個腳本的時候,調用/usr/bin下

Pythonpython2.7 安裝配置OpenCV2

pen 2.4.1 安裝 so文件 strong make lib con ack 環境:Ubuntu16.04 anaconda Python2.7 opencv2.4.13 安裝opencv後 import cv2 遇到錯誤信息: No module named cv2

Python數組排序

log false blog sort函數 () ron 返回 imp 總結 1.numpy庫:argsort()   argsort函數返回的是數組值從小到大的索引值(升序排列) 一維: In [1]: import numpy as np In [2]: x

Pythonselenium調用IE11瀏覽器,報錯“找不到元素”NoSuchWindowException: Message:Unable to find element on closed window

conn ont csdn creates logs 註冊 target get 意思 當編寫自動化腳本,定位瀏覽器元素時,報如下錯誤: 代碼: >>> # coding=utf-8 >>> from selenium import w

PythonSelenium元素定位錯誤之解決辦法

tor log -m alt src 多個 common nbu invalid 當使用class定位元素時發現報錯: 錯誤信息:selenium.common.exceptions.InvalidSelectorException: Message: Compound

Python京東商品價格監控

ets amp inpu text init clas bject logs while import requests,json,re,winsound,time class Stock(object): def __init__(self):

pythonpython魔法方法(待填坑)

絕對值 tle init cls -m del __init__ 另一個 trunc 參考博文:http://pyzh.readthedocs.io/en/latest/python-magic-methods-guide.html 參考博文英文原版:http://www

Python05、python程序結構控制語句

python一、程序結構程序結構:語句和表達式按照什麽樣的順序執行所有語言無非就三種程序結構: 順序:默認結構 語句從上到下依次一行一行的執行, 分支:選擇一個分支執行,永遠最多只執行一個分支 循環:二、分支結構語句1、Python的比較操作

Python06、python內置數據結構1

python list 一、數據結構與獲取幫助信息1、數據結構 通過某種方式(例如對元素進行編號)組織在一起的數據元素的集合,這些數據元素可以是數字或者字符,甚至可以是其它的數據結構。 python的最基本數據結構是序列 序列中的每個元素被分配一個序號(即元素的位置),也稱為索引:索引從0開始編

Python07、python內置數據結構之字符串及bytes

str 字符串 一、字符串1、定義和初始化In [4]: s = "hello python" In [4]: s = "hello python" In [5]: s Out[5]: ‘hello python‘ In [6]: s = ‘hello python‘ In [7]: s Out