私はC#で単純なポートスキャナを構築しています。私は既にポートスキャン機能を持っており、ユーザーは使用するスレッド数とIPアドレスの範囲を渡します。だから、私は現時点で範囲を解析し、範囲内のすべてのIPアドレスを含むConcurrentBag
を作成したことになります。私もスレッドの配列を持っています。CでスレッドとConcurrentBagを使用
var ipsInRange = IPAddressRange.Parse(range);
Thread[] hostThreads = new Thread[(int)threads];
ConcurrentBag<IPAddress> ips = new ConcurrentBag<IPAddress>();
foreach (var ip in ipsInRange)
{
ips.Add(ip);
}
IPAddress address;
while (!ips.IsEmpty)
{
if (ips.TryTake(out address))
{
PortScanner ps = new PortScanner(address);
ps.Scan();
}
}
// I want to assign each thread one IP address, create a new PortScanner
// instance as above, and scan the IP. I want to delete the scanned IPs
// from the bag. When the thread finishes with scanning, I want to assign
// a new one to it. I want to continue like this until the bag is empty,
// i.e. all the IPs are processed.
// So, simply I want to scan multiple IPs at the same time, using the above
// thread array and the ConcurrentBag containing list of IPs.
けれども、私は前Threads
とConcurrentBag
を使用していない、と私はコメント欄で上に書かれている達成したい:だから、それは部分的にこのようになります。任意のアイデアどのように私はアプリに上記のスレッドを組み込むことができますか?
マルチスレッドネットワークプログラミングに関するリソースを検索し、自分自身を教育するのに役立ちます。 –