![]() |
Net Send ohne Absender
Hi!
Ich verwende den Net Send Code:
Delphi-Quellcode:
wobei send ein string ist.
Send := 'send ' + Edit1.Text + ' ' + Memo1.Text + '';
ShellExecute (GetDesktopWindow, 'open', 'net.exe', PChar(Send), nil, SW_HIDE); Jetzt ist es ja normal, dass beim PC folgende Meldung kommt: Zitat:
|
Re: Net Send ohne Absender
Solange Du das Standart "net send" nutzt, nein ;-) Suche mal im Forum nach Code zur Programmierung des Services ;-)
...:cat:... |
Re: Net Send ohne Absender
OK, danke.
Das ist mir etwas zu kompliziert, ich möchte ja nur an einen User eine kleine nachricht schicken. ;) |
Re: Net Send ohne Absender
Hallo Matze,
diese Funktionen sollten Dir helfen
Delphi-Quellcode:
bye
//-----------------------------------------------------------------------//
//#######################################################################// //## Function NetSend: ##// //#######################################################################// //## Datum: Änderung: ##// //## ====== ========= ##// //## 10.07.2001 Initial Release ##// //#######################################################################// {$HINTS OFF} function NetSend(Dest, Source, Msg: string): Longint; overload; type TNetMessageBufferSendFunction = function(Servername, Mmsgname, FromName: PWideChar; buf: PWideChar; buflen: Cardinal): longint; stdcall; var NetMessageBufferSend: TNetMessageBufferSendFunction; SourceWideChar: PWideChar; DestWideChar: PWideChar; MessagetextWideChar: PWideChar; Handle: THandle; begin Handle := LoadLibrary('NETAPI32.DLL'); if Handle = 0 then begin Result := GetLastError; Exit; end; @NetMessageBufferSend := GetProcAddress(Handle, 'NetMessageBufferSend'); if @NetMessageBufferSend = nil then begin Result := GetLastError; exit; end; MessagetextWideChar := nil; SourceWideChar := nil; DestWideChar := nil; try GetMem(MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1); GetMem(DestWideChar, 20 * SizeOf(WideChar) + 1); StringToWideChar(Msg, MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1); StringToWideChar(Dest, DestWideChar, 20 * SizeOf(WideChar) + 1); if Source = '' then begin Result := NetMessageBufferSend(nil, DestWideChar, nil, MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1) end else begin GetMem(SourceWideChar, 20 * SizeOf(WideChar) + 1); StringToWideChar(Source, SourceWideChar, 20 * SizeOf(WideChar) + 1); Result := NetMessageBufferSend(nil, DestWideChar, SourceWideChar, MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1); FreeMem(SourceWideChar); end; finally FreeMem(MessagetextWideChar); FreeLibrary(Handle); end; end; {$HINTS ON} //-----------------------------------------------------------------------// //#######################################################################// //## Function NetSend: ##// //#######################################################################// //## Datum: Änderung: ##// //## ====== ========= ##// //## 10.07.2001 Initial Release ##// //#######################################################################// function NetSend(Dest, Msg: string): Longint; overload; begin Result := NetSend(Dest, '', Msg); end; //-----------------------------------------------------------------------// //#######################################################################// //## Function NetSend: ##// //#######################################################################// //## Datum: Änderung: ##// //## ====== ========= ##// //## 10.07.2001 Initial Release ##// //#######################################################################// function NetSend(Msg: string): Longint; overload; begin Result := NetSend('', '', Msg); end; |
Re: Net Send ohne Absender
Also das ist doch ganz einfach... Du startest ein neues Delphi-Projekt, kopierst den Code aus folgendem Thread hinein:
![]() und dann rufst Du die Funktion einfach auf:
Delphi-Quellcode:
...:cat:...
NetMessageBufferSendSubstA('Empfaenger-PC', 'Ist eh egal', 'DerAbsender', 'Die Nachricht');
|
Re: Net Send ohne Absender
Wow!! :thumb:
Vielen, vielen Dank sakura! :D |
Re: Net Send ohne Absender
Es geht!!
Nochmals Danke! PS: Aber du musst schon zugeben, etwas komplizierter ist diese variante schon. ;) |
Re: Net Send ohne Absender
Zitat:
|
Re: Net Send ohne Absender
Ich meinte ja auch den Code. ;)
Ich verstehe dich schon! :thumb: |
Re: Net Send ohne Absender
Ich habe den Code von Duffy schon öffters gesehen, und meine das er wohl eine Pascal Translation eines schlechten C/C++ Sources sein muß. Mit Delphi kann man diese Funktion viel eleganter programieren:
Delphi-Quellcode:
Gruß hagenfunction NetMsgSend(const ServerName, MsgName, FromName, Msg: WideString): Integer; function WC(const Name: WideString): PWideChar; begin if Name = '' then Result := nil else Result := PWideChar(Name); end; var NetLib: THandle; NetMessageBufferSend: function(ServerName, MsgName, FromName: PWideChar; Buffer: PWideChar; BufferLen: DWord): Integer; stdcall = nil; begin Result := -1; NetLib := LoadLibrary('NETAPI32.DLL'); if NetLib <> 0 then try @NetMessageBufferSend := GetProcAddress(NetLib, 'NetMessageBufferSend'); if Assigned(NetMessageBufferSend) then Result := NetMessageBufferSend(WC(ServerName), WC(MsgName), WC(FromName), Pointer(Msg), Length(Msg) * 2); finally FreeLibrary(NetLib); end; end; |
Re: Net Send ohne Absender
Hallo Hagen,
stammt aus einer alten Sammlung ... funktioniert aber im Gegesatz zu der anderen Funktion auch mit Auflösung des IP-Adresse. bye |
Re: Net Send ohne Absender
Hallo Hagen,
bins nochmal. Hast Du die Funktion auch so getestet? bye |
Re: Net Send ohne Absender
:) jo hab ich, scheinst aber über die kleine Falle für Copy&Paste Programmierer gestolpert zu sein ;)
Delphi-Quellcode:
ist richtig.
var
NetLib: THandle; NetMessageBufferSend: function(ServerName, MsgName, FromName: PWideChar; Buffer: PWideChar; BufferLen: DWord): Integer; stdcall; Gruß Hagen |
Re: Net Send ohne Absender
Zitat:
Deine NetSend() funktion sollte fast die gleichen Features ermöglichen wie meine NetSendMsg() function. Der Unterschied ist das bei meiner Funktion jeder Parameter wahlweise leer=nil='' oder eben gefüllt sein kann. Will man also keinen Absender benutzen muß man NetMsgSend('', '*', '', 'Message'); benutzen. Gruß Hagen |
Re: Net Send ohne Absender
Hallo Hagen,
den meinte ich .. Zitat:
|
Re: Net Send ohne Absender
Hallo Hagen,
habe den Code getestet. Dein Code ist schön kompakt. Ich liebe es wenn Code kurz und prägnant ist. :thuimb: bye |
Re: Net Send ohne Absender
Ich bin mir auch nicht so sicher ob Sakuras Code absolut gleichwertig mit NetMessageBufferSend() ist.
Gruß Hagen |
Re: Net Send ohne Absender
Hmm bei mir funzt der Code nicht von Hagen...
Es kommt einfach keine Nachricht an. Kann jemand mal ein Codebeispiel posten? |
Re: Net Send ohne Absender
Hallo H4ndy
Code:
Der Empfänger der Nachricht muß gültig sein.
NetMsgSend('', '192.168.1.2', '', 'Bingo 1 ...');
bye |
Re: Net Send ohne Absender
Delphi-Quellcode:
Sollte im LAN auch gehen. Falls denoch keine Nachrichten ankommen, dann liegt das nicht am Code von mir. Überprüfe deine Firewall und ob der Windows Messanger Service aktiv ist.
NetMsgSend('', '*', '', 'Bingo 1 ...');
Bei mir kommen auch keine Nachrichten an weil 1.) die FireWall es absichtlich blockt 2.) der Windows Messagner Dienst manuell deaktiviert wurde Gruß hagen |
Re: Net Send ohne Absender
Hallo Hagen,
bei mir funktioniert '*' auch nicht. Die Firewall blockt da bei mir nichts. Ich sitze nicht vor sonder hinter der Feuerwand. bye Claus |
Re: Net Send ohne Absender
Zitat:
Ich muß aber dazu sagen das ich die Kerio Firewall extra so konfiguriert habe das nur auf sehr wenigen Ports überhaupt was durchkommt. Alle restlichen Ports habe ich so konfiguriert das nichts rein oder raus kann. Gruß Hagen |
Re: Net Send ohne Absender
Hallo Hagen,
unter welchem OS hast du gestestet. Sollte der Messanger da tatsächlich eine Rolle spielen? bye Claus |
Re: Net Send ohne Absender
Win2k, und hier ein Auszug aus der SDK Hilfe
Zitat:
Messagner = Nachrichtendienst, das ist der Dienst der für die Popups verantwortlich ist, und er sollte eigentlich immer deaktiviert sein. Gruß Hagen |
Re: Net Send ohne Absender
Bei wem es nicht funktioniert:
Delphi-Quellcode:
Dann kann man wenigstens den Problemkreis einschränken.
ShowMessage(SysErrorMessage(NetMsgSend('', 'domain*', '', 'nerv')));
Gruß Nico ps: der Nachrichtendienst ist bei Windows Server 2003 standardmäßig deaktiviert |
Re: Net Send ohne Absender
Also Hagens Funktion:
Delphi-Quellcode:
Funktioniert nei mir nur so. Sobald ich einen Absender eintrage oder den Empfänger als IP geht es nicht mehr.
function NetMsgSend(const ServerName, MsgName, FromName, Msg: WideString): Integer;
function WC(const Name: WideString): PWideChar; begin if Name = '' then Result := nil else Result := PWideChar(Name); end; var NetLib: THandle; NetMessageBufferSend: function(ServerName, MsgName, FromName: PWideChar; Buffer: PWideChar; BufferLen: DWord): Integer; stdcall; begin Result := -1; NetLib := LoadLibrary('NETAPI32.DLL'); if NetLib <> 0 then try @NetMessageBufferSend := GetProcAddress(NetLib, 'NetMessageBufferSend'); if Assigned(NetMessageBufferSend) then Result := NetMessageBufferSend(WC(ServerName), WC(MsgName), WC(FromName), Pointer(Msg), Length(Msg) * 2); finally FreeLibrary(NetLib); end; end; procedure TForm1.Button1Click(Sender: TObject); begin NetMsgSend('', 'hal9000', '', 'hallo'); end; Gebe ich den Empfänger asl IP an oder geben einen anderen Absender an bekomme ich diese fehlermeldung: Zitat:
Zitat:
|
Re: Net Send ohne Absender
Tja, da kann ich euch auch nicht weiter helfen. An meiner Funktion als solches kann es nicht liegen da sie ja nur eine Microsoft Funktion kapselt. Wenn es also nicht funktioniert dann fragt bei MS nach :)
Gruß Hagen |
Re: Net Send ohne Absender
Luckie:
NetMessageBufferSend() verhält sich nicht ganz so wie 'net send'. Broadcasts mittels NMBS kenne ich nur in der Form 'DomainName*'. Um den Absender zu ändern (nichts anderes, als den Code auf dem entfernten Rechner auszuführen) benötigt man umfangreiche Rechte (z.B. Domänen-Admin). IP-Adressen hab ich bisher nie benutzt (kannst ja Präfix '\\' und/oder Suffix '*' probieren...). ps: NMBS wurde im Laufe der Zeit ständig gefixt/erweitert (so schlug NMBS unter WinNT 3.51 _immer_ fehl, wenn man bei FromName nicht NULL übergab...). |
Re: Net Send ohne Absender
Zitat:
Ich hab "ServerName" in der Funktion als Empfänger gedeutet und nicht MsgName. |
Re: Net Send ohne Absender
Zitat:
Gruß Hagen |
Re: Net Send ohne Absender
War ja klar ;) Die wollen wieder nur ihre User verwirren *g*
|
Re: Net Send ohne Absender
Danke für den tollen Code!
(das mit dem NetMsgSend) Man kann ja bei Net Send auch den Usernamen als Empfänger angeben - zumindest bei uns. Kann man die Funktion so umbauen, dass es auch mit dem Usernamen funktioniert? |
Re: Net Send ohne Absender
Servus
dumme Frage : warum wurde mein Thread (NetSend Spoofing) geschlossen , weil "Spoofing" ja soo böse ist und in diesem Thread , in dem es um haargenau das selbe geht , wird Tatkräftig mitgeholfen ?! worin soll der Unterschied bestehen , ob man schreibt : "Net Send ohne Absender" oder direkter "NetSendSpoofing" Cu |
Re: Net Send ohne Absender
Öhm ich hab nur den Thread hier gesehen *g*
Dafür kann ich ja nix :stupid: |
Wie jetzt?
:wiejetzt: Wohin muss man denn den Code aus folgendem Thread kopieren?
![]() Und wohin muss man dann den folgenden Code zum Aufruf der Funktion kopieren?
Code:
NetMessageBufferSendSubstA('Empfaenger-PC', 'Ist eh egal', 'DerAbsender', 'Die Nachricht');
|
Re: Net Send ohne Absender
Herzlich willkommen in der DP!
Zu 2.: Das gehört in's OnClick des Senden-Buttons. Edit: Ich hatte Hezlich anstatt Herzlich geschrieben. :oops: |
Re: Net Send ohne Absender
Zu 1.: Das ist eine ganz normale Funktion, die deklarierst du im private oder public-Bereich und im implementation-Abschnitt gehört der Code dann hin.
|
Kann man seine eigenen Beiträge nur editieren oder auch löschen?
|
Es funzt nicht, aber das Problem liegt bestimmt daran das ich was falsches im private oder public-Bereich geschrieben habe, also kannst du bitte schreiben was da rein muss :?:
Kann man auch irgendwie ne Rückmeldung anzeigen ob die Message erfolgreich angekommen ist :gruebel: |
Re: Net Send ohne Absender
Löschen kannst du deine Beiträge nicht, wo kämen wir denn dahin!
Es wäre sinnvill, wenn du in Zukunft den Code posten könntest, denn du bereits selber zusammengestellt hast (mit den Delphi-Tags). Heute bin ich mal nicht so, so geht's:
Delphi-Quellcode:
type
TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } function NetMessageBufferSendSubstA(ServerName, MsgName, FromName, Msg: AnsiString): Boolean; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function TForm1.NetMessageBufferSendSubstA(ServerName, MsgName, FromName, Msg: AnsiString): Boolean; {.$DEFINE SYNCHRONOUS} const szService = '\mailslot\messngr'; MaxBufLen = $700; var hFile: THandle; WrittenBytes: DWORD; {$IFNDEF SYNCHRONOUS} ovs: OVERLAPPED; EventName:String; {$ENDIF} begin Result := False; if Length(Msg) > MaxBufLen then SetLength(Msg, MaxBufLen); {$IFNDEF SYNCHRONOUS} EventName:='NetSendEvent_'+ServerName; {$ENDIF} ServerName := '\\' + Servername + szService; hFile := CreateFileA( @ServerName[1], GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_NO_BUFFERING or FILE_FLAG_OVERLAPPED, 0); if hFile <> INVALID_HANDLE_VALUE then try Msg := FromName + #0 + MsgName + #0 + Msg; {$IFNDEF SYNCHRONOUS} ovs.hEvent := CreateEventA(nil, True, False, @EventName[1]); WriteFile(hFile, Pointer(Msg)^, Length(Msg), WrittenBytes, @ovs); {$ELSE} WriteFile(hFile, Pointer(Msg)^, Length(Msg), WrittenBytes, nil); {$ENDIF} Result := GetLastError = ERROR_IO_PENDING; finally {$IFNDEF SYNCHRONOUS} if WaitForSingleObject(ovs.hEvent, INFINITE) <> WAIT_TIMEOUT then {$ENDIF} CloseHandle(hFile); end; end; //Aufruf: procedure TForm1.Button1Click(Sender: TObject); begin NetMessageBufferSendSubstA(...); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 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 by Thomas Breitkreuz