for循環
- 對列表進行迭代
>>> for i in [1,2,3]:
··· print (i)
···
1
2
3
- 通過range()函數生成連續數列
>>> for i in range(1,5):
··· print(i)
···
1
2
3
4
- range(初始值,終止值,步長),range得到的是一個左閉右開區間。
>>> range(1,10)
[1,2,3,4,5,6,7,8,9]
>>>range(1,9,2)
[1,3,5,7]
文件操作
- 文件操作的基本流程
- 調用open()函數打開文件,並創建一個File對象
- 調用File對象的read()或write()等方法,對文件內容進行讀寫等操作。
- 調用File對象的close()方法,關閉並保存文件內容。
- open()函數
通過open()函數以指定模式打開文件並創建文件對象:
文件對象=open('文件路徑', '模式')
- 文件打開模式主要包括:
1、r只讀模式(默認)
2、w只寫模式(如果文件已經存在,先清空原有內容,文件不存在則創建文件)
3、a追加模式(不覆蓋文件中原有的內容) - 如果傳遞給open()的文件名不存在。寫模式和添加模式都會創建一個新的空文件。
- 寫入文件
- write()方法不會在字符串的末尾自動添加換行字符
- 向文件中寫入內容:
>>> f=open("/tmp/ip.txt","w")
>>> f.write("192.168.80.1\n")
>>> f.write("192.168.80.2\n")
>>> f.write("192.168.80.3\n")
>>> f.close()
- 向文件中追加內容:
>>> f=open("/tmp/ip.txt","o")
>>> f.write("192.168.80.10\n")
>>> f.write("192.168.80.20\n")
>>> f.close()
- 讀取文件
- Python文件對象提供了三種“讀”方法:
1、read()
read()方法可以一次性讀取文件的所有內容
>>> f=open("/tmp/ip.txt", "r")
>>> f.read()
'192.168.80.1\n192.168.80.2\n192.168.80.3\n'
>>> f.close()
read()方法也可以指定讀取前幾個字節的數據:
>>> f=open("/tmp/ip.txt","r")
>>> f.read(12)
'192.168.80.1'
>>> f.close()
2、readline()
readline()方法可以從文件中讀取一行並作爲結果返回:
>>> f-open("/tmp/ip.txt","r")
>>> f.readline()
'192.168.80.1\n'
>>> f.readline()
'192.168.80.2\n'
>>> f.close()
3、readlines()
readlines()方法返回一個列表,文件的每一行作爲列表的一個元素:
>>> f=open("/tmp/ip.txt","r")
>>> f.readlines()
['192.168.80.1\n', '192.168.80.2\n', '192.168.80.3\n']
>>> f.seek(0)
>>> f.readlines()[0]#數組限定讀取的信息
'192.168.80.1\n'
f.close()
4、seek()方法可以將指針返回到指定位置。
>>> f.seek(0)#返回到第一行
'192.168.80.1\n'
- 讀取文件
- 通過for循環對列表進行迭代,這是最常用的讀取方法。
>>> f=open("/tmp/ip.txt", "r")
>>> for i in f.readlines():
print (i)
- 通過字符串strip()方法將文件中每行末尾的\n去除
>>> f=open("/tmp/ip.txt", "r")
>>> for i in f.readlines():
print (i.strip("\n"))
導入模塊(庫)
模塊的概念
- 模塊也叫庫,每個模塊中都內置了大量的功能函數、類和變量。它就像是積木,可以根據需要進行調用組合。
- 模塊就是程序,每個模塊就是一個後綴爲.py的Python程序。
- Python的模塊分爲標準模塊和第三方模塊,標準模塊就是python內置的,第三方模塊則需要安裝之後才能使用。
- 可以通過help命令瞭解一個模塊的基本幫助信息,如:
help('sys')
模塊導入
- 無論標準模塊還是第三方模塊都需要導入。
- 導入方法:
- 直接調用模塊:
import 模塊名
- 從模塊中調用某個函數:
from 模塊名 import 函數名
import os
,應採用“模塊名.方法名
”的形式使用模塊中的方法。如:os.system()
from os import *
,可以直接使用system()方法,無需加上模塊名作爲前綴。
sys模塊
sys是一個標準模塊,與Python解釋器密切相關。
- (1)sys.argv
sys.argv是一個變量,專門用來向Python解釋器傳遞參數,類似於Shell腳本編程中的位置變量。
#!/usr/bin/env python
#coding=utf-8
import sys
print("腳本文件是:",sys.argv[0])
print("參數的數量是:",len(sys.argv))
print("所有的參數:",str(sys.argv))
print("第一個參數是:",sys.argv[1])
print("第二個參數是:",sys.argv[2])
print("第三個參數是:",sys.argv[3])
- (2)sys.exit()
sys.exit()是一個方法,作用是退出當前程序。
- sys.exit()退出當前程序,並返回SystemExit異常。
- sys.exit(0),正常退出。
- sys.exit(“程序退出”),顯示一段提示信息。
#!/usr/bin/env python
#coding=utf-8
import sys
if len(sys.argv) != 2:
print("正確使用方法:"+ sys.argv[0] + "IP列表文件")
print("例如:./m0re.py /root/ip.txt")
sys.exit()
OS模塊
os模塊提供了訪問操作系統服務的功能。
它最常用的是os.system()
方法,可以在Python中使用操作系統命令。
os.system("ls /root")
banner.py flag.sh pass.txt
ip.txt shadow
0
還有幾個
- os.path.isfile()方法,判斷指定的對象是否爲文件,返回True或False。
>>> os.path.isfile("/root/pass.txt")
True
>>> os.path.isfile("/root/password.txt")
False
- os.path.isdir()方法,判斷指定對象是否爲目錄。
- os.path.exists()方法,判斷指定的對象是否存在。
>>> os.path.exists("/root/pass.txt")
True
>>> os.path.exists("/root/")
True
多線程
通過threading模塊中的Thread()類可以創建和管理線程對象。
使用時,使用多線程調用一個函數,然後啓動,就可以明顯提高速度。
t=Thread(target=checkVulns,args=(ip,port))
t.start()
用時再查
optparse模塊
利用該模塊可以設置選項,通過選項向腳本傳遞所需的參數。
from optparse import OptionParser
parser=OptionParser()
parser.add_option("-f","--file",type="string",dest="filename")
parser.add_option("-i","--ip",type="string",dest="address")
(option,args)=parser.parse_args()
print options.filename
print options.address
代碼解釋
·第一行,導入optparse模塊中的類OptionParser。
·第二行,將類實例化成對象。
·第三行,利用add_option()方法添加選項。-f和--file分別表示長短選項名,長選項可以省略。type指定了參數類型,默認爲string,dest指定將參數賦值給哪個變量。
·第四行,利用add_option()方法添加選項-i和-ip。
·第五行,利用parse_args()方法來獲取定義的選項和參數,可以視作一種固定用法。
·parse_args()方法返回兩個值,其中options對象保存了所傳遞進來的參數值。
·第六、七行,通過options.filename和options.address的方式調用參數值。