python信息收集脚本编写
python信息收集脚本编写
目录
简单的域名查找ip
import socket
def get_ip(domain):
ip_addr = socket.getaddrinfo(domain,'http')
print(ip_addr[0][4][0])
import socket
def get_ip(domain):
ip_addr = socket.gethostbyname(domain)
print(ip_addr)
使用python执行系统命令返回解析域名
import os
data = os.popen('nslookup www.baidu.com')
print(data.read())
端口扫描
import socket
def Scan(host,ports):
try:
ip_addr = socket.gethostbyname(host)
print("Scan result for "+ip_addr)
except:
print("[-]Cannot find {} : Unknown host".format(host))
return
socket.setdefaulttimeout(1)
for port in ports:
print("Scanning port"+str(port))
try:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #socket套接字
s.connect((host,port))
print("TCP open port:"+str(port))
except:
print('Closed port:'+str(port))
Scan('www.baidu.com',[80,443,3389,1433,23,445])
whois查询
安装库
pip install python-whois
python代码
import whois
data = whois.whois('www.baidu.com')
print(data)
子域名爆破
准备一个字典dic.txt
import socket
for zym in open('dic.txt'):
zym=zym.replace('\n','')
url = zym+'.baidu.com'
try:
ip_addr = socket.gethostbyname(url)
print(url+'->'+ip_addr)
except:
print("[-]Cannot find {} : Unknown
python脚本的自定义参数
sys.argv
import sys
sys.argv[0] #python脚本的路径
sys.argv[1] #第一个参数
sys.argv[2] #第二个参数
...
python test.py -a -b
argparse标准库模块解析命令行参数
import argparse
#建立解析对象
parser = argparse.ArgumentParser()
#增加属性:给实例添加一个echo属性
parser.add_argument("echo")
#将属性给予args实例,把所有设置的add_argument的属性返回到子实例,所有添加的内容都会添加到args实例中
args = parser.parse_args()
print(args.echo)
运行结果
$ python xxx.py 123456789
123456789
可以对参数设置提示
parser.add_arguement("echo",help = "echo is here")
运行-h输出
$ python xxx.txt -h
usage: b.py [-h] echo
positional arguments:
echo echo is here
optional arguments:
-h, --help show this help message and exit
定义参数类型
#由于parse.add_argument()接受的值默认为str,可以在添加属性是加入type参数
parser.add_argument("number", help = "The number is given", type = int)
可选参数
在 add_argument 前,给属性名之前加上“- -”,就能将之变为可选参数。
parser.add_argument("--username",help = "input the username")
$ python xxx.txt --bool 1
args.bool = 1
$ python xxx.txt -h
usage: b.py [-h] [--bool BOOL]
optional arguments:
-h, --help show this help message and exit
--bool BOOL Whether to pirnt sth.
parser.add_argument("--bool",help = "Whether to pirnt sth.",action = "store_true")
在执行python xxx.py -bool默认true,无需加上赋值内容
参数简写
#在命令行输入的时候只需要输入 -b即可
parser.add_argument("-b","--bool",action="store_true")
限制输入值
#choice 可以限定我们能够输入的数为0,1,2其中一个。
parser.add_argument("-b", "--bool", choices = [0,1,2], help="you can only input 0 1or 2.", type = int)
参数值和顺序
一般我们要把可选参数最后add,不可选参数放前面add。
而在命令行里面输入代码时,程序会先赋值“先add的参数选项”。
count操作计数赋值
parser.add_argument("-b", "--bool", action="count",default = 0)#默认为0
$ python xxx.py -bbb
>>>args.bool = 3
参数冲突
#使用group方法来让参数不可以被同是指定
parser = argparse.ArgumentParser()
# 3添加属性
#-f 和 -F不能被同时指定
group = parser.add_mutually_exclusive_group()
group.add_argument("-f", "--form", action="store_true")
group.add_argument("-F", "--Form", action="store_true")
parser.add_argument("-b", "--bool", action="count",default = 0)
args = parser.parse_args()
用法中[-f | -F]说明-f和-F不能同时使用
$ python xxx.py -h
usage: xxx.py [-h] [-f | -F] [-b]
dest
dest:如果提供dest,例如dest="a",那么可以通过args.a访问该参数
dest 允许自定义ArgumentParser的参数属性名称
parser.add_argument('-U',dest='user')
args = parser.parse_args()
user = args.user #可以直接访问args.user访问参数

浙公网安备 33010602011771号