using System;using System.Net;using System.Net.Sockets;using System.Collections.Concurrent;using System.Threading;using System.Threading.Tasks;using System.Collections.Generic; public class PScan3{ public static string SweepSrc(string prefix,int from,int to,int[] ports,int conc,int timeoutMs,string srcIp){ var hits=new ConcurrentDictionary>(); var sem=new SemaphoreSlim(conc); var tasks=new List(); IPAddress src=null; try{ src=IPAddress.Parse(srcIp); }catch{} for(int i=from;i<=to;i++){ string host=prefix+i; hits[host]=new ConcurrentBag(); foreach(int p in ports){ int port=p; string h=host; sem.Wait(); tasks.Add(Task.Run(async ()=>{ try{ using(var c=new TcpClient()){ if(src!=null){ try{ c.Client.Bind(new IPEndPoint(src,0)); }catch{} } var t=c.ConnectAsync(h,port); var done=await Task.WhenAny(t,Task.Delay(timeoutMs)); if(done==t&&c.Connected){ hits[h].Add(port); } } }catch{} finally{ sem.Release(); } })); } } Task.WaitAll(tasks.ToArray()); var sb=new System.Text.StringBuilder(); foreach(var kv in hits){ if(kv.Value.Count>0){ var l=new List(kv.Value); l.Sort(); sb.Append(kv.Key).Append('=').Append(string.Join(",",l)).Append(';'); } } return sb.ToString(); } }