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访问参数
posted @ 2023-07-22 22:25  Saku1a  阅读(130)  评论(0)    收藏  举报