Утилита для открытия TCP порта в режиме прослушивания

Вопрос или проблема

Есть ли какой-то базовый инструмент для открытия конкретного сетевого 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, полиго́тной программой.

Кратко

Больше деталей

Идея заключается в том, чтобы найти исполняемый файл 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-портам.

Оцените материал
Добавить комментарий

Капча загружается...