OVH Cloud OVH Cloud

Socket et PID

8 réponses
Avatar
Vincent Hiribarren
Bonjour à tous,

si on a récupéré un descripteur de socket, comment récupérer en C/C++
win32 le PID du programme qui a ouvert la socket ?

En espérant être clair, je suis assez béotien en programmation sous
Windows. C'est en relation avec Winsock 2 et les LSP. Tout ceci est
encore un peu vague dans ma tête, mais en fait je souhaite pouvoir
savoir de quelle application vient tel flux réseau (faire un peu comme
le pare-feu windows XP, où on autorise une application à utiliser des
ressources réseaux, mais pas une autre application).

En vous remerciant d'avance !

8 réponses

Avatar
Thierry
Bonjour,

Vincent Hiribarren a écrit :

Bonjour à tous,

si on a récupéré un descripteur de socket, comment récupérer en C/C++
win32 le PID du programme qui a ouvert la socket ?

En espérant être clair, je suis assez béotien en programmation sous
Windows. C'est en relation avec Winsock 2 et les LSP. Tout ceci est
encore un peu vague dans ma tête, mais en fait je souhaite pouvoir
savoir de quelle application vient tel flux réseau (faire un peu comme
le pare-feu windows XP, où on autorise une application à utiliser des
ressources réseaux, mais pas une autre application).



sous XP, utiliser AllocateAndGetTcpExTableFromStack
--
« Le travail est probablement ce qu'il y a sur cette terre de plus bas et
de plus ignoble. Il n'est pas possible de regarder un travailleur sans
maudire ce qui a fait que cet homme travaille, alors qu'il pourrait nager,
dormir dans l'herbe ou simplement lire ou faire l'amour avec sa femme. »
Boris VIAN
Mon blog RSS : http://yarglah.free.fr/monblog_rss.php <<




Avatar
Vincent Hiribarren
Thierry wrote:

si on a récupéré un descripteur de socket, comment récupérer en C/C++
win32 le PID du programme qui a ouvert la socket ?

En espérant être clair, je suis assez béotien en programmation sous
Windows. C'est en relation avec Winsock 2 et les LSP. Tout ceci est
encore un peu vague dans ma tête, mais en fait je souhaite pouvoir
savoir de quelle application vient tel flux réseau (faire un peu comme
le pare-feu windows XP, où on autorise une application à utiliser des
ressources réseaux, mais pas une autre application).



sous XP, utiliser AllocateAndGetTcpExTableFromStack



Merci, je vais voir ça, bien qu'un premier coup d'oeil dans MSDN ne me
sorte aucune réponses. En revanche je vais être embêtant, mais
existe-t-il ça sous Windows CE / Windows Mobile ? Encore merci d'avance.
Avatar
Aurelien Regat-Barrel
>> sous XP, utiliser AllocateAndGetTcpExTableFromStack




Merci, je vais voir ça, bien qu'un premier coup d'oeil dans MSDN ne me
sorte aucune réponses.



Parce que c'est une fonction non documentée. Sous XP SP2, y'a
GetExtendedTcpTable.

--
Aurélien Regat-Barrel
Avatar
Vincent Hiribarren
Aurelien Regat-Barrel wrote:
sous XP, utiliser AllocateAndGetTcpExTableFromStack




Merci, je vais voir ça, bien qu'un premier coup d'oeil dans MSDN ne me
sorte aucune réponses.



Parce que c'est une fonction non documentée. Sous XP SP2, y'a
GetExtendedTcpTable.



Je vais essayer d'être plus précis.

En fait, j'aimerais comprendre comment fonctionnent les logiciels
"pare-feux" classiques sous windows règlementant l'accès réseau en
fonction du logiciel : habituellement, on lance un logiciel, un
message apparait ("attention, ce logiciel veut accéder à internet,
vous le laissez faire ?").

Ces pare-feux gèrent l'accès réseau du point de vue destination réseau
bien sûr, mais aussi du point de vu des logiciels : tel logiciel aura
le droit de faire ce qu'il veut, mais pas l'autre.

Je me trompe peut-être, mais au niveau pare-feu, on sait quel logiciel
essaie d'accéder à Internet, et si ce logiciel a droit ou pas d'y
accéder. Comment est-ce possible ? Comment à partir d'un accès réseau
on peut remonter au logiciel qui fait l'accès réseau, et donc faire le
contrôle réseau en fonction du logiciel ?

Ce serait surtout pour appliquer le "principe de régulation des accès
en fonction des logiciels" pour windows ce, mais si vous savez aussi
comment faire avec XP, ça m'intéresse.

Si vous avez des pistes...

Merci d'avance !
Avatar
Aurelien Regat-Barrel
> En fait, j'aimerais comprendre comment fonctionnent les logiciels
"pare-feux" classiques sous windows règlementant l'accès réseau en
fonction du logiciel : habituellement, on lance un logiciel, un message
apparait ("attention, ce logiciel veut accéder à internet, vous le
laissez faire ?").



Le kernel il sait ce que les process ont alloué comme ressource. Y'a
pluieurs possibilités, mais je pense qu'un pare-feu sérieux doit
travailler au niveau noyau, c.a.d installer son driver qui filtre le
traffic, voire l'intercepte avant l'OS et protège ce dernier de paquets
"malicieux". Thierry t'avais donné un bon lien lors de ta question
précédente sur les pare-feux:
http://www.ntkernel.com/w&p.php?id

Ces pare-feux gèrent l'accès réseau du point de vue destination réseau
bien sûr, mais aussi du point de vu des logiciels : tel logiciel aura le
droit de faire ce qu'il veut, mais pas l'autre.

Je me trompe peut-être, mais au niveau pare-feu, on sait quel logiciel
essaie d'accéder à Internet, et si ce logiciel a droit ou pas d'y
accéder. Comment est-ce possible ? Comment à partir d'un accès réseau on
peut remonter au logiciel qui fait l'accès réseau, et donc faire le
contrôle réseau en fonction du logiciel ?



Pour détecter qu'un logiciel se connecte au net, faut remplacer l'appel
système concerné par le tiens.

Ce serait surtout pour appliquer le "principe de régulation des accès en
fonction des logiciels" pour windows ce, mais si vous savez aussi
comment faire avec XP, ça m'intéresse.

Si vous avez des pistes...



On peut configurer le firewall intégré de XP SP2:
http://msdn.microsoft.com/library/en-us/dnanchor/html/intconnsharingfirewall.asp

--
Aurélien Regat-Barrel
Avatar
Thierry
Bonjour,

Aurelien Regat-Barrel a écrit :

Le kernel il sait ce que les process ont alloué comme ressource. Y'a
pluieurs possibilités, mais je pense qu'un pare-feu sérieux doit
travailler au niveau noyau, c.a.d installer son driver qui filtre le
traffic, voire l'intercepte avant l'OS et protège ce dernier de paquets
"malicieux".



Kerio fonctionne comme cela. Même si ça pourrait être gere au niveau LSP
apparement aucun FW ne les utilisent (Norton non plus).

(pour lister les LSP installées : Adaware de Lavasoft + plug-in LSP.
Peut-etre existe-t-il d'autres utilitaire permettant de lister
(sysinternals ?))


--
« Le travail est probablement ce qu'il y a sur cette terre de plus bas et
de plus ignoble. Il n'est pas possible de regarder un travailleur sans
maudire ce qui a fait que cet homme travaille, alors qu'il pourrait nager,
dormir dans l'herbe ou simplement lire ou faire l'amour avec sa femme. »
Boris VIAN
Mon blog RSS : http://yarglah.free.fr/monblog_rss.php <<




Avatar
Vincent Hiribarren
Aurelien Regat-Barrel wrote:

Thierry t'avais donné un bon lien lors de ta question
précédente sur les pare-feux:
http://www.ntkernel.com/w&p.php?id



Etrange, je l'avais râté. Il doit me manquer un article.
Sinon effectivement, c'est extrêmement intéressant. D'ailleurs, j'y lis :

1) Winsock Layered Service Provider (LSP). This approach is well
documented in MSDN and has a good example (SPI.CPP). As method
advantage I would mention the possibility to determine process that
called Windows Sockets. [...]

Ca correspond justement à ce que je veux faire, un flux réseau passe,
je veux pouvoir le traiter avant de l'envoyer, et cela en fonction du
programme.

J'avais déjà regardé les LSP, et malheureusement, je n'avais rien vu
sur la possibilité de savoir de quel logiciel provenaient les flux
réseaux (d'où cette deuxième enfilade). Ou alors mon oeil de béotien
n'a pas su le percevoir. Quelqu'un a des pistes ? Merci !

Pour détecter qu'un logiciel se connecte au net, faut remplacer l'appel
système concerné par le tiens.



Et là on revient à l'enfilade que j'avais précédemment lancé. J'ai
compris les techniques, mais comment savoir quel logiciel exactement a
fait l'appel ? C'est peut-être quelque chose de très facile à faire,
mais il me manque encore des billes pour trouver cette information.
Mais j'apprends :-)

Encore merci pour toute réponse éventuelle !
Avatar
Cyrille Szymanski
Thierry wrote in news:XnF96DD65EB91871pouletetcetc@
212.27.42.74:

Kerio fonctionne comme cela. Même si ça pourrait être gere au niveau LSP
apparement aucun FW ne les utilisent (Norton non plus).



Je pense que c'est pour ne pas se limiter aux applications winsock.

Je crois que certains dialers VPN par exemple ne passent pas par winsock et
ne peuvent donc pas être filtrés par LSP.

--
Cyrille Szymanski