Прослушивать 60000 портов на Linux-сервере ⇐ Linux
-
Anonymous
Прослушивать 60000 портов на Linux-сервере
У меня проблемы с прослушиванием нескольких портов в Linux. Я хочу прослушивать все порты этого сервера от 20 до 63350. Однако я могу одновременно прослушивать только 4700 портов. Вот как я это сделал.
Как это реализовать? Должен ли я изменить сценарий или настройки сервера? Или мне может потребоваться использовать 13 серверов для прослушивания 60 000 портов.
[*]Я изменил ограничение файлов в Linux, что позволяет мне открывать больше файлов одновременно. ulimit -n 100000 [*]напишите скрипт для прослушивания портов. Я попробовал поточность и многопроцессорность. Но они могут прослушивать максимум 4700 портов. // Когда этот скрипт прослушивает более 4700 портов, появляется ошибка «слишком много открытых файлов». #!usr/bin/python3 импорт сокета импорт потоков хост = '' стартовый_порт = 10 конечный_порт = 2010 защита port_listen (порт): s = сокет.сокет(сокет.AF_INET, сокет.SOCK_STREAM) пытаться: s.bind((хост, порт)) print(f'bound Success(port: {port})') с.слушать (2000) кроме исключения как e: print(f'не удалось привязать(порт: {порт})\nerror msg: {e}') пока правда: конн, адрес = s.accept() конн.закрыть() темы = [] для порта в диапазоне (start_port, end_port): поток = threading.Thread(цель = port_listen, args=(порт,)) threads.append(поток) поток.start() для темы в темах: нить. Присоединиться() // Когда этот скрипт прослушивает более 1000 портов, сервер выходит из строя из-за чрезвычайно высокого потребления процессора и памяти. Сообщение об ошибке: «Невозможно запустить новый процесс». #!usr/bin/python3 импорт сокета импорт многопроцессорной обработки хост = '' стартовый_порт = 23 конечный_порт = 50 защита прослушивания (порт): s = сокет.сокет(сокет.AF_INET, сокет.SOCK_STREAM) пытаться: s.bind((хост, порт)) с.слушать(100) кроме исключения как e: print(f"не удалось привязать порт {port}: {e}") возвращаться пока правда: конн, адрес = s.accept() print(f"{порт} подключен!") конн.закрыть() процессы = [] для порта в диапазоне (start_port, end_port + 1): процесс = multiprocessing.Process(цель = прослушивание, args = (порт,)) процессы.append(процесс) процесс.start() для процесса в процессах: процесс. Присоединиться()
У меня проблемы с прослушиванием нескольких портов в Linux. Я хочу прослушивать все порты этого сервера от 20 до 63350. Однако я могу одновременно прослушивать только 4700 портов. Вот как я это сделал.
Как это реализовать? Должен ли я изменить сценарий или настройки сервера? Или мне может потребоваться использовать 13 серверов для прослушивания 60 000 портов.
[*]Я изменил ограничение файлов в Linux, что позволяет мне открывать больше файлов одновременно. ulimit -n 100000 [*]напишите скрипт для прослушивания портов. Я попробовал поточность и многопроцессорность. Но они могут прослушивать максимум 4700 портов. // Когда этот скрипт прослушивает более 4700 портов, появляется ошибка «слишком много открытых файлов». #!usr/bin/python3 импорт сокета импорт потоков хост = '' стартовый_порт = 10 конечный_порт = 2010 защита port_listen (порт): s = сокет.сокет(сокет.AF_INET, сокет.SOCK_STREAM) пытаться: s.bind((хост, порт)) print(f'bound Success(port: {port})') с.слушать (2000) кроме исключения как e: print(f'не удалось привязать(порт: {порт})\nerror msg: {e}') пока правда: конн, адрес = s.accept() конн.закрыть() темы = [] для порта в диапазоне (start_port, end_port): поток = threading.Thread(цель = port_listen, args=(порт,)) threads.append(поток) поток.start() для темы в темах: нить. Присоединиться() // Когда этот скрипт прослушивает более 1000 портов, сервер выходит из строя из-за чрезвычайно высокого потребления процессора и памяти. Сообщение об ошибке: «Невозможно запустить новый процесс». #!usr/bin/python3 импорт сокета импорт многопроцессорной обработки хост = '' стартовый_порт = 23 конечный_порт = 50 защита прослушивания (порт): s = сокет.сокет(сокет.AF_INET, сокет.SOCK_STREAM) пытаться: s.bind((хост, порт)) с.слушать(100) кроме исключения как e: print(f"не удалось привязать порт {port}: {e}") возвращаться пока правда: конн, адрес = s.accept() print(f"{порт} подключен!") конн.закрыть() процессы = [] для порта в диапазоне (start_port, end_port + 1): процесс = multiprocessing.Process(цель = прослушивание, args = (порт,)) процессы.append(процесс) процесс.start() для процесса в процессах: процесс. Присоединиться()
Мобильная версия