LINUX.ORG.RU

Сообщения Hart

 

Узнать идет ли трафик с порта удаленного сервера.

Есть сервер, который (вроде)посылает через свой 1001 порт данные, через ser2net. (serial data over tcp).

На хосте (deb10) нужно эти данные ловить и обрабатывать. С этим проблемы.

Есть ли возможность узнать поступают ли какие либо данные с 1001 порта сервера? (ip: 10.10.30.30).

P.s. Доступа к серверу нет.

 , ,

Hart ()

Пробросить последовательный порт

Есть удаленный сервер, который на свой 1001 порт через ser2net пришет данные с датчика.

На клиенте я читаю эти данные с помощью socat или evesecli. Т.е. создаю виртуальный serial порт, в который пишу считанные с 1001 порта сервера данные. Пусть виртуальный порт = ttyV0. Так вот, мне нужно данные с ttyV0 считать.

Для начала пытаюсь счесть это с помощью mincom. Но он циклически выдает

Port already in use
Port already in use
Port already in use
Port already in use
Port already in use

Еще раз, что я делаю на стороне клиента: Либо это:

socat  pty,link=/dev/ttyV0,raw,waitslave  tcp:10.24.8.11:1001&

либо это:

evesecli add --virtual /dev/ttyV0 client --remote 10.24.8.11:1001
evesecli start /dev/ttyV0

(Результат одинаковый и тут, и там : Port already in use).

Вопрос: Как считать данные c ttyV0??? (я в отчаянии)

 

Hart ()

Перенаправить траффик с tcp порта сервера на tcp порт хоста

Ситуация:

Сервер. Есть сервер на Win, который посылает на свой 1001 порт данные с датчика. Делает он это с помощью ser2net. С сервером все.

Хост. Хост - Debian 10. На нем в wine запущена прога, куда нужно передавать данные с 1001 tcp порта сервера, предварительно проброшенные в виртуальный последовательный (COM) порт. Т.е. хост принимает данные с сервера, пишет их в vCOM порт, и прога в wine читает все это дело.

Проблема: Считать данные с tcp порта сервера и записать их в vCOM.

Возможное решение: Как решение есть следующая идея: привязать виртуальный COM порт хоста к, например, 1000 tcp порту хоста же с помощью ser2net. Тогда данные, передаваемые на порт 1000 хоста будут автоматом конвертироваться в serial data. То, что нужно. Но есть затык: КАК сделать так, чтобы данные с 1001 порта сервера пересылались на 1000 порт хоста?

Собственно вопрос:

Как перенаправить траффик с tcp порта сервера на tcp порт хоста?

P.S. На сервер влиять невозможно.

P.S.S. Пытался использовать socat.

socat pty,link=/dev/ttyV0,raw,waitslave tcp:10.10.30.30:1001&

Эта вещь вроде как соединение с портом сервера устанавливает, но при попытке подключения/чтения данных с ttyV0 либо: | Если запущено от user = разрывает соединение | Если запущено от root = пишет, что порт занят другим процессом.

 , , ,

Hart ()

Создать и настроить Virtual Serial Port

Суть: Есть сервер на win, на котором запущено приложение, которое через ser2net посылает данные на 1010 порт.

На Linux (Debian10) через wine запущено другое приложение, которое должно принимать эти данные. Для этого нужно вне wine создать виртуальный serial порт, который будет принимать данные с 1010 порта сервера + эти данные будут читаться программой, запущенной в wine.

Что я делал: Пытался создать COM порт через socat

socat  pty,link=/dev/comV0,raw  tcp:10.10.10.10:1010

Проблема в том, что данное соединение через секунду разрывается.

Это

socat  pty,link=/dev/comV0,raw,waitslave  tcp:10.10.10.10:1010

уже так быстро не разрывается, но при попытке подключения к нему пишет, что порт занят, и соединение разрывается.

Вопрос: Как быть?

 , ,

Hart ()

Проблема с поиском файлов с помощью find

Добрый день. Задача: найти все файлы в определенной директории, расположенной в root. (используется в программке одной…)

Для этого использовал команду find.

Выглядит это примерно так:

find . -path  './Layer/host/*' -type f

Одна проблема - работает только тогда, когда я в руте.

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

Попытался решить таким образом

find . -path '/Layer/host/*' -type f

Запускается, но вывод пуст.

Что делать??

 , ,

Hart ()

Подключиться к unix-сокету через bash

Есть небольшой сервер, который принимает соединение по сокету и выводит переданное сообщение. Вот:


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
    int sock, listener;
    struct sockaddr_in addr;
    char buf[1024];
    int bytes_read;

    listener = socket(AF_INET, SOCK_STREAM, 0);
    if(listener < 0)
    {
        perror("socket");
        exit(1);
    }
    
    addr.sin_family = AF_INET;
    addr.sin_port = htons(3210);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    if(bind(listener, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
        perror("bind");
        exit(2);
    }

    listen(listener, 1);
    
    while(1)
    {
        sock = accept(listener, NULL, NULL);
        if(sock < 0)
        {
            perror("accept");
            exit(3);
        }

        while(1)
        {
            bytes_read = recv(sock, buf, 1024, 0);
            if(bytes_read <= 0) break;
            printf(buf);
            send(sock, buf, bytes_read, 0);
        }
    
        close(sock);
    }
    
    return 0;
}

Сокет, вроде как, даже открывается:

State      Recv-Q Send-Q Local Address:Port          Peer Address:Port  Process 

LISTEN     0      1            0.0.0.0:3210               0.0.0.0:*             

Я сделал подобный скрипт, но видимо это совершенно не то, что нужно:

 exec 4</dev/tcp/0.0.0.0/3210
 echo -ne "Message" >&4

Как быть?

 , , ,

Hart ()

Автозагрузка скрипта после запуска X11

Есть иксы, есть скрипт. Или программа. Нужно эту вещь запусть при запуске сервера иксов.

По идее, нужно отредактировать файл /etc/X11/xinit/xinitrc Собственно, что я и сделал.

#!/bin/sh

# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit #(startx)

# invoke global X session script
. /etc/X11/Xsession

exec /usr/bin/reboot_alert &

Программка запускает окошечко с сообщением на gtk.

Так вот. После перезагрузки - ничего. Как быть?

 , , , ,

Hart ()

Невозможно запустить приложение в X11 (xhost: unable to open display ":0")

Есть хост, есть сервер. На хосте лежит программка reboot_alert. Программка reboot_alert представляет собой окошечко с кнопкой на gtk, которое выводит сообщение.

reboot_alert запускается с помощью скрипта.

Вот, собственно, скрипт:

#!/bin/bash

dsp=$(who | grep -oE "\(:.\)" | grep -oE ":." | head -n 1)

$(DISPLAY=${dsp} /home/user/reboot_alert "Сейчас кто-то перезагрузится")
exit_code=$?

if [ "${exit_code}" == "0" ]; then
	shutdown -r
fi

exit 1

Если запускать скрипт с хоста, проблем не возникает. Все работает.

Другое дело, если программа запускается с сервера (на хосте). Вылезает ошибка:

No protocol specified
Unable to init server: Не удалось подключиться к: В соединении отказано

(reboot_alert:2112): Gtk-[1;33mWARNING[0m **: [34m22:40:15.683[0m: cannot open display: :0

Ok. Ошибка, вроде, типичная. Гуглю. После чего, ради избавления от ошибки, было решено использовать xhost +. (Знаю, что нехорошо, но пока хотя бы так). Но так как сервер запускает скрипт явно не в иксах, то была явно указана переменная DISPLAY: export DISPLAY:=0. (В идеале активный DISPLAY должен определяться в скрипте, но в данном случае я точно знаю, что на хосте активен display :0).

Для проверки, что эта конструкция работает, был написан скрипт:

#!/bin/bash
DISPLAY=:0
export DISPLAY
xhost +

Запускаю скрипт с сервера и…

No protocol specified
xhost:  unable to open display ":0"

Вот, собственно, и проблема.

Возможно, на это влияет то, что сервер запускает скрипт на хосте с помощью jail. Но тут я полный ноль.

Возможно, как вариант, можно написать скриптик, который будет запускать xhost + в иксах сразу после их загрузки. Но это, на мой непрофессиональный взгляд, слишком большой костыль, недостойный жизни.

P.S. Если на хосте вручную прописать xhost +, а потом на сервере запустить скрипт, который запускает программу, все работает.

P.S.S. Знаю, что на форуме поднимали эту тему несколько раз. Не помогло.

 , , , ,

Hart ()

Запустить скрипт в initramfs.

Есть небольшой скрипт, расположенный в /etc/initramfs-tools/scripts/init-bottom/rlang.sh

Скрипт должен устанавливать в initramfs новый консольный шрифт. Собственно, вот и сам скрипт:

#!/bin/sh
setfont /usr/share/fonts/866_8x16.psf
mkdir /test

Создание файла mkdir /test тут просто для проверки. (Заранее в хуках в initramfs пересылается сам шрифт и утилиту setfont.)

Так вот, после написания скрипта сделал его исполняемым : chmod +x rlang.sh, после чего выполнил initramfs-update -u.

Вот здесь и начинаются проблемы:

  1. Скрипт выполняется во время initramfs-update -u и создает директорию test в «основной» системе.

  2. В initramfs скрипт не выполняется. (Кстати, если выполнить команду setfont /usr/share/fonts/866_8x16.psf в initramfs, то шрифт встает, команда выполняется.).

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

Вопрос такой - Что не так и что с этим делать??

 , , , ,

Hart ()

Скопировать файл в initramfs

Мне нужно скопировать несколько файлов в initramfs (один шрифт и setfont (нужно в initramfs отображались русские буквы корректно)).

Но как именно переправить эти файлы в initramfs??

 , ,

Hart ()

Добавить русский язык в initramfs

Нужно добавить поддержку русского языка в initramfs. Как это сделать?

 , ,

Hart ()

RSS подписка на новые темы