Разное

Как освободить порт: Как освободить занятый порт с командной строки? | by Oleksandr Fesenko | OS X Tips & Tricks

08.06.2023

linux — Как в Debian освободить порт если fuser -k номер/tcp не помогает?

Вопрос задан

Изменён 3 года назад

Просмотрен 478 раз

Во время разработки сервера, его приходится часто включать/выключать. Естественно порт освобождается не сразу и сервер не стартует из-а 98-й ошибки EADDRINUSE. Я не хочу использовать SO_REUSEADDR на сокете, просто нужно жёстко закрывать порт и запускать сервер не смотрия ни та что.

fuser -k номер/tcp вроде отрабатывает, но ошибка всё равно остаётся какое-то время, в процессах сервер не висит — закрывается корректно.

Как освободить порт в этом случае?

  • linux
  • tcp
  • port

7

Как и бывает в большинстве подобных случаев, проблема оказалась в другом. ..

Разрабатываемый сервер осуществляет коммуникацию с клиентами по WebSocket. Закрытие соединения WebSocket предусматривает обмен закрывающими фреймами. Я тестировал парсинг WS-фрейма, но до корректной обработки закрытия руки не дошли (не отвечал клиенту должным образом и не вычитывал его closure запрос) — в результате сервер то закрывался, а на TCP по этому порту висели данные, отправленные клиентом в пустоту — то ли ping, то ли close запрос. Система не теряла надежды, что их кто-нибудь подберёт, и держала порт…

Как только клиент (в данном эксперименте браузер Firefox) стал получать ответ о закрытии, он корректно отключался, а при перезапуске сервера тот стартовал моментально на том же порте без

SO_REUSEADDR, ошибка 88 более не возникала.

Да, решение не является ответом по изначальной тематике вопроса, но пусть оно служит памяткой для подобный проблем — всегда проверять корректность завершения сеанса связи в разрабатываемых приложениях.

Иногда помогает закрытие сокета извне через ss -K https://unix. stackexchange.com/a/511691/43898 но это в случае если программа не висит в блокировке ввода-вывода.

3

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Как найти и закрыть открытый порт в linux

Итак, вы являетесь сетевым администратором, и у вас есть несколько машин Linux в вашей сети или дата-центре. Вы обнаружили странный трафик и вам требуется его определить. Возможно ли, что трафик использует открытый порт на машине? Если так, где находится порт и как вы его закроете?

На машинах с Linux эта задача на самом деле довольно проста. Я хочу показать вам, как найти открытый порт и закрыть его. Я буду демонстрировать на Ubuntu Server 18.04, хотя процесс будет схожим во многих дистрибутивах, единственное отличие будет в том, как закрыть порт.

Как найти открытый порт

К счастью, вам не нужно устанавливать какое-либо программное обеспечение, чтобы сделать эту работу. Почему? Потому что мы будем использовать команду ss (так как netstat устарел) для просмотра портов прослушивания на вашем сервере. Это будет сделано полностью из командной строки, поэтому либо войдите на свой сервер, либо используйте безопасную оболочку для доступа. Когда вы получите приглашение bash, введите команду:

sudo ss -tulwn | grep LISTEN

Возможны следующие варианты:

-t Показать только сокеты TCP в Linux
-u Показать только сокеты UDP в Linux
-l Показать прослушивающие сокеты (например, TCP-порт 22 открыт SSHD-сервером)
-p Список имен процессов, которые открывали сокеты
-n Не разрешать имена сервисов

Вывод команды будет перечислять только прослушиваемые порты.

Наши открытые порты

Как видите, на этой машине имеется только несколько открытых портов (53, 22, 631, 445, 3306, 11211, 80, 8080).

Если вы не уверены, какой порт соответствует какой службе, вы всегда можете узнать это в файле /etc/services. Прочитайте этот файл с помощью команды:

less /etc/services

Вы должны увидеть список всех портов, доступных для Linux.

Какой порт linux соответствует какой службе

Как закрыть порт

Скажем, вы размещаете веб-сервер на компьютере, но не хотите прослушивать порт 8080. Вместо этого вы хотите, чтобы трафик проходил только через порты 80 (HTTP) и 443 (HTTPS). Чтобы закрыть порт 8080, мы будем использовать команду ufw (Uncomplicated FireWall) следующим образом:

sudo ufw deny 8080

Вы должны увидеть, что правила были обновлены, а порт заблокирован. Если вы обнаружите, что блокирование этого порта вызывает проблемы со службой или приложением, вы можете снова открыть его с помощью команды:

sudo ufw allow 8080

И это все, что нужно для поиска и закрытия открытого порта на Ubuntu. Этот процесс должен работать в большинстве дистрибутивов, единственное предостережение — как вы блокируете порт, так как не каждый дистрибутив использует ufw. Если выбранный вами дистрибутив использует другую команду для блокировки портов (например, sudo iptables -A INPUT -p tcp —destination-port 80 -j DROP), убедитесь, что вы знаете, как выполнить эту задачу на своем сервере.

Источник: techrepublic

Рубрики Безопасность

окон. Как освободить порт, открытый мертвым процессом?

Задавать вопрос

спросил

Изменено 4 года, 10 месяцев назад

Просмотрено 234 тысячи раз

Мой коллега недавно столкнулся с проблемой, когда процесс, который предположительно умер, все еще был привязан к сетевому порту, что не позволяло другим процессам привязываться к этому порту.

В частности, netstat -a -b сообщал, что процесс с именем System с PID 4476 имеет открытый порт 60001, за исключением того, что никакого процесса с PID 4476 не существовало, по крайней мере, насколько я мог судить.

Process Explorer и диспетчер задач не отображали PID 4476 (хотя был еще один процесс с именем System с PID 4, у которого был собственный набор TCP-соединений, не включающий 60001). taskkill /PID 4476 также сообщил, что PID 4476 не может быть найден.

Есть ли способ убить этот таинственный системный процесс, чтобы освободить порт, к которому он в настоящее время привязан? Что может привести к этому? Как могут быть процессы, о которых не знает ни Диспетчер задач, ни Process Explorer, ни тасккилл? Перезагрузка помогла решить проблему, но я хотел бы знать, есть ли способ исправить это без перезагрузки.

  • окна
  • порт
  • процесс
  • зомби

3

Я знаю, что это старый поток, но на случай, если у кого-то еще возникнет такая же проблема, у меня было. ..

Возможно, у вашего процесса был открыт TCP-порт при сбое или он вышел без явного закрытия это. Обычно ОС очищает такие вещи, но только когда запись процесса исчезает. Хотя может показаться, что процесс больше не работает, есть по крайней мере одна вещь, которая может вести его запись, чтобы предотвратить повторное использование его PID. Это наличие дочернего процесса, который не отделен от родителя.

Если ваша программа порождала какие-либо процессы во время работы, попробуйте их убить. Это должно привести к освобождению записи процесса и очистке TCP-порта. По-видимому, Windows делает это, когда запись освобождается, а не когда процесс завершается, как я ожидал.

5

Открыть командную строку от имени администратора

  1. C:\WINDOWS\system32>netstat -ano | адрес: 7895

*** Повторяйте шаг 2, пока не останется дочерний процесс

  1. C:\WINDOWS\system32>процесс wmic, где (ParentProcessId=1091) получить Caption,ProcessId

    Заголовок ProcessId

    cmd. exe 1328

2.а. C:\WINDOWS\system32>процесс wmic, где (ParentProcessId=1328) получить Заголовок, идентификатор процесса

 Заголовок, идентификатор процесса
  conhost.exe 1128
 

2.б. повторяйте это до тех пор, пока не будут найдены другие дочерние процессы

— Затем убейте все дочерние процессы

  1. C:\WINDOWS\system32>taskkill /F /PID 1128 УСПЕХ: процесс с PID 9500 был прекращен.

2

Пробовали ли вы использовать TCPView и закрыть соединение? Я не знаю, покажет ли это связь в сценарии, который вы описываете, потому что со мной такого никогда не случалось. Но это единственное, о чем я могу думать, если это произойдет снова.

Каков был процесс — это было коммерческое программное обеспечение или что-то доморощенное? Судя по всему, порт 60001 используется некоторыми троянами — интересно, это мог быть руткит или что-то, что могло скрыться от ОС? Возможно, вы захотите осмотреть эту машину с помощью AV, может быть, что-то с загрузочного носителя.

2

Я сталкивался с той же проблемой ранее, команда netstat -a -n windows дала мне список открытых портов с идентификатором процесса. Из этого я взял номер порта, который я хотел закрыть соединение, а затем я закрыл это соединение с помощью программного обеспечения TCPView. Это сработало для меня.

Если вы пользователь Windows, выполните следующие действия. Шаг 1. Перейдите по этому пути: Панель управления\Все элементы панели управления\Инструменты администрирования

Шаг 2: Нажмите на службы

Шаг 3: Остановите нежелательные службы, работающие на нужном порту.

пс -эф | grep имя процесса

убить связанные процессы

kill -9 pid pid

В моем случае сработало

1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

linux — Освобождение порта TCP/IP?

спросил

Изменено 11 месяцев назад

Просмотрено 415 тысяч раз

Закрыто. Этот вопрос не соответствует правилам переполнения стека. В настоящее время ответы не принимаются.


Похоже, что этот вопрос не касается конкретной проблемы программирования, программного алгоритма или программных инструментов, которые в основном используются программистами. Если вы считаете, что вопрос будет актуален на другом сайте Stack Exchange, вы можете оставить комментарий, чтобы объяснить, где на этот вопрос можно ответить.

Закрыта в прошлом году.

Сообщество рассматривало возможность повторного открытия этого вопроса в прошлом году и оставило его закрытым:

Первоначальная причина (причины) закрытия не была устранена

Улучшить этот вопрос

нетстат-тулнап показывает мне, какие порты используются. Как освободить порт в Linux?

  • linux
  • сеть
  • tcp
  • порт

Как уже говорили другие, вам придется убить все процессы, которые прослушивают этот порт. Самый простой способ сделать это — использовать fuser(1) команда. Например, чтобы увидеть все процессы, прослушивающие HTTP-запросы на порту 80 (запустите как root или используйте sudo ):

 # fuser 80/tcp
 

Если вы хотите их убить, то просто добавьте опцию -k .

4

Чтобы убить определенный порт в Linux, используйте следующую команду:

 sudo fuser -k Port_Number/tcp
 

замените Port_Number на занятый вами порт.

1

В типе терминала:

netstat -anp|grep "номер_порта"

Он покажет детали порта. Перейти к последнему столбцу. Он будет в этом формате. Например: — PID/java

затем выполните:

kill -9 PID

Для MAC:

 lsof -n -i :'номер-порта' | grep СЛУШАТЬ
 

Пример ответа:

 java 4744 (PID) test 364u IP0 asdasdasda 0t0 TCP *:номер порта (LISTEN)
 

, а затем выполните:

 kill -9 PID
 

Работал на Macbook

3

Для проверки всех портов:

 netstat -lnp
 

Чтобы закрыть открытый порт:

 fuser -k port_no/tcp
 

Пример:

 fuser -k 8080/tcp
 

В обоих случаях при необходимости вы можете использовать команду sudo .

2

Можно использовать tcpkill (часть пакета dsniff ), чтобы разорвать соединение с нужным портом:

 sudo tcpkill -9 port PORT_NUMBER
 

1

Команда "netstat --programs" предоставит вам информацию о процессе, если вы являетесь пользователем root . Тогда вам придется убить «нарушающий» процесс, который вполне может запуститься снова, просто чтобы вас раздражать.

В зависимости от того, что вы на самом деле пытаетесь достижения, решения этой проблемы будут различаться в зависимости от процессов, удерживающих эти порты. Например, вам может потребоваться отключить службы (при условии, что они не нужны) или настроить их для использования другого порта (если они вам нужны, но вам нужен этот порт больше).

Завершить процесс, прослушивающий данный порт. Я считаю, что netstat показывает вам идентификаторы процессов.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *