1. 程式人生 > >python實現區域網ip地址掃描

python實現區域網ip地址掃描

python 遍歷區域網ip

從知道python開始,我的視線裡就沒缺少過他。尤其是現如今開發語言大有傻瓜化的趨勢。而作為這一趨勢的領導,指令碼語言就顯得格外亮眼。不管是python還是ruby,perl,都火的不得了。就連java都出了個指令碼語言版本,好像是叫Groovy,號稱下一代的java。

也難怪,硬體發展使得很多場合的處理效能過剩。指令碼語言的缺點正在被逐步縮小。扯得有點遠了。

import subprocess
cmd="cmd.exe"
begin=101
end=200
while begin<end:
    p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)
    p.stdin.write("ping 192.168.1."+str(begin)+"\n");
    p.stdin.close()
    p.wait()
     
    print"result is:%s"%p.stdout.read()
    begin+=1;

程式很簡單:
用到了subprocess模組,下面是用法:

subprocess的目的就是啟動一個新的程序並且與之通訊。

subprocess模組中只定義了一個類: Popen。可以使用Popen來建立程序,並與程序進行復雜的互動。它的建構函式如下:

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

引數stdin, stdout, stderr分別表示程式的標準輸入、輸出、錯誤控制代碼。他們可以是PIPE(資料管道),檔案描述符或檔案物件,也可以設定為None,表示從父程序繼承。如果引數shell設為true,程式將通過shell來執行。引數env是字典型別,用於指定子程序的環境變數。如果env = None,子程序的環境變數將從父程序中繼承

subprocess.PIPE

  在建立Popen物件時,subprocess.PIPE可以初始化stdin, stdout或stderr引數。表示與子程序通訊的標準流。

subprocess.STDOUT

  建立Popen物件時,用於初始化stderr引數,表示將錯誤通過標準輸出流輸出。

Popen的方法:

Popen.poll()

  用於檢查子程序是否已經結束。設定並返回returncode屬性。

Popen.wait()

  等待子程序結束。設定並返回returncode屬性。

Popen.communicate(input=None)

  與子程序進行互動。向stdin傳送資料,或從stdout和stderr中讀取資料。可選引數input指定傳送到子程序的引數。Communicate()返回一個元組:(stdoutdata, stderrdata)。注意:如果希望通過程序的stdin向其傳送資料,在建立Popen物件的時候,引數stdin必須被設定為PIPE。同樣,如果希望從stdout和stderr獲取資料,必須將stdout和stderr設定為PIPE。

Popen.send_signal(signal)

  向子程序傳送訊號。

Popen.terminate()

  停止(stop)子程序。在windows平臺下,該方法將呼叫Windows API TerminateProcess()來結束子程序

Popen.kill()

  殺死子程序

Popen.stdin,Popen.stdout ,Popen.stderr ,官方文件上這麼說:

stdin,stdoutandstderrspecify the executed programs’ standard input, standard output and standard error file handles, respectively. Valid values arePIPE, an existing file descriptor (a positive integer), an existing file object, andNone.

Popen.pid

  獲取子程序程序ID。

Popen.returncode

  獲取程序的返回值。如果程序還沒有結束,返回None。