因工作需要,需要在服务器上抓取指定源IP的流量,分析出源IP、目的IP、目的端口、访问次数等信息,以下是UDP发包代码:
import socket
import random
import time
# conding : utf-8
# 定义发包目标IP地址
target_ip = "10.0.0.1"
# 定义常见端口号列表
port_list = [2000]
# 发包循环次数
num_iterations = 10
# 发包函数
def send_packet(target_ip, target_port):
try:
# 创建UDP socket对象
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
# 获取本地IP和端口信息
local_ip = socket.gethostbyname(socket.gethostname())
local_port = random.randint(1024, 65535)
# 获取发包时间
send_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 生成随机的发包内容
packet_data = generate_packet_data()
# 发送数据
s.sendto(packet_data.encode(), (target_ip, target_port))
# 设置接收超时时间
s.settimeout(1)
# 接收响应数据
response, _ = s.recvfrom(1024)
# 打印发包信息
print("发包内网IP地址:", local_ip)
print("发包出口IP地址:", s.getsockname()[0])
print("源端口:", local_port)
print("目的IP:", target_ip)
print("目的端口:", target_port)
print("发送时间:", send_time)
print("发送成功状态: 发送成功")
print("响应数据:", response.decode())
print("-----------------------------------------")
except Exception as e:
# 打印发送失败的原因信息
print("发送失败:", str(e))
print("-----------------------------------------")
# 生成随机的发包内容
def generate_packet_data():
packet_data = "".join(random.choices("123456789", k=9))
return packet_data
# 发送包循环
for _ in range(num_iterations):
for port in port_list:
send_packet(target_ip, port)
time.sleep(1) # 等待1秒再继续发送包