unit DUrlPrvMain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Tocsg.Controls; type TDlgUrlPrvMain = class(TForm) miUrlPrevent: TButton; mmUrls: TMemo; mmResult: TMemo; Label1: TLabel; Label2: TLabel; procedure miUrlPreventClick(Sender: TObject); private { Private declarations } MgCtrls_: TManagerInputControlsData; public { Public declarations } Constructor Create(aOwner: TComponent); override; Destructor Destroy; override; end; var DlgUrlPrvMain: TDlgUrlPrvMain; implementation uses Tocsg.Firewall, Tocsg.Process, Tocsg.Safe, Tocsg.Strings, Tocsg.Network, Winapi.ActiveX, NetFwTypeLib_TLB, Tocsg.Path, Tocsg.Url; {$R *.dfm} const FW_Head = '$Test_'; Constructor TDlgUrlPrvMain.Create(aOwner: TComponent); begin Inherited Create(aOwner); MgCtrls_ := TManagerInputControlsData.Create(CutFileExt(GetRunExePath) + '.ini'); MgCtrls_.RegInputCtrl(mmUrls); MgCtrls_.Load; end; Destructor TDlgUrlPrvMain.Destroy; begin FreeAndNil(MgCtrls_); ClearCrmFwPolicy(nil, false, FW_Head); Inherited; end; procedure TDlgUrlPrvMain.miUrlPreventClick(Sender: TObject); var UrlList, PreventIpList: TStringList; i, c, nPos, nProfile: Integer; ss: TStringStream; sData, sUrlName: String; FwRule: TFwRule; FwPolicy: INetFwPolicy2; begin // mmResult.Text := GetHostIPsFromDomain('jp.cdn.hub-services.vmwservices.com', #13#10); //mmResult.Text := GetHostIPsFromDomain('google.com', #13#10); //exit; if mmUrls.Enabled then begin mmUrls.Text := Trim(mmUrls.Text); if mmUrls.Text = '' then begin MessageBox(Handle, PChar('Â÷´Ü ÇÒ URLÀ» µî·ÏÇØ ÁֽʽÿÀ.'), PChar(Caption), MB_ICONWARNING or MB_OK); exit; end; MgCtrls_.Save; Guard(UrlList, TStringList.Create); SplitString(mmUrls.Text, ';', UrlList); Guard(PreventIpList, TStringList.Create); ZeroMemory(@FwRule, SizeOf(FwRule)); FwRule.sGroup := 'Tocsg Group'; FwRule.sDesc := 'Url Prevent Test'; // FwRule.nProfiles := FW_PROFILE_ANY; // FwRule.nProtocol := NET_FW_IP_PROTOCOL_ANY; // FwRule.sRemotePorts := '443,80,8080,8443,135,445,902,912,1025,1026,1027,1028,1688,3838,5357,23401'; FwRule.bEnabled := true; mmResult.Clear; CoInitialize(nil); try FwPolicy := CoNetFwPolicy2.Create; Guard(ss, TStringStream.Create('', TEncoding.UTF8)); for i := 0 to UrlList.Count - 1 do begin if UrlList[i] = '' then continue; mmResult.Lines.Add(UrlList[i]); SplitString(ExtractIPsFromUrl(UrlList[i], false, ';'), ';', PreventIpList); if PreventIpList.Count > 0 then begin for c := 0 to PreventIpList.Count - 1 do mmResult.Lines.Add(PreventIpList[c]); sUrlName := StringReplace(UrlList[i], '.', '', [rfReplaceAll]); FwRule.sName := FW_Head + 'eCrmHE-' + sUrlName;// + IntToStr(c + 1); FwRule.sRemoteAddresses := PreventIpList.CommaText; FwRule.nDirection := NET_FW_RULE_DIR_OUT; AddFwRule(FwPolicy, FwRule); FwRule.nDirection := NET_FW_RULE_DIR_IN; AddFwRule(FwPolicy, FwRule); end; mmResult.Lines.Add(''); end; SendMessage(mmResult.Handle, WM_VSCROLL, SB_TOP, 0); finally CoUninitialize; end; end else begin if MessageBox(Handle, PChar('ÁßÁöÇϽðڽÀ´Ï±î?'), PChar(Caption), MB_ICONQUESTION or MB_YESNO) = IDNO then exit; ClearCrmFwPolicy(nil, false, FW_Head); end; mmUrls.Enabled := not mmUrls.Enabled; if mmUrls.Enabled then miUrlPrevent.Caption := 'URL Â÷´Ü' else miUrlPrevent.Caption := 'URL Â÷´Ü ÁßÁö'; end; end.