Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi mini Firewall programmieren ?? (https://www.delphipraxis.net/75882-mini-firewall-programmieren.html)

Zacherl 30. Jan 2008 12:14

Re: mini Firewall programmieren ??
 
Steht doch alles im MSDN: http://msdn2.microsoft.com/en-us/library/aa366415(VS.85).aspx

k4ni 30. Jan 2008 12:40

Re: mini Firewall programmieren ??
 
Ich hab hier mal was für dich:

Delphi-Quellcode:
unit DropAllU;
{
Aufruf:
   InstallFW('192.168.0.2');

und zum schluss:
   RemoveFW;
}

interface

   procedure InstallFW(MyIP: String);
   procedure RemoveFW;

implementation

uses Windows;

const
     IPHLPAPI = 'IPHLPAPI.DLL';

type
  PFFORWARD_ACTION = Integer;
  PPFFORWARD_ACTION = ^PPFFORWARD_ACTION;
  //
  INTERFACE_HANDLE = Pointer;
  //
  PFADDRESSTYPE    = Integer;
  PPFADDRESSTYPE   = ^PFADDRESSTYPE;
  //
  TByteArray       = Array [0..Pred(MaxInt)] of Byte;
  PByteArray       = ^TByteArray;
  TIpBytes         = Array [0..3] of Byte;

const
  PF_ACTION_DROP   = 1;

const
  PF_IPV4           = 0;

function  PfCreateInterface(
           dwName:          DWORD;
           inAction:        PFFORWARD_ACTION;
           outAction:       PFFORWARD_ACTION;
           bUseLog:         BOOL;
           bMustBeUnique:   BOOL;
           var ppInterface: INTERFACE_HANDLE): DWORD;
           stdcall; external IPHLPAPI name '_PfCreateInterface@24';

function  PfDeleteInterface(
           pInterface:      INTERFACE_HANDLE): DWORD;
           stdcall; external IPHLPAPI name '_PfDeleteInterface@4';

function  PfBindInterfaceToIPAddress(
           pInterface:      INTERFACE_HANDLE;
           pfatLinkType:    PFADDRESSTYPE;
           IPAddress:       PByteArray): DWORD;
           stdcall; external IPHLPAPI name '_PfBindInterfaceToIPAddress@12';

function  PfUnBindInterface(
           pInterface:      INTERFACE_HANDLE): DWORD;
           stdcall; external IPHLPAPI name '_PfUnBindInterface@4';

var
   Handle_Interface : INTERFACE_HANDLE = nil;

function StrToInt(S: PChar): Integer;
begin
   Result := 0;
   if S = '' then Exit;
   while S^ in ['0'..'9'] do begin
      Result := Result * 10 + Integer(S^) - Integer('0');
      Inc( S );
   end;
end;

function StrToIpBytes( IpStr: String ): TIpBytes;
var N : Integer;
begin
   N := 0;
   while Pos('.', IpStr)>0 do begin
      Result[N] := StrToInt(@Copy(IpStr, 1, Pos('.', IpStr) - 1)[1]);
      Delete(IpStr, 1, Pos('.', IpStr));
      Inc(N);
   end;
   Result[N] := StrToInt(@IpStr[1]);
end;

procedure InstallFW(MyIP: String);
var
   IpLocal : TIpBytes;
begin
   if (MyIP <> '') and Not Assigned(Handle_Interface) then begin
      FillChar(IpLocal, 4, #0);
      IpLocal := StrToIpBytes(MyIP);

      PfCreateInterface(0, PF_ACTION_DROP, PF_ACTION_DROP, False, False, Handle_Interface);
      PfBindInterfaceToIPAddress(Handle_Interface, PF_IPV4, @ipLocal);
   end;
end;

procedure RemoveFW;
begin
   if Assigned(Handle_Interface) then begin
      PfUnBindInterface(Handle_Interface);
      PfDeleteInterface(Handle_Interface);
      Handle_Interface := nil;
   end;
end;

end.
Credits dafür an x000x.

Das schließt allerdings alle ports. Doch ich will auch irgendwie hinbekommen damit es nur einen einzigen schließt. Doch ich kriegs nich hin :gruebel:

Larsi 31. Jan 2008 09:45

Re: mini Firewall programmieren ??
 
und was muss ich daüfr an uses einbinden??? und wenn man das dann macht, wird dann auch zb der internetaufbau von firefox gestoppt oder können sich diese programme dem wiedersetzen???

Die Muhkuh 31. Jan 2008 09:57

Re: mini Firewall programmieren ??
 
Larsi, ich möchte Dir ja nicht zu Nahe treten, aber ich denke, dass eine eigene Firewall doch noch etwas zu hoch für Dich ist.

Wie Andreas schon erwähnt hat, braucht man einiges an Wissen und wenn Du nicht mal Imstande bist, Dir Informationen selbst zu ergoogln (siehe Deine Posts #7 und #10), ist Dein Vorhaben schon von vorneherein zum Scheitern verurteilt.

Larsi 31. Jan 2008 10:01

Re: mini Firewall programmieren ??
 
da hast du wohl rech aber es wäre trotzdem nett wenn mir jemand sagen könnte was ich in die usues einbinden soll :lol:

Die Muhkuh 31. Jan 2008 10:02

Re: mini Firewall programmieren ??
 
Du hast eine komplette (funktionierende) Unit. Da brauchst Du nichts mehr in Uses einbinden. Du musst letztendlich nur diese Unit in Dein Programm einbinden und die entsprechenden Funktionen aufrufen.

Larsi 31. Jan 2008 10:03

Re: mini Firewall programmieren ??
 
ok. in dem code da stand ja ganz oben als kommentar sowas wie 192.22.2.3 sperren oder so. dann wird doch da gar nicht alles gesperrt oder???

Die Muhkuh 31. Jan 2008 10:07

Re: mini Firewall programmieren ??
 
Wenn Du lesen würdest, was k4ni geschrieben hat:

Zitat:

Zitat von k4ni
Das schließt allerdings alle ports.


k4ni 31. Jan 2008 11:44

Re: mini Firewall programmieren ??
 
Speicher die unit unter DropAllU.pas ab und füge es am besten in den ordner des projects ein.
Dann einfach DropAllU zu uses hinzufügen und um die Firewall zu aktivieren benützt du
InstallFw('local ip here');
und zum entfernen bzw. deaktivieren benützt du
RemoveFw();

Um die local ip zu ermitteln hab ich hier noch was für dich:

Delphi-Quellcode:
uses .., .., WinSock;
..
function LocalIP:string;
var
  WSA : TWSAData;
  ILen : integer;
  PHst : PChar;
  PHEn : PHostEnt;
begin
  WSAStartup( $0101, WSA );
  ILen := $FF;
  PHst := StrAlloc( ILen );
  gethostname( PHst, ILen );
  PHEn := gethostbyname( PHst );

  with PHEn^ do result:=format(
   '%d.%d.%d.%d',
   [ord(h_addr^[ 0 ]), ord(h_addr^[ 1 ]),
   ord(h_addr^[ 2 ]), ord(h_addr^[ 3 ])]
  );

  {Nuke the string}
  StrDispose( PHst );

  {Dust and Clean}
  WSACleanup;

end;
Hab ich bin Hier

Hador 31. Jan 2008 11:57

Re: mini Firewall programmieren ??
 
Zitat:

Zitat von Larsi
da hast du wohl rech aber es wäre trotzdem nett wenn mir jemand sagen könnte was ich in die usues einbinden soll :lol:

Zitat:

Zitat von k4ni
Delphi-Quellcode:
uses Windows;

Ließ doch einfach mal das, was man dir schreibt

EDIT: Da hat ein kleines rotes etwas wohl mal wieder Urlaub


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 Uhr.
Seite 2 von 5     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz