
UDPFlood是日渐猖厥的流量型DoS攻击,原理也很简单。常见的情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。100k pps的UDPFlood经常将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪。由于UDP协议是一种无连接的服务,在UDPFLOOD攻击中,攻击者可发送大量伪造源IP地址的小UDP包。但是,由于UDP协议是无连接性的,所以只要开了一个UDP的端口提供相关服务的话,那么就可针对相关的服务进行攻击。
主要防护:
UDP协议与TCP协议不同,是无连接状态的协议,并且UDP应用协议五花八门,差异极大,因此针对UDPFlood的防护非常困难。其防护要根据具体情况对待:
判断包大小,如果是大包攻击则使用防止UDP碎片方法:根据攻击包大小设定包碎片重组大小,通常不小于1500。在极端情况下,可以考虑丢弃所有UDP碎片。
攻击端口为业务端口:根据该业务UDP最大包长设置UDP最大包大小以过滤异常流量。
攻击端口为非业务端口:一个是丢弃所有UDP包,可能会误伤正常业务;一个是建立UDP连接规则,要求所有去往该端口的UDP包,必须首先与TCP端口建立TCP连接。不过这种方法需要很专业的防火墙或其他防护设备支持
UDP攻击是一种消耗对方资源,也消耗你自己的资源的攻击方式,现在已经没人使用这种过时的东西了,你攻击了这个网站,其实也在消耗你的系统资源,说白了就是拼资源而已,看谁的带宽大,看谁能坚持到最后,这种攻击方式没有技术含量,引用别人的话,不要以为洪水无所不能,攻击程序在消耗对方资源的时候也在消耗你的资源先登陆QQ,在系统设置的高级选项里选择"UDP"类型,服务器IP地址就填你需要登陆的地址QQ服务器地址,以下是其地址,任意选择一个UDP的
QQ服务器分为三类:
1、UDP 8000端口类18个:速度最快,服务器最多。
QQ上线会向这些服务器发送UDP数据包,选择回复速度最快的一个作为连接服务器。
61144238145
61144238146
61144238156
61144238150
202104129251
202104129254
202104129252
202104129253
61141194203
20296170166
2181895221
2191334515
61141194200
61141194224
20296170164
20296170163
21913340216
2181895209
2、TCP >具体配置过程:
1、打开STM32CubeMX,并选择好相应的芯片。文中的芯片为STM32F207VCT6,选择后如下图:
2、配置RCC时钟、ETH、PA8以及使能LWIP;
由于此处我们的开发板硬件上为RMII方式,因此选择ETH-RMII,若有同志的开发板为MII方式,请参考MII的配置方法,此处只针对RMII;
RCC选择外部时钟源,另外勾选MCO1,软件会自动将PA8配置为MCO1模式,该引脚对于RMII方式很重要,用于为PHY芯片提供50MHz时钟;
使能LWIP;
3、时钟树的相关配置,必须保证MCO1输出为50Mhz,如果这个频率不对会导致PHY芯片无法工作;
我这里因为芯片为207VCT6,为了使MCO1输出为50Mhz,做了PLL倍频参数的一些调整,总体如下:(同志们配置时可根据自己的芯片灵活配置,但需保证MCO1的输出为50Mhz)
4、ETH、LWIP、RCC相关参数设置;
至此,比较重要的都在前面了,但是还有一点仍需要注意,即PA8引脚输出速度,几次不成功都是因为这个引脚没注意。
后续的参数设置可以根据同志们自己的需求分别设置,这里给出我的设置供参考;
ETH参数保持默认,但中断勾选一下;
LWIP参数设置如下:(因为我这里是配置UDP服务器,IP选择静态分配)
5、生成工程,做最后的函数修改;
给生成的工程添加UDP服务器的初始化以及端口绑定等相关函数;
我这里直接将之前的官方例程中的UDP服务器文件加进来,如下:
之后将c文件添加到用户程序,主函数添加Udp的h头文件;如下:(udp文件的具体内容在后面给出)
6、主函数还需要添加一下几个函数,在这里不对函数作用及实现原理讲解,仅做添加说明。
附:udp_echoserver相关文件内容(该文件为官方的示例程序,版权归官方,此处做转载)
udp_echoserverc的内容如下:
/ Includes ------------------------------------------------------------------/
#include "mainh"
#include "lwip/pbufh"
#include "lwip/udph"
#include "lwip/tcph"
#include
#include
/ Private typedef -----------------------------------------------------------/
/ Private define ------------------------------------------------------------/
#define UDP_SERVER_PORT 7 / define the UDP local connection port /
#define UDP_CLIENT_PORT 7 / define the UDP remote connection port /
/ Private macro -------------------------------------------------------------/
/ Private variables ---------------------------------------------------------/
/ Private function prototypes -----------------------------------------------/
void udp_echoserver_receive_callback(void arg, struct udp_pcb upcb, struct pbuf p, const ip_addr_t addr, u16_t port);
/ Private functions ---------------------------------------------------------/
/
@brief Initialize the server application
@param None
@retval None
/
void udp_echoserver_init(void)
{
struct udp_pcb upcb;
err_t err;
/ Create a new UDP control block /
upcb = udp_new();
if (upcb)
{
/ Bind the upcb to the UDP_PORT port /
/ Using IP_ADDR_ANY allow the upcb to be used by any local interface /
err = udp_bind(upcb, IP_ADDR_ANY, UDP_SERVER_PORT);
if(err == ERR_OK)
{
/ Set a receive callback for the upcb /
udp_recv(upcb, udp_echoserver_receive_callback, NULL);
}
}
}
/
@brief This function is called when an UDP datagrm has been received on the port UDP_PORT
@param arg user supplied argument (udp_pcbrecv_arg)
@param pcb the udp_pcb which received data
@param p the packet buffer that was received
@param addr the remote IP address from which the packet was received
@param port the remote port from which the packet was received
@retval None
/
void udp_echoserver_receive_callback(void arg, struct udp_pcb upcb, struct pbuf p, const ip_addr_t addr, u16_t port)
{
/ Connect to the remote client /
udp_connect(upcb, addr, UDP_CLIENT_PORT);
/ Tell the client that we have accepted it /
udp_send(upcb, p);
/ free the UDP connection, so we can accept new clients /
udp_disconnect(upcb);
/ Free the p buffer /
pbuf_free(p);
}
udp_echoserverh的内容如下:
#ifndef __ECHO_H__
#define __ECHO_H__
void udp_echoserver_init(void);
#endif / __MINIMAL_ECHO_H /
7、至此,所有的工作完成,编译工程,下载至开发板。由于udp_echoserver中绑定的端口号为7,这里我们通过测试工具测试网络的功能,
1、桌面左下角,点击开始,找到控制面板,点击打开。
2、接下来需要点击“Windows防火墙”,如下图所示。
3、点击“打开或关闭Windows防火墙”,确人Windows防火墙是否打开。
4、返回上一级,点击“高级设置”。
5、在“高级安全 window防火墙”窗口中就可以查看端口了,如下图所示。
用户数据文报协议 (UDP) 是一个无连接协议。跟 TCP 的 *** 作不同,计算机并不建立连接。另外 UDP 应用程序可以是客户机,也可以是服务器。为了传输数据,首先要设置客户计算机的 LocalPort 属性。然后,服务器计算机只需将 RemoteHost 设置为客户计算机的 Internet 地址,并将 RemotePort 属性设置为跟客户计算机的 LocalPort 属性相同的端口,并调用 SendData 方法来着手发送信息。于是,客户计算机使用 DataArrival 事件内的 GetData 方法来获取已发送的信息。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)