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】

推薦閱讀