自己动手实现UPnP进行端口映射的经过

UPnP协议安全风险深度解析:从零配置便利到内网后门攻击实战 在零配置网络环境中,设备自动发现与通信极大提升了便利性,其背后核心机制涉及服务发现、自动寻址与端口映射等关键技术。然而,这种自动化特性若缺乏严格验证,可能引发严重安全风险。从技术原理看,UPnP协议通过IGD组件实现NAT穿透,允许内网设备直接请求路由器创建端口映射,但默认缺乏身份认证机制。这种设计缺陷使得攻击者可利用UPnP进行内网渗透,典型手法包括创建隐蔽后门通道、实施DDoS放大攻击以及篡改防火墙规则。在智能家居和企业内网场景中,恶意软件常滥用UPnP功能将路由器变为攻击跳板,实现从内网到外网的权限突 阅读详情

自己动手实现UPnP进行端口映射的经过

    从接到任务,到实现了 UPnP 在家用路由器上进行端口映射的时间总共花费了 1个半月,下面大概讲讲从资料搜集到设计实现的经过,好给有同样需求的人一些线索(不论及具体实现和代码)。
    所谓 UPnP ,就是“通用的即插即用” ,注意是通用的,虽然很容易和 Windows 的即插即用混淆,但这肯定不是微软的专利!现在大部分的路由器都支持这个功能,只是默认情况下没有打开而已(基于安全考虑)。请管理员手动打开这个支持选项。

    这是用来干什么用的?如果我们要写 P2P 软件,那就用的着了,电骡不是有所谓的 LowID 和 highID 吗? 为了提高自己的共享能力(我为别人共享,别人也为我共享),我们(软件)要使用公网 IP 地址监听和建立连接,但是我们(软件)不是路由器,如何监听? 只好请路由器帮我们做一个端口映射,然后我们(软件)在内网监听,效果跟在公网上监听一样,也就是所谓 电骡的 HighID 了。 现在越来越多的用户都是内网用户的上网形式(NAT),如网吧。能够把自己的 LowID 提升为 HighID ,那么肯定会有更多的备选数据源啊,这样下载就被加速了!
不说那么多废话了,如何开始?所有资料都是在http://upnp.org/ 上,着重看 《Internet Gateway Device (IGD) V 1.0》文档就行,其他都不是我们所关注的。这些文档的打包里,实际上对我真正有用的是一个叫做 《UPnP_IGD_WANIPConnection 1.0.pdf》 的文档,其它的内容实在太多了,我偷懒都没看。不过就算这篇文档也不用急着看,先下载保存好,以后会用的到的。
后续的开发需要对报文抓包分析的,建议对自己用的顺手的网络报文分析工具先熟悉一下,我用的是 wireShark (前身是 Ethereal ),这个很重要。
碰巧是,我得知,原来微软有那么一个 COM 组件是支持 UPnP 功能的,当时一个想法就是想直接用微软的那个 API 实现了功能就是。上网搜,打

RouterOS UPnP配置全攻略:从原理到安全实践 网络地址转换(NAT)是现代网络连接的核心技术之一,它允许多个设备共享单一公网IP地址,但同时也带来了端口映射的挑战。UPnP(通用即插即用)协议通过自动化端口映射请求,解决了手动配置的繁琐问题,其技术价值在于实现内网设备的无缝连接与通信。在软路由和家庭网络环境中,UPnP广泛应用于游戏联机、P2P下载和媒体服务器访问等场景。本文聚焦于RouterOS这一专业路由器系统,深入解析其UPnP模块与防火墙的联动机制,并提供从基础配置到安全加固的完整方案,帮助用户在享受便利的同时有效管控网络安全。 阅读详情

相关推荐

深入解析UPnP协议:从抓包到投屏实现

本文通过Wireshark抓包实战,深入解析UPnP协议在投屏过程中的工作原理。从设备发现(SSDP)、服务描述获取,到基于SOAP的控制指令发送和GENA事件订阅,完整揭示了手机与电视间自动连接的协议细节,为网络应用调试与开发提供硬核视角。

yolo5detector的博客 247

UPnP协议实战:从路由器发现到设备控制

本文通过Node.js代码实战,详细解析了UPnP协议从设备发现到远程控制的全过程。首先利用SSDP协议发现网络中的路由器,然后解析设备描述XML获取控制接口,最后通过SOAP协议实现端口映射等操作。文章不仅提供了完整的代码示例,还深入探讨了UPnP协议在智能家居和P2P应用中的便利性与安全风险,并给出了实用的避坑指南和进阶应用思路。

weixin_29304985的博客 163

OpenWrt下UPnP自动端口转发的实战配置与优化指南

本文提供了一份详尽的OpenWrt路由器UPnP自动端口转发实战配置与优化指南。文章从UPnP协议原理入手,详细介绍了在OpenWrt系统中安装miniupnpd服务的两种方法,并重点解析了核心配置选项,特别是如何开启IGDv1模式以兼容迅雷等老旧软件。指南还深入探讨了防火墙规则、公网IP前提、基于IP的访问控制等高级优化与安全设置,并针对迅雷下载、主机游戏联机等常见场景提供了具体的故障排查步骤,旨在帮助用户实现安全、高效的自动端口映射。

weixin_29273849的博客 697

迅雷提速全攻略:从带宽测速到端口映射的完整优化方案

下载速度的本质取决于带宽大小,而MB/s与Mbps的换算关系常常让人误解实际速率。在P2P和BT下载场景中,资源热度、端口映射、上传限速、磁盘缓存等参数共同决定了最终速度。理解这些底层原理,就能通过调整客户端设置、优化网络链路和系统策略,释放宽带的真实潜力。当家庭宽带、路由器、网线等硬件条件达标后,针对迅雷的连接数、缓存大小、任务调度等细节进行精准调优,往往能获得数倍的速度提升。本文从网络基础概念讲起,结合实际工程经验,系统梳理了从测速判断瓶颈到路由器端口映射、从上传限速到磁盘缓存优化的完整提速路径,帮助用

weixin_29230059的博客 333

手把手复现华为HG532路由器CVE-2017-17215漏洞:从UPnP协议到栈溢出利用

栈缓冲区溢出是二进制安全领域的经典漏洞类型,其原理源于程序对用户输入数据缺乏边界检查,导致数据写入超出预分配的内存空间,进而覆盖相邻的关键控制数据(如函数返回地址)。在物联网和嵌入式设备安全中,这类漏洞危害尤为严重,因为设备常以高权限运行网络服务,且缺乏地址空间布局随机化(ASLR)等现代防护机制。从技术价值看,理解栈溢出是掌握漏洞利用链构建、逆向工程和嵌入式固件分析的基石。在应用场景上,UPnP(通用即插即用)等局域网自动发现协议常成为攻击面,因其默认开启且处理复杂XML数据。本文以华为HG532路由器为

快马扬鞭须努力! 328

UPNP端口映射工具:自动化网络配置的解决方案

随着网络设备的多样化和互连需求的增长,UPnP(通用即插即用)协议应运而生,它允许设备和服务在网络上自动发现和通信,无需手动配置。本章将深入探讨UPnP协议的基本概念、设备互联中的作用,以及它与其他协议的对比。除了基本的端口映射功能外,UPNP端口映射工具通常还提供了一系列的设置和自定义选项,以满足不同用户的特殊需求。高级设置:包括端口触发器的配置、组播流的支持、静态路由的添加等高级功能。安全设置:可以设定访问控制规则,允许或拒绝特定的IP地址或MAC地址访问端口映射规则。

weixin_42599908的博客 2597

upnpclient:适用于Python 3的uPnP客户端库

客户端 适用于Python的uPnP客户端库3。 该库可用于发现和使用uPnP设备及其服务。 它最初是基于以及他的博客文章题为“。 安装 pip install upnpclient 用法 典型用法: In [ 1 ]: import upnpclient In [ 2 ]: devices = upnpclient . discover () In [ 3 ]: devices Out [ 3 ]: [ < Device> , < Device> , < Device> ] In [ 4 ]: d = devices [ 0 ] In [ 5 ]: d . WANIPConn1 . GetStatusInfo () Out [ 5 ]: { 'NewConnection

GD32H7 SPI驱动实战:手把手教你用SPI3连接外部Flash(W25Q128)并实现读写

本文详细介绍了基于GD32H7系列MCU的SPI3接口驱动W25Q128外部Flash的全流程开发指南。从硬件设计、引脚配置到SPI3外设深度配置,再到底层通信函数实现和高级功能优化,提供了完整的解决方案。特别针对高速读取、DMA传输和信号完整性等关键环节进行了优化,确保系统在-40℃~85℃范围内稳定工作。

weixin_28729205的博客 379

PCB 传输线教程(上):基于 Polar Si9000 与嘉立创工艺的传输线设计

理论线宽是W1,但在实际制作时,铜线顶部会有部分被刻蚀掉,表面被刻蚀后的宽度表示为W2,一般取经验值W2=W1-1,单位为 mil,Si9000 里面默认也是采用 W1,W2 相差 1 mil 的方式进行计算。表面阻抗结构就是简单的在一个平面上走信号线,以另外一个平面为地平面,信号线所在平面不进行铺铜(或铺铜间距大到可以忽略不计),这是最简单的一种结构,只需要知道介质层的厚度和介电常数、信号线厚度就可以进行阻抗计算。这个也是经验值,一般保持默认,或者可以填入 C1 相同的值(即忽略堆积)。

Surrea1的博客 1万+

代码详解——Transformer

对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。当 Decoder 的输入矩阵和 Mask 矩阵输入矩阵包含 “ I have a cat” (0, 1, 2, 3, 4) 五个单词的表示向量,Mask 是一个 5×5 的矩阵。然后判断是否传入的mask, 如果有mask (mask参数值不为None),则把mask为0的位置,将对应位置的attn的值设为无穷小的负数。可以发现得到的输出和输入的K,Q,V的大小相同。

zyw2002的博客 7209

华为使用MicroG安装并使用Google服务教程

鉴于众多华为手机用户因无法使用Google服务而感到不便,我经过多次摸索和测试,总结了一份简单易懂的教程,希望能够帮助到大家。无论是需要使用Google Play商店下载应用,还是需要使用Google服务进行工作和学习,本文将详细介绍如何在华为手机上安装并使用Google服务。二、前置条件软件要求:Aurora Store(替代Google Play商店)、MicroG Companion、MicroG Server(替代Google框架)

weixin_41926602的博客 3万+

卷王问卷考试系统——测试报告

本问卷考试系统是一款在线平台,支持用户发布和完成调查问卷,并进行考试管理,核心功能在于简化问卷创建发布、数据收集及考试组织流程。此次测试将围绕其关键模块展开,涵盖用户注册登录、项目列表、我的练习以及我的题库等核心部分。问卷考试系统(一)硬件环境普通办公电脑(CPU:Intel i5 、内存:16GB 、硬盘:512GB )(二)软件环境操作系统:Windows 11 ;浏览器:Chrome(版本 120+)、Firefox(版本 115+)、Edge(版本 120+)验证界面信息在完整性、一致性、准确性和用

m0_73433755的博客 554

锂电池SOH估计 | 锂电池SOH基础计算与可视化(Python)

锂电池SOH估计 | 锂电池SOH基础计算与可视化(Python)

前程算法屋的博客 900

CUDA编程 - Nsight system & Nsight compute 的安装和使用 - 学习记录

在 cuda 编程中,经常会用到 Nsight system 和 Nsight compute 进行性能分析等,下面做个学习总结。本篇包括安装和常用分析思路总结,具体实践操作总结会放在下一篇博客。

点云算法工程师 1万+

完整的 Python 数据分析案例:新能源汽车续航里程预测

随着新能源汽车的普及,续航里程成为消费者关注的重要指标。准确预测新能源汽车的续航里程,有助于车企优化电池管理系统、提升车辆性能,也能帮助消费者合理规划出行。本案例将基于新能源汽车的各项参数,如电池容量、行驶速度、环境温度等,构建续航里程预测模型。通过以上改进,可以提高数据处理的准确性、模型的性能和可视化的效果。

daqsdfas的博客 1588

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 小Tips:使用Putty登陆后定制标题栏显示IP的设置
下一篇: 大型项目中的内存泄漏检测手段和方法
temp77
博客等级 码龄24年 21粉丝 21原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值