Вопрос или проблема
Есть ли какой-то базовый инструмент для открытия конкретного сетевого TCP порта на моем компьютере?
Мне нужно протестировать, как моя программа обрабатывает порты в состоянии прослушивания.
netcat должен сделать то, что вам нужно. Запустите его на вашем компьютере и чтобы он эхом возвращал данные в STDOUT:
nc -4 -k -l -v localhost 1026
Когда вы хотите, чтобы он закрылся по окончании соединения, не используйте -k
У вас есть
TCP Listen: http://www.allscoop.com/tcp-listen.php
Port Peeker: http://www.linklogger.com/portpeeker.htm
Командная утилита Microsoft Portqry.exe
Попробуйте iperf. Существует версия для Windows. Вы можете просто запустить ее как iperf -s -p 1234
, и она будет слушать на порту 1234. Затем вы можете подключиться к этому порту с удаленной машины, сделав что-то вроде:
telnet 192.168.1.1 1234
iperf -c 192.168.1.1 1234
portqry -n 192.168.1.1 -e 1234
Вам нужно будет получить iperf.exe
или portqry.exe
для последних двух. iPerf не строго предназначен для этой задачи, но он отлично подходит для устранения неполадок с подключением, доступностью пропускной способности, стресстестирования каналов и т. д.
Похоже, что эта утилита сделает именно то, что вам нужно, даже отображая полученные данные, если хотите: http://www.drk.com.ar/builder.php
У него есть графический интерфейс, а не только командная строка, что является преимуществом для некоторых.
Мне нравится netcat в Windows, но скачать и установить что-то из Интернета не всегда возможно. Может быть, вы настраиваете производственный сервер и хотите протестировать свои правила брандмауэра до (и без) установки чего-либо.
Большинство (все?) серверов на Windows имеют компилятор JScript.net. Вы можете вставить в Блокнот этот старый файл пакетных команд Windows, который также является допустимой программой JScript.net, полиго́тной программой.
Кратко
- Скопируйте и вставьте этот фрагмент в файл с именем polyglot-listener.bat на вашем сервере
- введите
polyglot-listener.bat 1234
в командной строке, чтобы слушать на порту1234
.
Больше деталей
Идея заключается в том, чтобы найти исполняемый файл jsc.exe
на вашей системе:
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do (
set "jsc=%%v"
)
И использовать его для компиляции файла пакетных команд.
"!jsc!" /nologo /out:"%APPDATA%\listener.exe" "%~dpsfnx0"
Файл пакетных команд содержит основной код JScript.Net, который создает синхронный сокет, слушает на нем, принимает соединение и сбрасывает все, что к нему приходит:
listener.Bind(localEndPoint);
listener.Listen(10);
// Начать прослушивание соединений.
while (true) {
var data:byte[] = new byte[1024];
Console.WriteLine("Ожидание TCP соединения на {0}:{1}...", ipAddress, port);
var handler = listener.Accept();
Console.WriteLine("Подключено к {0}", handler.RemoteEndPoint);
try {
// Входящее соединение нужно обработать.
while (handler.Receive(data) > 0);
} finally {
Console.WriteLine("Отключено\n");
}
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
Скомпилированная программа будет сохранена как %APPDATA%\listener.exe
. Она может работать автономно, если скопирована на любой сервер, но вставка в Блокнот и компиляция в момент выполнения из полиго́тного пакетного файла будут работать независимо от любых препятствий безопасности на вашем пути.
Инструменты netpipes faucet и hose всегда хорошо служили мне, упрощая stdin
и stdout
для использования моими программами по сети.
Похожи на netcat.
Описание для Ubuntu:
Пакет netpipes делает TCP/IP потоки пригодными для использовании в оболочках. Он может также упростить клиентский/серверный код, позволяя программисту пропустить все утомительные программные моменты, связанные с сокетами и сосредоточиться на написании фильтра или другой службы.
ПРИМЕРЫ
Это создает TCP-IP сокет на локальном компьютере, привязанный к порту 3000.
example$ faucet 3000 --out --verbose tar -cf - .
Каждый раз, когда какой-либо процесс (с любого компьютера) пытается подключиться к порту 3000 на этом компьютере, программа faucet создаст новый процесс, и дочерний
выполнит команду
tar -cf - .
Если у вас установлен Python, вы можете просто вставить следующее в оболочку Python:
Для того, чтобы просто открыть порт без вывода входящих данных (например, для отладки сети и проверки возможности подключения к порту):
import socket
ip = '0.0.0.0'
port = 1337
while True:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((ip, port))
s.listen(1)
print(s.accept())
Если вы также хотите выводить данные, отправленные на соединение:
import socket
from threading import Thread
ip = '0.0.0.0'
port = 1337
def print_connection_input(conn, addr):
print('Новое соединение от', addr)
while True:
print(str(conn.recv(64), "utf-8"), end='')
while True:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((ip, port))
s.listen(1)
conn, addr = s.accept()
Thread(target=print_connection_input, args=(conn, addr)).start()
ip = '0.0.0.0'
будет слушать на всех интерфейсах. Вы также можете использовать конкретный IP, если хотите слушать только на одном интерфейсе.
TCP Listen – ЛУЧШИЙ ответ, на мой взгляд. Я посмотрел и мне понравился TCP Builder, но вам НУЖНЫ права администратора, чтобы запустить это приложение, в то время как TCP Listener не требует их, и вам также нужно установить TCP Builder, или распаковать и скопировать кучу файлов, тогда как TCP Listener – это всего лишь 1 EXE, ничего больше.
TCP Listener также не нуждался в правах администратора, и когда я отсканировал его антивирусом, ничего не показало, что это вредоносное ПО. У Builder один антивирус на Virustotal сказал, что это плохо, но оказалось, что это ложный срабатывание (надеюсь) 🙂
Хотя я заставил Builder работать без прав администратора, он не мог обрабатывать сокет, тогда как Listener мог. Как только я завершил все свои тесты, я просто удалил 1 файл Listener, и все вернулось в исходное состояние.
Netcat был бы неплох, но я не нашел версии, которая бы работала с сервером 2012 или более поздней версии. Поэтому, чтобы полностью протестировать, позволяют ли сетевой файрвол и локальные файрволы подключаться к определенным TCP портам, TCP Listener кажется лучшим инструментом для этой задачи.
Наслаждайтесь!
Вы можете использовать версию netcat для Windows:
nc -l -v localhost -p 7
Просто используйте встроенный инструмент Windows “netsh” и укажите на уже прослушиваемый порт
C:\WINDOWS\system32>netsh interface portproxy add v4tov4 listenport=1234 listenaddress=0.0.0.0 connectport=8080 connectaddress=192.168.1.99
C:\WINDOWS\system32>netsh interface portproxy show all
Быстрый скрипт PowerShell для запуска процесса, который просто слушает на порту.
$port = 8080 #установите здесь желаемый порт $job = Start-Job -ScriptBlock { param ($port) $listener = New-Object System.Net.Sockets.TcpListener([System.Net.IPAddress]::Any, $port) $listener.Start() while ($true) { if ($listener.Pending()) { $client = $listener.AcceptTcpClient() Write-Host "Соединение принято." $client.Close() } Start-Sleep -Milliseconds 100 } } -Name "test_port_$port" -ArgumentList $port Write-Host "Прослушивание порта $port..." echo '' echo $job echo '' Read-Host "Нажмите ENTER, чтобы остановить прослушиватель..." Write-Host "Остановка прослушивателя..." stop-Job $job remove-Job $job
Вы также можете просто запустить задачу и остановить ее по идентификатору или имени.
Это идеальное применение для Wireshark, анализатора пакетов и протоколов, который находится между стеком сетевого взаимодействия Windows/Linux.
Он позволит вам увидеть все TCP/UDP пакеты, полученные вашим компьютером, независимо от порта. Вы также можете указать программе фильтровать только пакеты, отправленные через определенный порт для дальнейшего анализа. Преимущество Wireshark в том, что он предоставляет очень подробные сообщения для каждого пакета – источник, назначение, порт, MAC-адреса, данные, даты, контрольные суммы и т. д. Очень полезный (и бесплатный!) инструмент.
TCPView из набора инструментов Sysinternals предоставляет очень хороший обзор.
Ответ или решение
Утилиты для открытия TCP порта в режиме ожидания
Для тестирования вашей программы, которая работает с портами, находящимися в состоянии ожидания (listening), существует несколько доступных и эффективных утилит. Выбор утилиты может зависеть от ваших конкретных требований, наличия прав на установку программного обеспечения и операционной системы, которую вы используете.
1. Netcat (nc)
Netcat – это мощная утилита, которая позволяет не только открывать порты, но и выполнять множество других сетевых операций, включая отправку и получение данных. Для открытия TCP порта и ожидания подключения выполните следующую команду:
nc -4 -k -l -v localhost 1026
-4
– использовать IPv4.-k
– продолжать слушать после завершения соединения.-l
– слушать входящие соединения.-v
– выводить дополнительную информацию о процессе.
Если вы не хотите, чтобы Netcat продолжал ждать новых соединений после завершения текущего, просто уберите -k
.
2. iPerf
iPerf – это инструмент, который обычно используется для тестирования пропускной способности сети. Вы можете запустить его в серверном режиме, чтобы слушать на определённом порту. Используйте следующую команду:
iperf -s -p 1234
Затем вы можете подключиться к этому порту с другого устройства с помощью:
iperf -c [ваш_IP] -p 1234
3. Python
Если у вас установлен Python, вы можете использовать его встроенные библиотеки для создания простого TCP-сервера. Вот пример кода, который открывает порт и принимает подключения:
import socket
ip = '0.0.0.0'
port = 1337
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((ip, port))
s.listen(1)
print(f"Listening on {ip}:{port}")
while True:
conn, addr = s.accept()
print(f"Connection from {addr}")
conn.close()
Этот код будет принимать одно подключение за раз и выводить IP-адрес клиента.
4. PowerShell
Для пользователей Windows PowerShell предлагает удобный способ для создания слушателя. Вот пример PowerShell скрипта:
$port = 8080
$listener = New-Object System.Net.Sockets.TcpListener([System.Net.IPAddress]::Any, $port)
$listener.Start()
Write-Host "Listening on port $port..."
while ($true) {
if ($listener.Pending()) {
$client = $listener.AcceptTcpClient()
Write-Host "Connection accepted from $($client.Client.RemoteEndPoint)"
$client.Close()
}
Start-Sleep -Milliseconds 100
}
5. TCP Listener
TCP Listener – это простое приложение, которое позволяет легко открывать порты без необходимости в установке дополнительных утилит. Оно не требует административных прав и подходит для серверов, где политики безопасности ограничивают установку стороннего ПО.
Заключение
Выбор утилиты для открытия TCP порта и работы в режиме ожидания зависит от вашего окружения и требований. Утилиты, такие как Netcat и iPerf, предлагают многофункциональность и простоту в использовании, тогда как программные решения на Python или PowerShell могут быть более подходящими в средах, где установка сторонних утилит невозможна. В любом случае, эти инструменты помогут вам протестировать, как ваша программа обрабатывает подключения к TCP-портам.