Я довольно широко искал это, но, похоже, не смог найти работающего примера.
Моя цель — отслеживать 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
Это означает следующее:
- Перед проверкой порта командлет пытается выполнить пинг
- В данном случае компьютер не ответил на пинг (такое бывает — даже включенные компьютеры не обязаны отвечать на пинг, это можно изменить в настройках файервола)
- Даже при неудачном пинге Test-NetConnection всё равно проверяет доступность порта
Если вам нужно только посмотреть, доступен ли порт, его можно проверить быстрее:
TNC hackware-arch -port 80 -InformationLevel Quiet
Командлет вернул True, что означает, что удалённый порт открыт.
Подсказка: в более ранних версиях PowerShell вы могли проверить доступность TCP-порта следующим образом:
(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