parser.add_option
add_option用来加入选项,action是有store,store_true,store_false等,dest是存储的变量,default是缺省值,help是帮助提示 。最后通过parse_args()函数的解析。
parse_args() 返回的两个值:(options, args) = parser.parse_args()
options,它是一个对象(optpars.Values),保存有命令行参数值。只要知道命令行参数名,如 file,就可以访问其对应的值: options.file 。args,它是一个由 positional arguments 组成的列表。
parser.add_option("-f", "--file",
action="store", type="string", dest="filename")
args = ["-f", "foo.txt"]
(options, args) = parser.parse_args(args)
print options.filename
#最后将会打印出 “foo.txt”。
当 optparse 解析到’-f’,会继续解析后面的’foo.txt’,然后将’foo.txt’保存到 options.filename 里。当调用 parser.args() 后,options.filename 的值就为’foo.txt’。
split() 方法语法:
str.split(str="", num=string.count(str)).
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num -- 分割次数。默认为 -1, 即分隔所有。
例
txt = "Google#Runoob#Taobao#Facebook"
# 第二个参数为 1,返回两个参数列表
x = txt.split("#", 1)
print x
#['Google', 'Runoob#Taobao#Facebook']
ICMP主机探测
from scapy.all import *
from random import randint#产生随机数字段
from optparse import OptionParser#用于生成命令行参数
def main():
parser = OptionParser("Usage:%prog -i <target host>")#输出帮助信息
parser.add_option('-i',type='string',dest='IP',help='specify target host')
options,args=parser.parse_args()
print("Scan report for"+options.IP+"\n")#获取ip地址参数
if '-' in options.IP:#ip中存在-说明要扫描多台主机
for i in range(int(options.IP.split('-')[0].split('.')[3]),int(options.IP.split('-')[1])+1):#循环便利出ip地址
Scan(
options.IP.split('.')[0]+'.'+options.IP.split('.')[1]+'.'+options.IP.split('.')[2]+'.'+str(i)
)
time.sleep(0.2)
else:
Scan(options.IP)
print("\nScan finished!...\n")
def Scan(ip):
ip_id = randint(1,65535)
icmp_id = randint(1,65535)
icmp_seq = randint(1,65535)
packet = IP(dst=ip,ttl=64,id=ip_id)/ICMP(id=icmp_id,seq=icmp_seq)/b'rootkit'
result = sr1(packet,timeout=1,verbose=False)#sr()”函数是用来发送数据包和接收应答。该函数返回一对数据包及其应答,还有无应答的数据包。“sr1()”函数是一种变体,用来返回一个应答数据包。
if result:
for rcv in result:
scan_ip = rcv[IP].src
print(scan_ip+'----->' 'host is up')
else:
print(ip+'----->' 'host is down')
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("interrupted by user,killing all threads..")