@Dima_E

Как узнать через Python, какие порты занимают приложения в Windows?

Какая библиотека может дать подобный функционал ? (Какие порты используют приложения)
Нужна для сбора информации, для последующего разделения трафика через маршрутизатор.
  • Вопрос задан
  • 738 просмотров
Решения вопроса 2
HemulGM
@HemulGM Куратор тега Python
Delphi Developer, сис. админ
На винде? Если да, то использовать WinAPI для доступа к этой информации.
Копать в эту сторону. Пространства имен: Windows, Winsock, Winsock2.
GetTcpTable: function(pTcpTable: PMIB_TCPTABLE; var pdwSize: DWORD; bOrder: BOOL): DWORD; stdcall; 
{$EXTERNALSYM GetTcpTable}
GetUdpTable: function(pUdpTable: PMIB_UDPTABLE; var pdwSize: DWORD; bOrder: BOOL): DWORD; stdcall;
{$EXTERNALSYM GetUdpTable}


GetExtendedTcpTable: function(pTcpTable: PMIB_TCPEXTABLE; var pdwSize: DWORD; bOrder: BOOL; ulAf: ULONG; TableClass: TCP_TABLE_CLASS; Reserved: ULONG): DWORD; stdcall;
{$EXTERNALSYM GetExtendedTcpTable}
GetExtendedUdpTable: function(pTcpTable: PMIB_UDPEXTABLE; var pdwSize: DWORD; bOrder: BOOL; ulAf: ULONG; TableClass: UDP_TABLE_CLASS; Reserved: ULONG): DWORD; stdcall;
{$EXTERNALSYM GetExtendedUdpTable}


Эти методы WinApi позволяют получить информацию об открытых портах и процессах, для которых они открыты
Вот так это выглядит:
5f28e791916dc732699772.png
Ответ написан
@yellowmew
Cloud infrastructure, monitoring engineer. SRE
можно сделать например так, про библиотеку тоже не подскажу
netstat.ps1
Foreach($p In (Get-Process -IncludeUserName | where {$_.UserName} | `
  select Id, ProcessName, UserName)) {
      $properties = @{ 'PID'=$p.Id;
                       'ProcessName'=$p.ProcessName;
                       'UserName'=$p.UserName;
                     }
      $psobj = New-Object -TypeName psobject -Property $properties
      $obj+=$psobj
  }

Get-NetTCPConnection | where {$_.State -eq "Established"} | select `
  RemoteAddress, `
  RemotePort, `
  @{n="PID";e={$_.OwningProcess}}, @{n="ProcessName";e={($obj |? PID -eq $_.OwningProcess | select -ExpandProperty ProcessName)}}, `
  @{n="UserName";e={($obj |? PID -eq $_.OwningProcess | select -ExpandProperty UserName)}} |
  sort -Property ProcessName, UserName |
  ft -auto


netstat.py
import subprocess, sys
p = subprocess.Popen(["powershell.exe", "./netstat.ps1"], stdout=sys.stdout)
p.communicate()

PS скрипт писать было лень, скоммуниздил
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы