全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:975
推到 Plurk!
推到 Facebook!

port埠掃描

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-26 02:49:21 IP:61.64.xxx.xxx 未訂閱
port埠掃描 http://www.51land.com/bbs/topicdisplay.asp?boardid=3141&topicid=147878&page=1    如果你寫掃描程式可千萬不要直接去連接,應該使用別的鏈結方法,否則你的蹤迹會被別人發現.例如使用sys掃描或者fin掃描:    我給你非同步socket的api代碼: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,WInSock, ExtCtrls;    const WM_SOCKET=WM_USER+1; //socket消息    type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Panel1: TPanel; Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private Sockhd : integer; //socket控制碼 Serv_Addr : Tsockaddr;//目標位址    procedure SockEvent(var msg: Tmessage);message WM_SOCKET; //處理cocket消息 procedure DspMsg(msg : string); //顯示資訊 { Private declarations } public { Public declarations } end;    Form1: TForm1;    implementation {$R *.DFM}    function lookup_hostname(const hostname:string):longint; //把功能變數名稱轉化成IP地址 var RemoteHost : PHostEnt; (* no, don‘t free it! *) ip_address: longint; begin ip_address:=-1; try if hostname=‘‘ then begin (* no host given! *) lookup_hostname:=ip_address; EXIT; end else begin ip_address:=Winsock.Inet_Addr(PChar(hostname)); (* try a xxx.xxx.xxx.xx first *) if ip_address=SOCKET_ERROR then begin RemoteHost:=Winsock.GetHostByName(PChar(hostname)); if (RemoteHost=NIL) or (RemoteHost^.h_length<=0) then begin lookup_hostname:=ip_address; EXIT; (* host not found *) end else ip_address:=longint(pointer(RemoteHost^.h_addr_list^)^); end; end; except ip_address:=-1; end; lookup_hostname:=ip_address; end;    procedure TFOrm1.DspMsg(msg: string); begin memo1.Lines.Add(msg+‘...‘); if Memo1.Lines.Count>200 then Memo1.Lines.Delete(0); end;    procedure TForm1.SockEvent(var msg : tmessage); //處理socket消息 begin case msg.LParam of FD_READ: begin //標識可以讀數據,當然肯定已經鏈結上了 dspmsg(‘可以讀取資料‘); //do what you want do end;    FD_WRITE: begin dspmsg(‘可以發送資料‘); //do what you want do end;    FD_ERROR: begin dspmsg(‘發生錯誤‘); //如果你是用戶端,則應該是連接不上,即埠沒有開 end;    FD_CLOSE: Begin dspmsg(‘伺服器斷開連接‘); //對方關閉連接 end;    FD_CONNECT: begin dspmsg(‘連結上伺服器‘); //表示對方埠開放 end;    FD_ACCEPT: begin dspmsg(‘接收一個請求‘); //這個消息只有服務端可能出現 end; end; end;    procedure TForm1.FormCreate(Sender: TObject); var wsaData:TwsaData; begin //啓動winsock動態連結程式庫 if WSAStartup (makeword(2,2), wsaData)<>0 then begin messagebox(application.handle,‘無法啓動winsock動態連接庫!‘,‘警告‘,MB_OK or MB_APPLMODAL or MB_ICONWARNING); Application.Terminate; end; end;    procedure TForm1.FormDestroy(Sender: TObject); begin //關閉dll WSACleanup; end;    procedure TForm1.Button1Click(Sender: TObject); begin Sockhd := socket(AF_INET,SOCK_STREAM,0); //創建socket控制碼 if Sockhd<0 then begin messagebox(application.handle,‘無法創建控制碼!‘,‘警告‘,MB_OK or MB_APPLMODAL or MB_ICONWARNING); exit; end; Serv_addr.sin_addr.s_addr:= lookup_hostname(edit1.Text); //主機名 Serv_addr.sin_family := PF_INET; Serv_addr.sin_port := htons(23); //any port you want to connect if WSAAsyncSelect(Sockhd,Form1.handle,WM_SOCKET,FD_ACCEPT or FD_CONNECT or FD_CLOSE or FD_READ or FD_WRITE)=SOCKET_ERROR then begin messagebox(application.handle,‘無法創建控制碼!‘,‘警告‘,MB_OK or MB_APPLMODAL or MB_ICONWARNING); exit; end; //非同步socket connect(sockhd,serv_addr,sizeof(serv_addr)); //連接,結果會在前面的處理函數處理 end; end. 相信應該可以滿足你的要求 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-05-06 19:24:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!