Autor Beitrag
mc_eddy
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 22.02.07 13:20 
Hi,

ich habe folgendes Prob. ich brauche eine Komponente, die auf
eine Bestimmte Net Send meldung reagiert.

Gibs da was ?

Gruß
eddy


Moderiert von user profile iconraziel: Topic aus VCL (Visual Component Library) verschoben am Fr 23.02.2007 um 06:34
Fighter#1
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: 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 : dsdt.info/tutorials/winsocket/

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
mc_eddy Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: 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

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Do 22.02.07 20:27 
user profile iconFighter#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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: 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!

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 787

Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
BeitragVerfasst: Do 22.02.07 21:25 
user profile iconFighter#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 : dsdt.info/tutorials/winsocket/


Also in dem tutorial steht doch eigentlich alles wichtige, aber wenn du unbedingt willst :-)
ausblenden 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:
//Server öffnen: (onCreate des Servers)
  ServerSocket1.Port:=45230;
  ServerSocket1.Open;

//Client verbinden (onCreate des Clients)
ClientSocket1.Port:=45230;
ClientSocket1.Host:='localhost';
ClientSocket1.Open

//Infos Senden (zum Beispiel ein Buttondruck im Klienten
ClientSocket1.Socket.SendText('ShowInfo');
//Beenden befehl senden (Ein anderer button zB)
ClientSocket1.Socket.SendText('close');

//Empfangs procedure
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;

_________________
Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
mc_eddy Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 22.02.07 23:44 
Moin!

Ich möchte der Vollständigkeit halber was zu diesem Code anmerken:
user profile iconFighter#1 hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
[...]
//Infos Senden (zum Beispiel ein Buttondruck im Klienten
ClientSocket1.Socket.SendText('ShowInfo');
//Beenden befehl senden (Ein anderer button zB)
ClientSocket1.Socket.SendText('close');

//Empfangs procedure
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 wird ausführlich erläutert, warum das so ist. ;)

Ach ja, @user profile iconFighter#1: ich glaube nicht, dass user profile iconChryzler 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Fr 23.02.07 10:39 
user profile iconFighter#1 hat folgendes geschrieben:
user profile iconFighter#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 : dsdt.info/tutorials/winsocket/


Also in dem tutorial steht doch eigentlich alles wichtige, aber wenn du unbedingt willst :-)
ausblenden 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:
//Server öffnen: (onCreate des Servers)
  ServerSocket1.Port:=45230;
  ServerSocket1.Open;

//Client verbinden (onCreate des Clients)
ClientSocket1.Port:=45230;
ClientSocket1.Host:='localhost';
ClientSocket1.Open

//Infos Senden (zum Beispiel ein Buttondruck im Klienten
ClientSocket1.Socket.SendText('ShowInfo');
//Beenden befehl senden (Ein anderer button zB)
ClientSocket1.Socket.SendText('close');

//Empfangs procedure
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:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 23.02.07 10:57 
Der NetSend-Dienst verschickt seine Nachrichten per Mailslots.
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Fr 23.02.07 10:59 
user profile iconLuckie 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.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 23.02.07 11:52 
Zum Senden (Nachrichtendienst muss gestartet sein):
ausblenden 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: www.delphipraxis.net...st237978.html#237978