Net send anonyme via les mailslots

Soyez le premier à donner votre avis sur cette source.

Vue 45 280 fois - Téléchargée 1 612 fois

Description

Le service d'affichage des messages de Windows ("net send") travail avec les mailslots.
(je vous invite à voir : http://castelain.developpez.com/articles/Mailslots/ )

J'ai recrée un client d'affichage des messages permettant d'envoyé des messages à un autre PC mais contrairement à ma précedente source ( http://www.delphifr.com/codes/NET-SEND-DELPHI-API-NETMESSAGEBUFFERSEND_34749.aspx ) celle-ci permet de se faire passer pour quelqu'un d'autre puisque l'on peut choisir le nom de l'emetteur.
Un système de bombing permet d'envoyer une multitude de messages a la suite, mais ne faite pas çà, c'est chiant :-)

PS : Merci à fOxi pour l'optimisation du code.

Note et commentaires sont les bienvenues.

Source / Exemple :


function SendMessage(const Emetteur, Destinataire, LeMessage : string) : Boolean;
var
  HWNDSlot : THandle;
  Buffer   : String;
  lpNumberOfBytesWritten : Cardinal;
begin

  { Init }
  Result := false;
  lpNumberOfBytesWritten := 0;

  { Création du MailSlot }
  HWNDSlot := CreateFile( PChar('\\' + Destinataire + '\MAILSLOT\MESSNGR'),
                           GENERIC_WRITE, FILE_SHARE_READ, nil,
                           OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );

  { Définition de la trame }
  Buffer := Emetteur + #0 + Destinataire + #0 + LeMessage + #0;

  try
      result := ( HWNDSlot <> INVALID_HANDLE_VALUE );
      if ( result ) then       { Envoi }
         result := WriteFile( HWNDSlot, PChar(Buffer)^, Length(Buffer), lpNumberOfBytesWritten, nil );
  finally
      CloseHandle( HWNDSlot );
  end;

end;

Conclusion :


Si les messages ne passent pas, verifiez que la machine distance est bien son service des messages activé.

Pour celà faire : [Démarrer] > [Executer] > "net start messenger" > [Ok]

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

f0xi
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26 -
petite modif d'optimisation que tu peu apporter :


function SendMessage(const Emetteur, Destinataire, LeMessage : string) : Boolean;
var
HWNDSlot : THandle;
Buffer : String;
lpNumberOfBytesWritten : Cardinal;
begin
result := false;
lpNumberOfBytesWritten := 0;
HWNDSlot := CreateFile( PChar('\\' + Destinataire + '\MAILSLOT\MESSNGR'),
GENERIC_WRITE, FILE_SHARE_READ, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );
Buffer := Emetteur + #0 + Destinataire + #0 + LeMessage + #0;
try
result := (HWNDSlot <> INVALID_HANDLE_VALUE);
if result then
result := WriteFile( HWNDSlot, PChar(Buffer)^, Length(Buffer),
lpNumberOfBytesWritten, nil );
finally
CloseHandle( HWNDSlot );
end;



n'oublis pas que le compilateur convertis automatiquement les LongBool ou WordBool en Boolean.

car dans un LongBool, False = Null, donc dés qu'un Bool n'est pas Null c'est qu'il est a True.
elguevel
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3 -
Ah merci bcp, c'est pas mal çà :-)

Je fais la modif, et je repost !
f0xi
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26 -
un truc aussi, il me semble que mettre PCHAR(...) pour un argument de type PAnsiChar ça ne sert a rien car delphi s'occupe seul des transtypage dans ces cas la ...

on peu donc en toute logique ecrire :

CreateFile( '\\' + Destinataire + '\MAILSLOT\MESSNGR', {est convertie directement en PAnsiChar}
GENERIC_WRITE, FILE_SHARE_READ, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );

c'est comme les Array of char qu'on peut assigner ou transmettre directement aux strings :

var
S : string;
const
C1 : array[0..5] of char = '012345';
begin
S := C1;
end;
elguevel
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3 -
Je sais mais je préfère caster explicitement, il n'y à pas de raison à çà mais au moins je sais ce qui se passe vraiment quand je regarde mon code.

De même pour la fonction API MessageBoxA(), je caste les arguments avec des PChar, alors qu'il n'est pas necessaire de le faire avec des chaines constantes.

Mais merci pour toutes ses précisions ;-)
elguevel
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3 -
Juste pour dire que j'ai testé ce programme en cours, et je me suis bien fendu la geule en me faisant passé pour d'autre. Donc çà marche très bien !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.