AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte UPnP Router Manager
Thema durchsuchen
Ansicht
Themen-Optionen

UPnP Router Manager

Ein Thema von Mystic · begonnen am 7. Mai 2006 · letzter Beitrag vom 12. Aug 2006
 
Benutzerbild von Mystic
Mystic

Registriert seit: 18. Okt 2003
Ort: Flerzheim
420 Beiträge
 
Turbo Delphi für Win32
 
#29

Re: UPnP Router Manager

  Alt 25. Jun 2006, 20:37
Die DLL wird benutzt um WinSock-Funktionen zu hooken.

Delphi-Quellcode:
library rmHook;

{$IMAGEBASE $58a00000}

uses
  Windows,
  madCodeHook,
  Winsock,
  madStrings,
  madRemote,
  HookDataUnit in 'HookDataUnit.pas';

{$R *.res}

var
  bindNext:function(s: TSocket; var addr: TSockAddr; namelen: Integer): Integer; stdcall;
  listenNext: function(s: TSocket; backlog: Integer): Integer; stdcall;
  closesocketNext: function(s: TSocket): Integer; stdcall;
  shutdownNext: function(s: TSocket; how: Integer): Integer; stdcall;

procedure SendIPC(s: TSocket; action: TSockAction; saddr: PSockAddr = nil);
var
  session: DWord;
  data: TSockHookData;
  size: Integer;
  addr: TSockAddr;
  arrChW: array[0..MAX_PATH] of WideChar;
  x: PChar;
begin
  ZeroMemory(@data, SizeOf(TSockHookData));
  data.process := GetCurrentProcessId;
  GetModuleFileNameW(0, arrChW, MAX_PATH);
  WideToAnsi(arrChW, data.filename);
  GetFullPathName(@data.filename, MAX_PATH, @data.filename, x);
  CharLower(@data.filename);
  data.action := action;
  if saddr <> nil then
    addr := saddr^
  else
  begin
    size := SizeOf(addr);
    getsockname(s, addr, size);
  end;
  data.sockport := ntohs(addr.sin_port);
  if data.sockport = 0 then
    Exit;
  size := SizeOf(data.socktype);
  getsockopt(s, SOL_SOCKET, SO_TYPE, @data.socktype, size);
  if AmSystemProcess and (GetCurrentSessionId = 0) then
    session := GetInputSessionId
  else
    session := GetCurrentSessionId;
  SendIPCMessage(PChar('UPNPRouterMan' + IntToStrEx(session)), @data,
    SizeOf(data));
end;

function bindCallback(s: TSocket; var addr: TSockAddr; namelen: Integer):
  Integer; stdcall;
begin
  SendIPC(s, Listen, @addr);
  Result := bindNext(s, addr, namelen);
end;

function listenCallback(s: TSocket; backlog: Integer): Integer; stdcall;
begin
  SendIPC(s, Listen);
  Result := listenNext(s, backlog);
end;

function closesocketCallback(s: TSocket): Integer; stdcall;
begin
  SendIPC(s, Closed);
  Result := closesocketNext(s);
end;

function shutdownCallback(s: TSocket; how: Integer): Integer; stdcall;
begin
  SendIPC(s, Closed);
  Result := shutdownNext(s, how);
end;

begin
  HookAPI('wsock32.dll', 'bind', @bindCallback, @bindNext);
  HookAPI('wsock32.dll', 'listen', @listenCallback, @listenNext);
  HookAPI('wsock32.dll', 'closesocket', @closesocketCallback, @closesocketNext);
  HookAPI('wsock32.dll', 'shutdown', @shutdownCallback, @shutdownNext);
end.
Hast du noch einen Switch zwischen Router und PC? Ein Freund von mir hat ein solches Problem, denn sein Switch unterstützt keine Multicasts.

Die UPnP-Funktionen brauchen anscheinend Windows Vista, XP oder ME.
Jan Steffens
Der Fachwortgenerator - 100% Schwachsinn --- Der UPnP Router Manager - Kommentare erwünscht!
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz