a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Delphi > 正文

Delphi實現木馬文件傳輸代碼實例

2020-01-31 20:51:01
字體:
來源:轉載
供稿:網友

本文以實例形式講述了Delphi下木馬的文件傳輸方法的實現過程,具體步驟如下:

服務器端代碼:

unit ServerFrm;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls,WinSock;type TfrmMain = class(TForm)  Panel1: TPanel;  Label1: TLabel;  edtPort: TEdit;  Panel2: TPanel;  stabar: TStatusBar;  SaveDialog: TSaveDialog;  btnListen: TButton;  btnReceive: TButton;  btnStop: TButton;  btnExit: TButton;  procedure FormCreate(Sender: TObject);  procedure btnExitClick(Sender: TObject);  procedure FormClose(Sender: TObject; var Action: TCloseAction);  procedure btnListenClick(Sender: TObject);  procedure btnReceiveClick(Sender: TObject);  procedure btnStopClick(Sender: TObject); private  { Private declarations } public  { Public declarations }  StopTrans:Boolean; //是否停止傳送開關  InTrans:Boolean; //表示正在接收文件  Server:TSocket; //定義服務器端的socket句柄  //自定義過程接收文件  procedure RecvFile(FileName:String); end;var frmMain: TfrmMain;const BlockLen=1024*4;implementation{$R *.dfm}procedure tfrmmain.RecvFile(FileName:String);var Ftrans:file of Byte; Recelen:Integer; Blockbuf:array[0..BlockLen-1] of Byte; RecvSocket:TSocket; ra:Sockaddr_in; ra_len:integer;begin ra_len:=sizeof(ra); Recvsocket:=accept(server,@ra,@ra_len); assignFile(Ftrans,filename); rewrite(ftrans); stoptrans:=false; intrans:=true; recelen:=recv(recvsocket,Blockbuf,BlockLen,0); while (recelen>0) and (not StopTrans) do begin  BlockWrite(Ftrans,Blockbuf[0],BlockLen);  application.ProcessMessages;  recelen:=recv(recvsocket,Blockbuf,Blocklen,0);  if stoptrans then  begin   CloseFile(Ftrans);   CloseSocket(RecvSocket);   InTrans:=False;   MessageBox(Handle,'停止傳輸!','提示',MB_OK);   EXIT;  END; END; //關閉文件,接收的SOCKET CloseFile(Ftrans); Closesocket(recvsocket); InTrans:=False; if (Recelen=SOCKET_ERROR) then  messagebox(handle,'傳輸異常終止!','提示',MB_OK) ELSE  MESSAGEBOX(HANDLE,'客戶端已經關閉連接1,文件可能已經傳送完畢了!','提示',MB_OK);end; procedure TfrmMain.FormCreate(Sender: TObject);var aWSAData:TWSAData;begin if WSAStartup($0101,aWSAData)<>0 then  raise Exception.Create('不能啟動WinSock動態鏈接庫'); messageBox(Handle,aWSAdata.szDescription ,'WinSock動態鏈接庫版本',mb_ok);end;procedure TfrmMain.btnExitClick(Sender: TObject);begin Close;end;procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);begin if InTrans then  if MessageBox(handle,'正在接收文件,停止嗎?','提示',MB_YESNO)=IDNO then   abort; IF SERVER<>INVALID_SOCKET THEN   CLOSESOCKET(SERVER);  //釋放winsock動態鏈接庫所創建的資源 if WSACleanup<>0 then  messagebox(handle,'清除Winsock動態鏈接庫錯誤!','提示',MB_OK) ELSE  messagebox(handle,'清除Winsock動態鏈接庫成功!','提示',MB_OK);end;procedure TfrmMain.btnListenClick(Sender: TObject);var ca:SOCKADDR_IN;begin //創建服務器端SOCKET Server:=Socket(PF_INET,SOCK_STREAM,IPPROTO_IP); IF server=invalid_socket then begin  stabar.SimpleText :='創建接收SOCKET錯誤1';  exit; end; //綁定服務器端SOCKET ca.sin_family :=PF_INET; CA.sin_port :=htons(strtoint(trim(edtPort.Text ))); ca.sin_addr.S_addr :=INADDR_ANY; if bind(server,ca,sizeof(ca))=socket_error then begin  stabar.SimpleText :='綁定socket錯誤,請更改接收端口';  closeSocket(server);  exit; end else  stabar.SimpleText :='綁定接收端socket成功!'; //開始監聽 listen(server,5); btnlisten.Enabled :=False; btnstop.Enabled :=true;end;procedure TfrmMain.btnReceiveClick(Sender: TObject);begin if (server=INVALID_SOCKET) THEN BEGIN  MESSAGEBOX(HANDLE,'還沒有進行監聽,請先進行監聽!','提示',MB_OK);  EXIT; END; IF SaveDialog.Execute THEN  RECVFILE(SaveDialog.FileName );  end;procedure TfrmMain.btnStopClick(Sender: TObject);begin STOPTRANS:=TRUE; IF SERVER<>INVALID_SOCKET THEN cLOSESOCKET(SERVER); //此處需要說明 server:=INVALID_SOCKET; bTNSTOP.Enabled :=fALSE; BTNlISTEN.Enabled :=TRUE;end;end.

客戶端代碼:

unit ClientFrm;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls,WinSock;type TfrmMain = class(TForm)  opendfile: TOpenDialog;  Label1: TLabel;  edtIP: TEdit;  Label2: TLabel;  edtPort: TEdit;  StatusBar: TStatusBar;  btnConnect: TButton;  btnSend: TButton;  btnStop: TButton;  btnExit: TButton;  ProgressBar: TProgressBar;  procedure FormCreate(Sender: TObject);  procedure btnExitClick(Sender: TObject);  procedure FormClose(Sender: TObject; var Action: TCloseAction);  procedure btnConnectClick(Sender: TObject);  procedure btnSendClick(Sender: TObject);  procedure btnStopClick(Sender: TObject); private  { Private declarations }   Client:TSocket; public  { Public declarations }  StopTrans:Boolean; //是否停止發送的開發  InTrans:Boolean;  //表示是否正在傳送文件  procedure TransFile(FileName:String); //傳遞文件的過程 end; const BlockLen=1024*4; //每次發送的最大數據量var frmMain: TfrmMain;implementation{$R *.dfm}procedure TfrmMain.TransFile(FileName:String); //傳遞文件的過程var Ftrans:file of Byte; Flen:integer; BlockNum,RemainLen:integer; BlockBuf:array[0..BlockLen-1] of Byte; i:integer; SendLen:Integer;begin assignFile(Ftrans,filename); reset(Ftrans); Flen:=FileSize(Ftrans); BlockNum:=Flen div BlockLen; progressBar.Max :=1+BlockNum; RemainLen:=Flen mod BlockLen; StopTrans:=False; InTrans:=True; SendLen:=1; for i:=0 to BlockNum-1 do begin  if (StopTrans) or (SendLen<=0) then Break;  BlockRead(Ftrans,Blockbuf[0],BlockLen);  SendLen:=Send(Client,Blockbuf,BlockLen,0);  ProgressBar.Position :=i;  Application.processMessages; end; if StopTrans then begin  CloseFile(Ftrans);  InTrans:=False;  StatusBar.SimpleText :='';  MessageBox(Handle,'停止傳輸!','提示',mb_ok);  progressbar.Position :=0;  exit; end; if (SendLen<=0) then begin  CloseFile(Ftrans);  InTrans:=False;  StatusBar.SimpleText :='';  messagebox(handle,'傳出異常終止!','提示',MB_OK);  progressBar.Position :=0;  exit; end; if remainLen>0 then begin  BlockRead(Ftrans,BlockBuf[0],RemainLen);  SendLen:=send(client,BlockBuf,Remainlen,0);  if (sendLen<=0) then  begin   closeFile(Ftrans);   InTrans:=False;   StatusBar.SimpleText :='';   messagebox(handle,'傳輸異常終止!','提示',mb_ok);   progressBar.Position :=0;   exit;  end; end; progressBar.Position :=ProgressBar.Max ; CloseFile(Ftrans); InTrans:=False; StatusBar.SimpleText :=''; messagebox(handle,'傳輸完成!','提示',mb_ok); progressbar.Position :=0;end;procedure TfrmMain.FormCreate(Sender: TObject);var aWSAData:TWSAData;begin if WSAStartup($0101,aWSAData)<>0 then  raise Exception.Create('不能啟動WinSock動態鏈接庫'); messageBox(Handle,aWSAdata.szDescription ,'WinSock動態鏈接庫版本',mb_ok);end;procedure TfrmMain.btnExitClick(Sender: TObject);begin Close;end;procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);begin if InTrans then  if MessageBox(handle,'正在傳輸文件,停止嗎?','提示',MB_YESNO)=IDNO then   abort;  //釋放winsock動態鏈接庫所創建的資源  if WSACleanup<>0 then   messagebox(handle,'清除Winsock動態鏈接庫錯誤!','提示',MB_OK)  ELSE   messagebox(handle,'清除Winsock動態鏈接庫成功!','提示',MB_OK);  CloseSocket(Client);end;procedure TfrmMain.btnConnectClick(Sender: TObject);var ca:SOCKADDR_IN; hostaddr:u_long;begin Client:=Socket(PF_INET,SOCK_STREAM,IPPROTO_IP); IF CLIENT=INVALID_SOCKET THEN BEGIN  StatusBar.SimpleText :='為連接遠程服務器端創建COSKET錯誤!';  exit; end; ca.sin_family :=PF_INET; CA.sin_port :=HTONS(STRTOINT(TRIM(EDTpORT.Text ))); HOSTADDR:=INET_ADDR(PCHAR(TRIM(EDTIP.Text ))); //判斷IP是否合法 if (hostaddr= -1) then begin  StatusBar.SimpleText :='主機IP地址:'+trim(edtip.Text )+'錯誤';  exit; end else  ca.sin_addr.S_addr :=hostaddr; //連接服務器 if connect(Client,ca,sizeof(ca))<>0 then begin  StatusBar.SimpleText :='連接服務器端SOCKET錯誤!';  exit; end else  StatusBar.SimpleText :='連接遠程SOCKET成功!';end;procedure TfrmMain.btnSendClick(Sender: TObject);begin if (opendfile.Execute ) and (FileExists(opendfile.FileName )) then  transFile(opendfile.FileName );end;procedure TfrmMain.btnStopClick(Sender: TObject);begin Stoptrans:=True;end;end. 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 国产伦理片在线免费观看 | 国产精自产拍久久久久久 | 欧美一级片在线 | 中文字幕在线观看免费视频 | 日日草天天干 | 日韩色综合 | 天天综合网91 | 亚洲国产精品麻豆 | 精品18| 日韩久久久久久久久久 | 久久91| 91精品蜜臀一区二区三区在线 | 日本a在线 | 亚洲成人av | 能看的毛片 | 亚洲成人精品 | 欧美 日韩 在线播放 | 仙人掌旅馆在线观看 | 久久国产精品一区 | jizz欧美最大| 免费一二区| 中文字幕av一区二区三区 | 91精品国产91久久综合桃花 | 欧美成人精品一区二区 | 日韩在线播放欧美字幕 | 国产精品久久久久久久久 | 美女二区| 欧美午夜视频 | 羞羞的网站在线观看 | 日本中文字幕在线视频 | 成人国产精品久久久 | 久久九 | 99国产精品久久久久久久 | 国产伦精品一区二区三区照片91 | 四虎最新紧急更新地址 | 最近韩国日本免费高清观看 | 亚洲www啪成人一区二区 | 中文字幕亚洲乱码 | 国产视频久久久 | 亚洲第一免费网站 | 久久av一区二区 |