思路
思路比較簡單,這是壹個單線程的程序,後續會進行多線程的實現,這個單線程程序,會根據提供的參數,構造TcpClient對象,並調用其connect函數來測試連接是否可達,來判斷端口是否打開
單線程實現
界面
使用C#來編寫界面,效果如下圖所示
業務代碼
實現掃描的代碼:
private void NormalScan(Int32 state) {
Int32 port = state;
String msg = "";
TcpClient tcp = new TcpClient();
try
{
tcp.Connect(IPAddress.Parse(textBox1.Text), port);
portSum++;
msg = port.ToString() + "端口開放";
listBox1.Items.Add(msg);
tcp.Close();
}
catch {
msg = port.ToString() + "端口不開放";
listBox1.Items.Add(msg);
}
}12345678910111213141516171234567891011121314151617
按鍵處理代碼
private void button1_Click(object sender, EventArgs e)
{
int connState = 0;
String scanHost = textBox1.Text;
try
{
IPAddress ipaddr = (IPAddress)Dns.Resolve(scanHost).AddressList.GetValue(0);
textBox1.Text = ipaddr.ToString();
}
catch {
textBox1.Focus();
MessageBox.Show("請輸入正確的主機地址,該地址DNS無法進行解析","系統提示");
return;
}
Int32 threadNum = (Int32)startPort.Value;
Int32 end = (Int32)endPort.Value;
for (; threadNum <= end; threadNum++) {
NormalScan(threadNum);
listBox1.Refresh();
}
}1234567891011121314151617181920212212345678910111213141516171819202122
運行效果
我們使用cmd的ping命令得到百度的IP地址
將百度地址填入到對應的文本框中,運行,會得到運行的結果
根據效果可以看出,80端口是打開的,這個端口就是www服務的端口,運行結果是正確的
程序源代碼下載
使用的是VS2012進行編寫的。
多線程實現
思路
使用ThreadPool來實現多線程的調度,使用Invoke方法,來實現異步,在不同的線程中顯示數據。
運行結果
我們依舊使用Cmd的ping命令獲得百度的地址,然後將地址填入到我們的輸入框中。
運行會得到下圖的運行結果
代碼下載