Python使用scapy库监听指定的网卡数据并转发

  • 监听指定网卡中的数据(UDP)
  • 数据转发
    具体实现代码如下:
python 复制代码
from scapy.all import *
from scapy.layers.inet import UDP, IP
from scapy.layers.l2 import Ether


def Callback(packet):
    # 目的IP
    dst_ip = packet[IP].dst
    # 源IP
    src_ip = packet[IP].src
    # 目的端口
    dst_port = packet[UDP].dport
    # 数据
    value = packet['Raw'].load
    # 目的MAC地址
    dst_mac = packet['Ether'].dst
    # 源MAC地址
    src_mac = packet['Ether'].src
    print(f"收:{packet}")
    # 转发数据
    forward_udp(dst_mac, src_mac, dst_ip, src_ip, dst_port, value)


def forward_udp(dst_mac, src_mac, dst_ip, src_ip, dst_port, value):
    """
    转发数据至指定目标
    :param dst_mac: 目的MAC
    :param src_mac: 源MAC
    :param dst_ip: 目的IP
    :param src_ip: 源IP
    :param dst_port: 目的端口
    :param value: 数据
    :return:
    """
    # 创建以太网层
    eth = Ether(dst=dst_mac, src=src_mac)
    # 创建IP层
    ip = IP(src=src_ip, dst=dst_ip)
    # 创建UDP层
    udp = UDP(dport=dst_port + 1)
    # 创建一个UDP数据包
    packet = eth / ip / udp / Raw(value)
    print(f"发:{packet}")
    # 通过原始套接字发送数据包,iface:指定网卡名称
    sendp(packet, iface="WLAN")


if __name__ == '__main__':
	# 目标地址
	IP = '192.168.3.1'
	# 目标端口
	Port = '9999'
	# 监听的规则,iface:监听的网卡名称
    sniff(filter=f"udp and host {IP} and port  {Port}", iface="WLAN", count=-1, prn=Callback)
相关推荐
love530love6 小时前
ComfyUI rgthree-comfy Image Comparer 节点无输出问题排查与解决
人工智能·windows·python·comfyui·rgthree-comfy·nodes 2.0·vue 节点
2401_889884666 小时前
高性能计算通信库
开发语言·c++·算法
badhope6 小时前
Docker从零开始安装配置全攻略
运维·人工智能·vscode·python·docker·容器·github
lplum_6 小时前
2025第十届“楚慧杯”湖北省网络与数据安全实践能力竞赛 wp
网络·安全·web安全·网络安全·系统安全·密码学·新人首发
小谢取证6 小时前
侦查笔记:云服务器镜像快速勘验
网络
用户0332126663677 小时前
使用 Python 复制 Excel 工作表
python
mounter6257 小时前
基于MLX设备的Devlink 工具全指南与核心架构演进
linux·运维·服务器·网络·架构·kernel
JaydenAI7 小时前
[LangChain之链]RunnableCallable——将“自由定义”的函数变成标准组件
python·langchain·ai编程
wefg17 小时前
【计算机网络】网络基础 - 1(网络协议/TCP/IP协议栈/局域网内外数据传输/数据封装、解包、分用)
linux·服务器·网络
GinoWi7 小时前
Chapter 3 - Python列表
python