Бывают ситуации, когда нам необходимо проверить видимость TCP портов одной машины для другой. Казалось бы всё просто - telnet. А если на серверной машине еще не установлено или не запущено приложение, слушающее нужный порт? Я уверен, что существует масса способов, но мне было проще написать 2 маленьких скрипта на Python.
Один скрипт - сервер. Слушает заданный порт и пишет в консоль информацию о клиентах. А второй - клиентский скрипт - стучится по заданному IP в заданный порт и возвращает ответ от сервера (если порт доступен).
Серверный скрипт.
Запуск. Копируем в текстовый файл вышенаписанный код и запускаем:
python server.py <port>
Клиентский скрипт.
Запуск. Копируем в текстовый файл вышенаписанный код и запускаем:
python client.py <server_IP> <server_port>
Один скрипт - сервер. Слушает заданный порт и пишет в консоль информацию о клиентах. А второй - клиентский скрипт - стучится по заданному IP в заданный порт и возвращает ответ от сервера (если порт доступен).
Серверный скрипт.
#!/usr/bin/env python import socket, sys # Server address and buffer size TCP_IP = '0.0.0.0' BUFFER_SIZE = 1024 # Usage string usage = "server.py PORT" # Check number of arguments and print usage if not enough arguments if (len(sys.argv) < 2): print(usage) sys.exit(0) TCP_PORT = int(sys.argv[1]) # Create socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((TCP_IP, TCP_PORT)) s.listen(1) # Listen for client connection until Ctrl+C will be pressed while 1: c = s.accept() cli_sock, cli_addr = c cli_sock.send("Hello, person from %s"%(str(cli_addr))) cli_sock.close() print("received data from:", str(cli_addr))
Запуск. Копируем в текстовый файл вышенаписанный код и запускаем:
python server.py <port>
Клиентский скрипт.
#!/usr/bin/env python import socket, sys usage = "client.py IP PORT" # Check number of arguments and print usage if not enough arguments if (len(sys.argv) < 3): print(usage) sys.exit(0) TCP_IP = sys.argv[1] TCP_PORT = int(sys.argv[2]) BUFFER_SIZE = 1024 # Create socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((TCP_IP, TCP_PORT)) # Recieving response from the server data = s.recv(BUFFER_SIZE) s.close() print("received data:", data)
Запуск. Копируем в текстовый файл вышенаписанный код и запускаем:
python client.py <server_IP> <server_port>