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)
相关推荐
ONExiaobaijs2 分钟前
Java jdk运行库合集
java·开发语言·python
wangjialelele2 分钟前
二刷C语言后,一万字整理细碎知识点
c语言·开发语言·数据结构·c++·算法·cpp
Pyeako4 分钟前
深度学习--PyTorch框架&优化器&激活函数
人工智能·pytorch·python·深度学习·优化器·激活函数·梯度爆炸与消失
mjhcsp6 分钟前
P3145 [USACO16OPEN] Splitting the Field G(题解)
开发语言·c++·算法
rit84324999 分钟前
UVE算法提取光谱特征波长的MATLAB实现与应用
开发语言·算法·matlab
Knight_AL13 分钟前
一文讲透 Java 中transient的用处(结合 Flink 理解)
java·python·flink
阿蒙Amon14 分钟前
C#每日面试题-简述反射
开发语言·面试·c#
独行soc15 分钟前
2026年渗透测试面试题总结-5(题目+回答)
android·网络·python·安全·web安全·渗透测试
希赛网16 分钟前
网工面试:常问技术问题汇总(3)
服务器·前端·网络·网络工程师·ospf·网工面试·技术面
玩大数据的龙威19 分钟前
农经权二轮延包—一键出承包地块调查表
数据库·python