Entwickler-Ecke
Internet / Netzwerk - Auf Net Send Meldung Reagieren
mc_eddy - Do 22.02.07 13:20
Titel: Auf Net Send Meldung Reagieren
Hi,
ich habe folgendes Prob. ich brauche eine Komponente, die auf
eine Bestimmte Net Send meldung reagiert.
Gibs da was ?
Gruß
eddy
Moderiert von
raziel: Topic aus VCL (Visual Component Library) verschoben am Fr 23.02.2007 um 06:34
Fighter#1 - Do 22.02.07 13:50
Du kannst zum Beispiel über die ClientSocket und ServerSocket selber Nachrichten schreiben, da kannst du ganz einfach auf bestimmte nachrichten reagieren. Außerdem kannst du an bestimmte Adressen schicken. Tutorial :
http://dsdt.info/tutorials/winsocket/
mc_eddy - Do 22.02.07 18:57
ok, danke
welcher port ist eigendlich für die windows xp ->net send<- geschichte zuständig ?
Mein Problem ist ein rechner mit USV der im Störfall halt eben nur über
Net send, bzw Windows-nachrichtendienst nachrichten schickt.
Diese würde ich gerne auf den Clients Abfragen, und Darauhin bestimmte Aktionen Ausführen
Gruß
eddy
Fighter#1 - Do 22.02.07 20:23
Ich kann dir mit sicherheit weder Port noch Protokoll des Net-Send dienstes nennen.
Eins ist aber sicher, bei Win XP Service Pack 2 ist er automatisch deaktiviert und daher eher unbrauchbar
Chryzler - Do 22.02.07 20:27
Fighter#1 hat folgendes geschrieben: |
Ich kann dir mit sicherheit weder Port noch Protokoll des Net-Send dienstes nennen.
Eins ist aber sicher, bei Win XP Service Pack 2 ist er automatisch deaktiviert und daher eher unbrauchbar |
Hab ich noch nie gehört, dass der mit dem SP2 deaktiviert worden ist. Und selbst wenn, dann aktivierst du ihn halt einfach wieder, den Dienst halt starten. Ich würde da per FindWindow in einem Timer, die Meldung suchen mit dem Titel "Windows-Nachrichtendienst" oder so.
Fighter#1 - Do 22.02.07 20:43
... Bevor ich son mist mit nem Timer mache mach ich das ganze Resourcen schonend mit den Sockets, ist einfacher, edler und KOMFORTABLER!!!
Die Funktion ist definitiv deaktiviert da ich sie im SP 1 noch aktiv genutzt habe. Vll. ist es auch nicht jedem Nutzer von mc_Eddies Programm lieb wenn Funktionen aktiviert werden die aus SIcherheitsgründen deaktiviert werden!
... Meine Meinung!
Chryzler - Do 22.02.07 21:01
Das was ich gesagt habe ist kein Mist! Du kannst nicht per Sockets auf eine Nachricht reagieren, aber bitte schreib mir ein kleines Demo-Programm mit Sockets und ich nehme alles zurück. Außerdem ist ein Timer mit einem Aufruf von FindWindow alle 10 Sekunden kein Ressourcenfresser. mc_eddy hat gesagt, dass er das Programm für seinen Computer macht, und ich glaube kaum, dass er es veröffentlicht. Net Send muss sowieso aktiviert sein, sonst bekommt er ja die Nachricht gar nicht. Das nützt ihm dann wenig. Und wenn sie wirklich im SP2 deaktiviert ist, dann aktiviert man sie halt wieder, manuell in der Systemsteuerung. Außerdem wüsste ich nicht, warum Net Send eine Sicherheitslücke sein soll und warum sie deaktiviert werden soll. Net Send wurde nur immer öfters zum Spammen übers Internet genutzt. Sicherheitslücke würde ich das jetzt nicht nennen. Meine Meinung!
Fighter#1 - Do 22.02.07 21:25
Fighter#1 hat folgendes geschrieben: |
| Du kannst zum Beispiel über die ClientSocket und ServerSocket selber Nachrichten schreiben, da kannst du ganz einfach auf bestimmte nachrichten reagieren. Außerdem kannst du an bestimmte Adressen schicken. Tutorial : http://dsdt.info/tutorials/winsocket/ |
Also in dem tutorial steht doch eigentlich alles wichtige, aber wenn du unbedingt willst :-)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| ServerSocket1.Port:=45230; ServerSocket1.Open;
ClientSocket1.Port:=45230; ClientSocket1.Host:='localhost'; ClientSocket1.Open
ClientSocket1.Socket.SendText('ShowInfo'); ClientSocket1.Socket.SendText('close');
procedure TForm1.ServerSocket1onClientRead(...); var data:String; begin data:=Socket.ReceiveText; If data='ShowInfo' Then ShowMessage('Dieses Programm kann auf Nachrichten reagieren') else if data='close' Then Close; end; |
mc_eddy - Do 22.02.07 21:52
Hi,
Danke danke danke, habe mir mit den Indy's was gebastelt, und leuft.
Die Sache mit dem Nachrichten dienst leuft auch (per timer Methode),
Hier ist übrigens ne Super Suchfunktion ;-) . (hätte ich mal besser vorher benutzt, schähmm...)
Werde euch mal Aufklären,
also das Ganze soll zum runterfahren der Clients einer USV verwendet werden.
Ist eine 3KVA USV, und es hängen 4 rechner dran.
Auf dem Server wird das von der USV geregelt, die anderen rechner wollte ich per ->psshutdown<-
runterfahren bei den W2K rechnern leuft das auch aber nicht auf den XP, trotz Admin-rechte
Also habe ich mir ein Prog. gebastelt das auf den Clients leuft und diese runterfährt wenn:
a, eine bestimmte datei in einem Verzeichniss existiert oder
b, eine best. Nachricht per Net send Eingeht oder
c, vom Server über die Indy-schnittstelle ein best. text geschickt wird.
weiß das ist jetzt ein wenig overkill, aber jetzt habe ich halt alle möglichkeiten.
Gruß
eddy
Narses - Do 22.02.07 23:44
Moin!
Ich möchte der Vollständigkeit halber was zu diesem Code anmerken:
Fighter#1 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| [...] ClientSocket1.Socket.SendText('ShowInfo'); ClientSocket1.Socket.SendText('close');
procedure TForm1.ServerSocket1onClientRead(...); var data:String; begin data:=Socket.ReceiveText; If data='ShowInfo' Then ShowMessage('Dieses Programm kann auf Nachrichten reagieren') else if data='close' Then Close; end; | |
An der markierten Stelle wird unterstellt, dass nur jeweils der Text eines vorangegangenen
.SendText()-Aufrufs gelesen wird. Das ist leider
allgemein eine falsche Annahme, auch wenn es manchmal (zufällig!) funktioniert. :mahn: In diesem
FAQ-Beitrag [
http://www.delphi-library.de/topic_Datenpakete+bei+den+SocketKomponenten+auseinanderhalten_56194.html] wird ausführlich erläutert, warum das so ist. ;)
Ach ja, @
Fighter#1: ich glaube nicht, dass
Chryzler so eine Art von Programm meinte, sondern mit den Sockets das net send Protokoll annehmen. :P (Ich halte das zwar für grundsätzlich möglich, aber sicher nicht für einfach... :?)
cu
Narses
Chryzler - Fr 23.02.07 10:39
Fighter#1 hat folgendes geschrieben: |
Fighter#1 hat folgendes geschrieben: | | Du kannst zum Beispiel über die ClientSocket und ServerSocket selber Nachrichten schreiben, da kannst du ganz einfach auf bestimmte nachrichten reagieren. Außerdem kannst du an bestimmte Adressen schicken. Tutorial : http://dsdt.info/tutorials/winsocket/ |
Also in dem tutorial steht doch eigentlich alles wichtige, aber wenn du unbedingt willst :-)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| ServerSocket1.Port:=45230; ServerSocket1.Open;
ClientSocket1.Port:=45230; ClientSocket1.Host:='localhost'; ClientSocket1.Open
ClientSocket1.Socket.SendText('ShowInfo'); ClientSocket1.Socket.SendText('close');
procedure TForm1.ServerSocket1onClientRead(...); var data:String; begin data:=Socket.ReceiveText; If data='ShowInfo' Then ShowMessage('Dieses Programm kann auf Nachrichten reagieren') else if data='close' Then Close; end; | |
Also entweder hab ich jetzt was falsch verstanden, oder du. Ich dachte, der USV-Rechner sendet "nur" automatisch eine Net Send-Nachricht, und nix anderes. Weil du kannst ja nicht mit TClientSocket herausfinden, ob ein Rechner dir eine Net Send-Nachricht geschickt hat, das macht ja Windows (über Port 139 oder 445 glaub ich). Deswegen bliebe dir in diesem Falle nur ein Hook auf die MessageBox, oder FindWindow übrig. Wenn es dein eigenes Programm ist, das am USV-Rechner die Nachricht schickt, würd ich das natürlich auch über die Socket-Komponenten machen, da wäre Net Send ja total daneben.
Sorry für die Unannehmlichkeiten :oops: , war aber auch blöd beschrieben :wink:
Delete - Fr 23.02.07 10:57
Der NetSend-Dienst verschickt seine Nachrichten per Mailslots.
Chryzler - Fr 23.02.07 10:59
Luckie hat folgendes geschrieben: |
| Der NetSend-Dienst verschickt seine Nachrichten per Mailslots. |
Könntest du das etwas genauer erklären? :wink:
Ich weiß nur dass es in der netapi32.dll ne Funktion gibt, mit der man Nachrichten versenden kann.
Delete - Fr 23.02.07 11:52
Zum Senden (Nachrichtendienst muss gestartet sein):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| function SendToMailSlot(const Machine, Slot, MsgText: String): Boolean; var CompleteSlot: String; hSlot: THandle; BytesWritten: DWORD; begin BytesWritten := 0; CompleteSlot := '\\' + Machine + '\mailslot\' + Slot; hSlot := CreateFile(PChar(CompleteSlot), GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if hSlot <> INVALID_HANDLE_VALUE then begin if (WriteFile(hSlot, Pointer(PChar(MsgText))^, length(MsgText), BytesWritten, nil)) and (BytesWritten = length(MsgText)) then begin Result := True; end else Result := False; CloseHandle(hSlot); end else Result := False; end;
procedure TForm1.Button1Click(Sender: TObject); begin if not SendToMailSlot('NESTOR', 'messngr', 'Nestor' + #0 + 'Nestor' + #0 + 'Hello world') then ShowMessage(SysErrorMessage(GetLastError)); end; |
Zum Empfangen:
http://www.delphipraxis.net/post237978.html#237978
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!