PureBasic

Forums PureBasic
Nous sommes le Lun 22/Juil/2019 23:42

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 
Auteur Message
 Sujet du message: Recuperer le nom du process qui se connecte a internet
MessagePosté: Mar 19/Juin/2018 11:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 27/Déc/2015 17:02
Messages: 177
Localisation: Strasbourg
Bonjour
Dans Fiddler, on peut voir quel processus a demande une certaine connexion Internet.
Est ce que c'est possible de faire ca en purebasic? Monter un petit serveur local, puis recevoir les domaines visites par les differents programmes de l'ordinateur, en sachant quel domaine a ete visite par quel programme?

Merci

_________________
Windows 10 x64 -- Purebasic 5.70 LTS x86


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Recuperer le nom du process qui se connecte a internet
MessagePosté: Jeu 21/Juin/2018 21:05 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 12/Sep/2015 14:31
Messages: 310
Localisation: Alger
Bonjour :D

test !
Code:
InitNetwork()

Structure MIB_TCPTABLE_OWNER_PID
  dwStats.l
  dwLocalAddr.l
  dwLocalPort.l
  dwRemoteAddr.l
  dwRemotePort.l
  dwOwningPid.l
EndStructure

Structure MIB_TCPTABLE
  dwNumEntries.l
  table.MIB_TCPTABLE_OWNER_PID[0]
EndStructure

Structure MIB_UDPROW_OWNER_PID
  dwLocalAddr.l
  dwLocalPort.l
  dwOwningPid.l
EndStructure

Structure MIB_UDPTABLE
  dwNumEntries.l
  table.MIB_UDPROW_OWNER_PID[0]
EndStructure

Prototype GetExtendedTcpTable(pTcpTable,pdwSize,bOrder,ulAf,TableClass,Reserved = 0)
Prototype GetExtendedUdpTable(pUdpTable,pdwSize,bOrder,ulAf,TableClass,Reserved = 0)
OpenLibrary(0, "iphlpapi.dll")
Global GetExtendedTcpTable.GetExtendedTcpTable = GetFunction(0,"GetExtendedTcpTable")
Global GetExtendedUdpTable.GetExtendedUdpTable = GetFunction(0,"GetExtendedUdpTable")

Global State.s = "CLOSED|LISTENING|SYN_SENT|SYN_RCVD|ESTABLISHED|FIN_WAIT1|FIN_WAIT2|CLOSE_WAIT|CLOSING|LAST_ACK|TIME_WAIT|DELETE_TCB"

Structure ProcessInfo
  strProcessName.s
  Pid.l
EndStructure

Procedure GetProcessList(List ProcessList.ProcessInfo())
  ClearList(ProcessList())
  Protected Proc32.PROCESSENTRY32\dwSize = SizeOf(PROCESSENTRY32)
  Protected snapShot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If snapShot
    If Process32First_(snapShot, @Proc32)
      While Process32Next_(snapShot, @Proc32)
        AddElement(ProcessList())
        ProcessList()\strProcessName = PeekS(@Proc32\szExeFile)
        ProcessList()\Pid = Proc32\th32ProcessID
      Wend
    EndIf
    CloseHandle_(snapShot)
  EndIf
EndProcedure

Structure ConnectionListInfo
  strType.s
  dwStats.l
  strStats.s
  dwLocalAddr.l
  strLocalAddr.s
  strLocalAddr2.s
  dwLocalPort.l
  dwRemoteAddr.l
  strRemoteAddr.s
  strRemoteAddr2.s
  dwRemotePort.l
  dwOwningPid.l
  strProcessName.s
EndStructure

Procedure GetConnectionList(List ConnectionList.ConnectionListInfo())
  Protected *tcpTable.MIB_TCPTABLE,dwSize,*udpTable.MIB_UDPTABLE,*IpName,
            NewList ProcessList.ProcessInfo()
  GetProcessList(ProcessList())
 
  GetExtendedTcpTable(0 , @dwSize, #True,#AF_INET,5)
  If dwSize = 0
    ProcedureReturn -1
  EndIf
  *tcpTable = AllocateMemory(dwSize)
  If GetExtendedTcpTable(*tcpTable , @dwSize, #True,#AF_INET,5) <> 0
    FreeMemory(*tcpTable)
    ProcedureReturn -2
  EndIf
  With *tcpTable
    For i = 0 To \dwNumEntries - 1
      AddElement(ConnectionList())
      ConnectionList()\strType = "TCP"
      ConnectionList()\dwStats = \table[i]\dwStats
      ConnectionList()\dwLocalAddr = \table[i]\dwLocalAddr
      ConnectionList()\dwLocalPort = ntohs_(\table[i]\dwLocalPort)
      ConnectionList()\dwRemoteAddr = \table[i]\dwRemoteAddr
      ConnectionList()\dwRemotePort = ntohs_(\table[i]\dwRemotePort)
      ConnectionList()\dwOwningPid = \table[i]\dwOwningPid
      ConnectionList()\strStats = StringField(State,\table[i]\dwStats,"|")
      ConnectionList()\strRemoteAddr = IPString(\table[i]\dwRemoteAddr)
      *IpName = gethostbyaddr_(@\table[i]\dwRemoteAddr,4,#PF_INET)
      If *IpName > 0
        ConnectionList()\strRemoteAddr2 = PeekS(PeekL(*IpName),-1,#PB_Ascii)
      EndIf
      ConnectionList()\strLocalAddr = IPString(\table[i]\dwLocalAddr)
      *IpName = gethostbyaddr_(@\table[i]\dwLocalAddr,4,#PF_INET)
      If *IpName > 0
        ConnectionList()\strLocalAddr2 = PeekS(PeekL(*IpName),-1,#PB_Ascii)
      EndIf     
      ForEach ProcessList()
        If ProcessList()\Pid = \table[i]\dwOwningPid
          ConnectionList()\strProcessName = ProcessList()\strProcessName
          Break
        EndIf
      Next
    Next
  EndWith
  FreeMemory(*tcpTable)
  dwSize = 0
  GetExtendedUdpTable(0,@dwSize, #True,#AF_INET,1)
  If dwSize = 0
    ProcedureReturn -3
  EndIf
  *udpTable = AllocateMemory(dwSize)
  If GetExtendedUdpTable(*udpTable , @dwSize, #True,#AF_INET,1) <> 0
    FreeMemory(*udpTable)
    ProcedureReturn -4
  EndIf
  With *udpTable
    For i = 0 To \dwNumEntries - 1
      AddElement(ConnectionList())
      ConnectionList()\strType = "UDP"
      ConnectionList()\dwLocalAddr = \table[i]\dwLocalAddr
      ConnectionList()\dwLocalPort = ntohs_(\table[i]\dwLocalPort)
      ConnectionList()\dwOwningPid = \table[i]\dwOwningPid
      ConnectionList()\strLocalAddr = IPString(\table[i]\dwLocalAddr)
      *IpName = gethostbyaddr_(@\table[i]\dwLocalAddr,4,#PF_INET)
      If *IpName > 0
        ConnectionList()\strLocalAddr2 = PeekS(PeekL(*IpName),-1,#PB_Ascii)
      EndIf     
      ForEach ProcessList()
        If ProcessList()\Pid = \table[i]\dwOwningPid
          ConnectionList()\strProcessName = ProcessList()\strProcessName
          Break
        EndIf
      Next
    Next
  EndWith
  FreeMemory(*udpTable)
  ProcedureReturn 1
EndProcedure
NewList ConnectionList.ConnectionListInfo()

st = GetConnectionList(ConnectionList())
If st <> 1
  Debug " ERROR CODE : " + Str(st)
  End 1
EndIf

ForEach ConnectionList()
  Debug ConnectionList()\strType + " - " + ConnectionList()\strStats
  Debug ConnectionList()\strProcessName + " (" + Str(ConnectionList()\dwOwningPid) + ")"
  Debug ConnectionList()\strRemoteAddr2 + " (" + ConnectionList()\strRemoteAddr + ") : " +
        Str(ConnectionList()\dwRemotePort)
  Debug ConnectionList()\strLocalAddr + " (" + ConnectionList()\strLocalAddr2 + ") : "  +
        Str(ConnectionList()\dwLocalPort)
  Debug  "____________________________________________________________________________________"
Next



_________________
.....i Love Pb :)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Recuperer le nom du process qui se connecte a internet
MessagePosté: Ven 22/Juin/2018 6:14 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1579
Citation:
...quel processus a demande une certaine connexion Internet.

Sous Windows, sans API, avec netstat
Code:
C:> netstat /?

Affiche les statistiques de protocole et les connexions réseau TCP/IP actuelles                                   
                                                                                                                   
NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-x] [-t] [interval]                                   
                                                                                                                   
  -a            Affiche toutes les connexions et tous les ports d'écoute.                                         
  -b            Affiche l'exécutable impliqué dans la création de chaque                                           
                connexion ou port d'écoute...
(Voir le reste de l'aide pour les autres paramètres)

Ensuite RunProgram("cmd", "/c netstat ...) et récupérer la sortie.

:wink:

_________________
HP de 2012 - Intel i3-3220 @3.30 GHz, 2 coeurs, 4 threads - RAM 16 Go - Nvidia GT 620 1920x1080 DPI 100%
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Recuperer le nom du process qui se connecte a internet
MessagePosté: Sam 23/Juin/2018 15:54 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6638
Localisation: Isere
@CELTIC
Marche nickel ton code sur W10 X64
Merci 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 6 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye