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)
相关推荐
皮皮学姐分享-ppx3 小时前
政府绿色采购数据库(2015-2024.3)
大数据·网络·数据库·人工智能·制造
想吃火锅10053 小时前
【leetcode】405.数字转换为十六进制数js
开发语言·javascript·ecmascript
珺毅同学3 小时前
YOLO生成预测json标签迁移问题
python·yolo·json
骑士雄师3 小时前
18.4 长期记忆可修改版
python
W_chuanqi3 小时前
联想M7615DNA网络打印方法
网络·联想·打印机网络连接
专注VB编程开发20年3 小时前
AI 生成C# WinForm 窗体 = 目前就是垃圾
开发语言·人工智能·c#
cfm_29143 小时前
JVM GC垃圾回收初步了解
java·开发语言·jvm
~小先生~3 小时前
Python从入门到放弃(一)
开发语言·python
天佑木枫4 小时前
第2天:变量与数据类型 —— 让程序记住信息
python
许彰午4 小时前
17_synchronized关键字深度解析
java·开发语言