一、基础知识
我们举个例子来说明一下,在Linux下我们使用命令的时候可能会需要参数,有些命令不仅需要参数而且还需要指定一些类型、名字等等,比如:
root@kali:~# find /etc -name "*.config"
/etc/menu-methods/menu.config
/etc/manpath.config
/etc/vmware-caf/pme/config/_previous_/cafenv.config
/etc/X11/Xwrapper.config
以上命令表示,查找/ect文件下的名字后缀未config的文件名称。
那么我们以上脚本的作用是干什么的?就是说我们想让脚本来执行获取banner信息,但是我们希望给脚本加一些参数,比如 -f指定我们对应的文件,-i指定我们要扫描的端口。就跟以上的find命令一样,我们使用命令之后指定一些特定的参数,执行特定的行为。
我们先写一下这个脚本:
#!/usr/bin/python
#coding=utf-8
from optparse import OptionParser
parser=OptionParser()
parser.add_option("-f","--file",type="string",dest="filename")
parser.add_option("-i","--ip",type="string",dest="address")
(options,args)=parser.parse_args()
print options.filename
print options.address
~
执行:
root@kali:~# ./36.py -f /root/4.txt -i 192.168.1.109
/root/4.txt
192.168.1.109
**
二、设置帮助信息
**
#!/usr/bin/python
#coding=utf-8
from optparse import OptionParser
usage="Usage: %prog -f <filename> -i <ip address>"
parser=OptionParser(usage=usage)
parser.add_option("-f","--file",type="string",dest="filename",help="please input a filename")
parser.add_option("-i","--ip",type="string",dest="address",help="please input a ip")
(options,args)=parser.parse_args()
print options.filename
print options.address
**
三、改进参数
**
import socket
import sys
import os
from threading import Thread
from optparse import OptionParser
def getbanner(IP,port):
socket.setdefaulttimeout(2)
s=socket.socket()
try:
s.connect((IP,port))
banner=s.recv(1024)
s.close()
return banner
except:
pass
def checkbanner(IP,port):
banner=getbanner(IP,port)
if banner:
if ("2.3.4" in banner):
print IP + " it is valubale",
else:
print IP + " it is not valuable",
else:
print IP + " it not have banner"
if __name__=="__main__":
usage="Usage:%prog -f <filename> -i <ip address>"
parser=OptionParser(usage=usage)
parser.add_option("-f","--f",type="string",dest="filename",help="please input a filename")
parser.add_option("-i","--ip",type="string",dest="address",help="please input a ip")
(options,args)=parser.parse_args()
filename=options.filename
ip=options.address
if (ip==None and filename==None):
print "please input a filename and ip"
sys.exit()
if filename:
if not os.path.exists(filename):
print "请重新输入"
sys.exit()
else:
port=21
f=open(filename,'r')
for i in f.readlines():
IP=i.strip("\n")
t=Thread(target=checkbanner,args=(IP,port))
t.start()
f.close()
if ip:
IP1=ip.split(".")[0] + "." + ip.split(".")[1] +"." + ip.split(".")[2] + "."
for i in range(1,255):
IP=IP1 + str(i)
port=21
r=Thread(target=checkbanner,args=(IP,port))
r.start()
import socket
import sys
import os
from threading import Thread
from optparse import OptionParser
def getbanner(IP,port):
socket.setdefaulttimeout(2)
s=socket.socket()
try:
s.connect((IP,port))
banner=s.recv(1024)
s.close()
return banner
except:
pass
def checkbanner(IP,port):
banner=getbanner(IP,port)
if banner:
if ("2.3.4" in banner):
print IP + " it is valubale",
else:
print IP + " it is not valuable",
else:
print IP + " it not have banner"
if __name__=="__main__":
usage="Usage:%prog -f <filename> -i <ip address>"
parser=OptionParser(usage=usage)
parser.add_option("-f","--f",type="string",dest="filename",help="please input a filename")
parser.add_option("-i","--ip",type="string",dest="address",help="please input a ip")
(options,args)=parser.parse_args()
filename=options.filename
ip=options.address
if (ip==None and filename==None):
print "please input a filename and ip"
sys.exit()
if filename:
if not os.path.exists(filename):
print "请重新输入"
sys.exit()
else:
port=21
f=open(filename,'r')
for i in f.readlines():
IP=i.strip("\n")
t=Thread(target=checkbanner,args=(IP,port))
t.start()
f.close()
if ip:
IP=ip
port=21
r=Thread(target=checkbanner,args=(IP,port))
r.start()