通过python收集内网资产地址

批量远程H3C交换机查询arp表,记录arp表中的IP地址,以此来收集内网资产IP。
交换机SSH账号密码文件命名py_sshinfo.xls,A列为IP,B列为账号,C列为密码,从第二行开始读取

import paramiko
import time
import xlwings
import re
import os

app = xlwings.App(visible=False)
current_dir = os.path.dirname(os.path.abspath(__file__))
sshinfo_path = os.path.join(current_dir, 'py_sshinfo.xls')
sshinfo = app.books.open(sshinfo_path)
sshinfo_sheet = sshinfo.sheets[0]
sshinfo_rows = sshinfo_sheet.used_range.last_cell.row

try:
    for a in range(1,sshinfo_rows):
        ip = sshinfo_sheet.range('A'+str(a+1)).value
        username = sshinfo_sheet.range('B'+str(a+1)).value
        password = sshinfo_sheet.range('C'+str(a+1)).value

        if a+1 == sshinfo_rows:
            sshinfo.save()
            sshinfo.close()

        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

        try:
            ssh.connect(hostname=ip,port=22,username=username,password=password)
        except BaseException:
            if a+1 == 2:
                print(f"[warn] 网络连接异常 或 {sshinfo_path} 文件第{a+1}行错误\n")
            else:
                print(f"[warn] {sshinfo_path} 文件第{a+1}行错误\n")
            sshinfo.save()
            sshinfo.close()

        command = ssh.invoke_shell()
        print(f"ssh {ip} ...")
        command.send("screen-length disable\n")
        command.send("dis arp\n")
        
        while not command.recv_ready():
            pass

        time.sleep(3)
        output=''

        while command.recv_ready():
            output += command.recv(65535).decode().strip()
            match = re.findall(r'[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}', output)

        try:
            excel_path = os.path.join(current_dir, 'py_ssh.xls')

            if not os.path.exists(excel_path):
                wb = app.books.add()
                wb.save(excel_path)
                wb.close()
                print('已新建Excel:\n', excel_path,'\n')

            wt = app.books.open(excel_path)
            sheet = wt.sheets[0]
            rows = sheet.used_range.last_cell.row
            print("results:")
            print(f'old_data_rows={rows}')
            old_data=[]
            old_data=sheet.range(f'A1:A{rows}').value

            if(old_data):
                full_data = old_data + match
                data=list(set(full_data))
            else:
                data=match

            print(f'new_data_rows={len(data)}\n')
            for i in range(0,len(data)):
                sheet.range('A'+str(i+1)).value = data[i]
        
        finally:
            wt.save()
            wt.close()

        ssh.close()

finally:
    app.quit()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
#网络资产信息扫描 在渗透测试(特别是内网)中经常需要对目标进行网络资产收集,即对方服务器都有哪些IP,IP上开了哪些端口,端口上运行着哪些服务,此脚本即为实现此过程,相比其他探测脚本有以下优点:1、轻巧简洁,只需python环境,无需安装额外外库。2、扫描完成后生成独立页面报告。 此脚本的大概流程为 ICMP存活探测-->端口开放探测-->端口指纹服务识别-->提取快照(若为WEB)-->生成结果报表 运行环境:python 2.6 + 参数说明 -h 必须输入的参数,支持ip(192.168.1.1),ip段(192.168.1),ip范围指定(192.168.1.1-192.168.1.254),ip列表文件(ip.ini),最多限制一次可扫描65535个IP。 -p 指定要扫描端口列表,多个端口使用,隔开 例如:22,23,80,3306。未指定即使用内置默认端口进行扫描(21,22,23,25,53,80,110,139,143,389,443,445,465,873,993,995,1080,1723,1433,1521,3306,3389,3690,5432,5800,5900,6379,7001,8000,8001,8080,8081,8888,9200,9300,9080,9999,11211,27017) -m 指定线程数量 默认100线程 -t 指定HTTP请求超时时间,默认为10秒,端口扫描超时为值的1/2。 -n 不进行存活探测(ICMP)直接进行扫描。 结果报告保存在当前目录(扫描IP-时间戳.html)。 例子: python NAScan.py -h 10.111.1 python NAScan.py -h 192.168.1.1-192.168.2.111 python NAScan.py -h 10.111.1.22 -p 80,7001,8080 -m 200 -t 6 python NAScan.py -h ip.ini -p port.ini -n 服务识别在server_info.ini文件中配置 格式为:服务名|默认端口|正则 例 ftp|21|^220.*?ftp|^220- 正则为空时则使用端口进行匹配,否则以正则匹配结果为准。 项目地址 https://github.com/ywolf/ 欢迎大家反馈建议和BUG

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值