Сценарий оболочки для ожидания пакета от определенного порта

Я не знаю об ударе мерзавца, но возможно

if [ "$(tr -cd '\r' < file | wc -c)" -gt 0 ]; then
  echo there are CR characters in there
fi

работал бы. Идея быть для не использования текстовых утилит, которые могут рассматривать символы CR и LF особенно.

Если это не работает, то, возможно,

if od -An -tx1 < file | grep -q 0d; then
  echo there are CR characters in there
fi

Сцепляться в находку:

find . -type f -exec sh -c 'od -An -tx1 < "$1" | grep -q 0d' sh {} \; -print
2
16.01.2014, 05:16
2 ответа

Существует сервис, это уже включено с Linux, который обеспечивает эту функцию, это называют xinetd. Red Hat поддерживает довольно хорошую документацию относительно их веб-сайта, названного: 2.6.4. Конфигурационные файлы xinetd. Сервис xinetd позволяет Вам устанавливать основной сервис, который послушает на определенных портах и затем запустит другие приложения, когда связи будут установлены на упомянутых портах.

выборка из xinetd страницы справочника

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

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

После того как это установило Вас конфигурационные файлы места в соответствии с этим каталогом, /etc/xinetd.d. Например, давайте создадим названный сервис minecraft.

# /etc/xinetd.d/minecraft
service minecraft
{
 disable = no
 type = UNLISTED
 socket_type = stream
 protocol = tcp
 wait = no
 server = /path/to/minecraft/server
 bind = <ip of minecraft server>
 port = 25565
 user = root
}

С вышеупомянутым файлом на месте можно затем вручную запустить xinetd проверить вещи.

$ sudo service xinetd start

Теперь, когда Вы пытаетесь соединиться со своей системой через порт 25565, сервер Minecraft должен запустить, и необходимо смочь получить доступ к нему. Вы, возможно, должны были бы корректироваться user = .. строка любому пользователю в конечном счете владеет сервером.

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

Ссылки

5
27.01.2020, 21:54
  • 1
    Кажется, не работает. xinetd услуга работает, но когда я пытаюсь соединиться со своим сервером, ничего не происходит. команда –  Jochem Kuijpers 16.01.2014, 16:47
  • 2
    @JochemKuijpers - я использовал форму этого это вчера вечером для соединения так, я знаю, что подход допустим. Я думаю, что некоторая тонкая настройка conf файла требуется. Подход, подобный моему, упоминается здесь явно для Minecraft, так сравните свою установку с этим сообщением: planetminecraft.com/blog / … –  slm♦ 16.01.2014, 16:53
  • 3
    @JochemKuijpers - является Вашим сервером позади маршрутизатора/переключателя какого-либо вида? Необходимо будет портировать вперед что порт к ПК для этого для работы. –  slm♦ 16.01.2014, 16:54
  • 4
    @JochemKuijpers - Тест, который я выполнил, я устанавливал связи со своим localhost порт 1234, и они становились перенаправленными к другому серверу, который я имею 192.168.1.3 порт 81 на том сервере, и он хорошо работал. –  slm♦ 16.01.2014, 16:55
  • 5
    Можете Вы предоставлять точный сценарий, в котором я нуждаюсь, я думаю, что сделал что-то не так. Мой сервер, работал путем выполнения /server/minecraft/bukkit/start.sh как пользователь minecraft. Сервер работает на локальной сети, но передается от моего маршрутизатора, и я могу соединиться с ним, если это вручную работает. (которым я имею в виду, выполняясь start.sh вручную) Это - IP, и порт на LAN 192.168.2.200:25565. Одновременно не должно быть двух серверов. start.sh запускает программу Java через экран. –  Jochem Kuijpers 16.01.2014, 17:19

netcat

http://linux.die.net/man/1/nc

nc-l 1234 Используя вторую машину, соединитесь с listeningncprocess

nc host.example.com 1234 < echo hello После того, как пакет был передан, соединение закроется автоматически

теперь используйте код возврата. nc-l 1234 && echo someone connected

1
27.01.2020, 21:54

Теги

Похожие вопросы