Как отследить к каким портам обращается программа

Я довольно широко искал это, но, похоже, не смог найти работающего примера.

Моя цель — отслеживать TCP-трафик на определенном порту, чтобы видеть входящие соединения и записывать их в текстовый файл. Суть в том, что мне также нужна временная метка в каждой строке, чтобы точно показать, когда клиент подключился ко второй.

Я уже исчерпал netstat, nmap и tcptrack, но ни одна не поддерживает временную метку.

Я думал, что сценарий оболочки Linux может работать, если я отслеживаю определенный локальный порт и записываю текст в файл при установлении соединения, а затем просто объединяю дату в каждой строке.

netstat -ano|grep 443|grep ESTABLISHED

так же как и это:

tcptrack -i eth0 port 443

но ни то, ни другое не удовлетворяет моим потребностям, так как мне нужно время, когда приходит соединение.

Если у вас есть какие-либо предложения или могли бы указать мне в правильном направлении, это будет очень признателен.

7 ответов 7

редактировать: я все еще получаю голоса за это лет спустя. Пожалуйста, не переходите к этому ответу, по моему мнению, ответ с использованием iptables здесь намного лучше.

Как открыть, закрыть порты , узнать какие порты открыты на Пк с Windows 10, 8, 7 или роутере в 2021


tcpdump port 443 and ‘(tcp-syn|tcp-ack)!=0’

или только tcp-syn , или только tcp-ack (я думаю, что именно так), в зависимости от того, что вам нужно.

изменён Wrikken 795
ответ дан Wrikken 795

Микро-второе разрешение

По умолчанию утилита tcpdump сообщает время с микросекундным разрешением. Например:

$ sudo tcpdump -i any port 443

покажет вывод, подобный следующему:

12: 08: 14.028945 IP localhost.33255> localhost.https: Flags [S], seq 1828376761, win 43690, опции [mss 65495, sackOK, TS val 108010971 ecr 0, nop, wscale 7], длина 0
12: 08: 14.028959 IP localhost.https> localhost.33255: Флаги [R.], seq 0, подтверждение 1828376762, победа 0, длина 0

Смотрите tcpdump(8) для полного списка опций tcpdump, и pcap-filter(7) для полного синтаксиса фильтров, которые вы можете использовать.

ответ дан CodeGnome 2k

Для этого вы можете использовать поддержку iptables в ядре Linux. Положительным моментом является то, что для умеренной полезности не требуется никакого дополнительного программного обеспечения. Недостатком является то, что для настройки требуются привилегии root (но, учитывая, что вы говорите о порте 443, который является привилегированным портом, вам, вероятно, понадобятся привилегии root для большинства решений).

Читайте также:
Программа для рисования как в контакте

Добавьте правило iptables что-то вроде:

sudo iptables -I INPUT -p tcp —dport 443 —syn -j LOG —log-prefix «HTTPS SYN: »

(Настройте часть -I INPUT на свой вкус.)

Когда правило срабатывает, ядро создает запись системного журнала. Например, с правилом ввода запись в журнале может выглядеть примерно так:

5 декабря 09:10:56 имя хоста ядро: [1023963.185332] HTTPS SYN: IN = ifX OUT = MAC = 80: 80: 80: 80: 80: 80: 80: 80: 80: 80: 80: 80: 08: 00 SRC = ABCD DST = WXYZ LEN = 52 TOS = 0x00 PREC = 0x20 TTL = 119 DF PROTO = TCP SPT = 37287 DPT = 443 WINDOW = 8192 RES = 0x00 SYN URGP = 0

Какие программы и службы используют интернет на Вашем ПК и к каким сайтам они подключаются

Затем вы можете использовать любой обычный инструмент для мониторинга журналов, чтобы сделать что-то полезное с этой информацией. Если ваша реализация системного журнала поддерживает это, вы даже можете направить их в отдельный файл журнала, эффективно выполняя ваше требование записать данные о соединении в файл с меткой времени во втором без дополнительного программного обеспечения.

Обратите внимание, что цель LOG является бесконечной целью, что означает, что любые правила, следующие за ней, все еще будут оцениваться, и пакет не будет ни отклонен, ни принят самим правилом LOG. Это делает цель LOG полезной также для отладки правил брандмауэра.

Чтобы избежать заполнения вашего журнала, рассмотрите возможность использования модуля limit в сочетании с этим. Обратитесь к справочной странице iptables(8) за подробностями.

Источник: poweruser.guru

Сканер портов

Он показывает, какие порты открыты на вашем компьютере или сервере,
и за что они отвечают. Проверка происходит через сканер nmap и отображает,
насколько открыто ваше устройство для внешнего мира.

Подробнее о сканере портов

Сканер портов позволяет найти компьютеры и серверы в сети, на которых открыт нужный порт. Чаще всего доступность портов проверяют системные администраторы, чтобы выявить слабые места их сетей.

Открытый порт позволяет подключиться к устройству из интернета, если на этом порту работает программа, готовая принять подключение.

Наш онлайн порт-сканер работает на базе самой известной утилиты nmap, адаптированной под веб.

Для проверки своего компьютера нажмите на кнопку «вставить мой IP-адрес» рядом с формой сканера. Не используйте сканер для проверка сторонних серверов, которые не принадлежат вам.

Источник: hidemyna.me

PowerShell: системное администрирование и программирование

Всё о PowerShell в Windows и на Linux. Системное администрирование Windows

Test-NetConnection: сканирование открытых/закрытых портов из PowerShell

Test-NetConnection — готовый к использованию командлет для проверки сетевого подключения появился в PowerShell 4.0 (Windows 2012 R2, Windows 8.1 и новее). Этот командлет можно использовать для проверки ответа и доступности удалённого сервера или сетевой службы на нём, портов TCP, заблокированных брандмауэрами, проверки доступности и маршрутизации ICMP. Фактически, командлет Test-NetConnection может заменить сразу несколько стандартных инструментов сетевого администрирования: ping, traceroute, сканер TCP-портов и т. д.

Читайте также:
Кто должен заносить табель в программу

Время от времени любой администратор должен проверять доступность службы на удалённом сервере, проверяя ответ удалённого TCP-порта (например, доступность электронной почты или веб-сервера). Более того, большинство администраторов используют для выполнения такой проверки порта с помощью команды telnet. Например, чтобы убедиться, что служба SMTP отвечает на почтовом сервере (по умолчанию она отвечает на TCP-порту 25), достаточно выполнить команду

telnet mail.site.com 25

Но начиная с Windows 7, клиент telnet стал функцией, которую нужно устанавливать отдельно. Давайте посмотрим, как проверить открытые/закрытые TCP-порты с помощью PowerShell.

Основное преимущество командлета Test-NetConnection заключается в том, что он уже входит в состав всех современных версий Windows, и вам не нужно устанавливать его отдельно. Командлет является частью модуля NetTCPIP (начиная с PoSh v4.0).

Подсказка: вы можете проверить текущую установленную версию PowerShell с помощью команды:

$PSVersionTable.PSVersion

Значение 7 в столбце Major означает, что на вашем компьютере установлена оболочка PowerShell 7.2.

Тестирование открытости/закрытости TCP-портов с помощью Test-NetConnection

Давайте проверим, открыт ли (доступен) TCP-порт 80 (протокол HTTP) на удалённом почтовом сервере, используя Test-NetConnection:

Test-NetConnection -ComputerName hackware-arch -Port 80

Примечание: используя командлет Test-NetConnection, вы можете проверить только подключение к порту TCP, и он не применим для проверки доступности удалённых портов UDP.

Укороченная версия той же команды выглядит так:

TNC hackware-arch -Port 80

Рассмотрим результат выполнения команды:

ComputerName : hackware-arch RemoteAddress : 192.168.0.88 RemotePort : 80 InterfaceAlias : Ethernet SourceAddress : 192.168.0.101 TcpTestSucceeded : True

Как видите, командлет преобразует имя сервера в IP-адрес и проверяет доступность порта TCP. На указанном сервере TCP-порт 80 (RemotePort : 80) открыт (TcpTestSucceeded : True).

Командлет имеет специальный параметр -CommonTCPPort, который позволяет указать имя известного сетевого протокола (HTTP, RDP, SMB, WINRM).

Например, чтобы проверить доступность веб-сервера HTTP, вы можете использовать команду:

Test-NetConnection -ComputerName hackware-arch -CommonTCPPort HTTP

Или открытость порта RDP (3389):

Test-NetConnection ny-rds1 -CommonTCPPort RDP

Вы можете перечислить все параметры, которые возвращает командлет Test-NetConnection:

Test-NetConnection hackware-arch -port 80 | Format-List *

Обратите внимание на строку в выводе:

PingSucceeded : False

Это означает следующее:

  1. Перед проверкой порта командлет пытается выполнить пинг
  2. В данном случае компьютер не ответил на пинг (такое бывает — даже включенные компьютеры не обязаны отвечать на пинг, это можно изменить в настройках файервола)
  3. Даже при неудачном пинге Test-NetConnection всё равно проверяет доступность порта

Если вам нужно только посмотреть, доступен ли порт, его можно проверить быстрее:

TNC hackware-arch -port 80 -InformationLevel Quiet

Командлет вернул True, что означает, что удалённый порт открыт.

Подсказка: в более ранних версиях PowerShell вы могли проверить доступность TCP-порта следующим образом:

Читайте также:
Как полностью удалить программу adobe

(New-Object System.Net.Sockets.TcpClient).Connect(‘hackware-arch’, 80)

В Windows 10/Windows Server 2016 вы можете использовать командлет Test-NetConnection для отслеживания маршрута к удалённому серверу с помощью параметра -TraceRoute (аналог команды tracert в Windows). Параметр -Hops позволяет ограничить максимальное количество хопов (узлов) при проверке маршрута.

Test-NetConnection suip.biz -TraceRoute

Командлет вернул суммарную задержку сети при доступе к серверу в миллисекундах (PingReplyDetails (RTT) : 36 ms) и все IP-адреса маршрутизаторов на пути к целевому серверу.

Test-NetConnection в скриптах мониторинга PowerShell

Следующая команда позволяет вам проверить доступность определённого порта на нескольких серверах, список которых хранится в текстовом файле list_servers.txt (расположен в папке c:PS). Нам нужны серверы, на которые не отвечает указанный сервис:

Get-Content c:PSlist_servers.txt | where < -NOT (Test-Netconnection $_ -Port 25 -InformationLevel Quiet)>| Format-Table -AutoSize

Точно так же вы можете создать простой скрипт мониторинга, который проверяет доступность серверов и отображает уведомление, если один из серверов недоступен.

Например, вы можете проверить доступность базовых служб на всех контроллерах домена (список контроллеров домена можно получить с помощью командлета Get-ADDomainController). Давайте проверим следующие службы на DC (инструмент PortQry имеет аналогичное правило «Domain and trusts»):

  • RPC – TCP/135
  • LDAP – TCP/389
  • LDAP – TCP/3268
  • DNS – TCP/53
  • Kerberos – TCP/88
  • SMB – TCP/445

Скрипт проверит указанные TCP-порты на контроллерах домена, и, если один из портов недоступен, он выделит его красным цветом (вы можете запустить этот скрипт PowerShell как службу Windows).

$Ports = «135»,»389″,»636″,»3268″,»53″,»88″,»445″,»3269″, «80», «443» $AllDCs = Get-ADDomainController -Filter * | Select-Object Hostname,Ipv4address,isGlobalCatalog,Site,Forest,OperatingSystem ForEach($DC in $AllDCs) < Foreach ($P in $Ports)< $check=Test-NetConnection $DC -Port $P -WarningAction SilentlyContinue If ($check.tcpTestSucceeded -eq $true) «> else » -ForegroundColor Red> > >

А это чуть модифицированная версия скрипта, в которой список серверов считывается из файла C:UsersMiAlDocumentslist_servers.txt, а также выводятся имена хостов, чтобы было понятно, чьи именно порты проверяются:

$Ports = «135»,»389″,»636″,»3268″,»53″,»88″,»445″,»3269″, «80», «443» $AllHosts = Get-Content C:UsersMiAlDocumentslist_servers.txt ForEach($Hosts in $AllHosts) < $Hosts Foreach ($P in $Ports)< $check=Test-NetConnection $Hosts -Port $P -WarningAction SilentlyContinue If ($check.tcpTestSucceeded -eq $true) «> else » -ForegroundColor Red> > >

Код скрипта сохранён в файл port_checker.ps1, пример запуска:

C:UsersMiAlDocumentsport_checker.ps1

Простой сканер IP-сетей/портов с помощью PowerShell

Вы также можете реализовать простой сетевой сканер портов и IP-подсетей для сканирования удалённых серверов или подсетей на предмет открытых/закрытых TCP-портов.

Просканируем диапазон IP-адресов в поисках открытого порта 80:

foreach ($ip in 100..150)

А этот пример просканирует диапазон TCP-портов от 1 до 1024 на указанном удалённом сервере:

foreach ($port in 1..1024) >

Скорость проверки, конечно, оставляет желать лучшего.

Test-NetConnection в Linux

На момент написания, в Linux командлет Test-NetConnection отсутствует

Но старый способ проверки открытых портов работает:

(New-Object System.Net.Sockets.TcpClient).Connect(‘suip.biz’, 80)

Источник: pwsh.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru