WindivertDotnet快速发Ping( 二 )

4 整合数据我们需要一个线程来开启接收ping回复,同时另一个线程把所有ping发出去 , 最后拿ping的所有IP和ping回复的所有IP求交集,就是我们需要的结果 。
/// <summary>/// Ping所有地址/// 占用两个线程/// </summary>/// <param name="dstAddrs">目标地址</param>/// <param name="delay">最后一个IP发出ping之后的等待回复时长</param>/// <returns></returns>public async Task<IPAddress[]> PingAllAsync(IEnumerable<IPAddress> dstAddrs, TimeSpan delay){// 开始监听ping的回复using var cts = new CancellationTokenSource();var recvTask = this.RecvEchoReplyAsync(cts.Token);// 对所有ip发pingawait this.SendEchoRequestAsync(dstAddrs);// 延时取消监听cts.CancelAfter(delay);var results = await recvTask;// 清洗数据return results.Intersect(dstAddrs).ToArray();}后记通过WindivertDotnet的路由,无中生有IP数据包,并可以将其正确的发送的指定的目的地IP地址 。像本示例的这个Ping方式,10秒ping完1万个IP并拿到其回复的IP是非常轻松的 。
【WindivertDotnet快速发Ping】

推荐阅读