Можно ли открыть TCP-туннель в Linux как специальное символьное устройство?

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

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

10
05.12.2016, 00:10
3 ответа

socat может делать это и многое другое с вещами, напоминающими «потоки»

Что-то, использующее эту основную идею, должно сделать это за вас:

Machine1$ socat tcp-l:54321,reuseaddr,fork pty,link=/tmp/netchardev,waitslave

Machine2$ socat pty,link=/tmp/netchardev,waitslave tcp:machine1:54321

(адаптировано из Страница примеров )

Если вы хотите зашифровать, вы можете использовать вариант ssl-l: 54321, reuseaddr, cert = server.pem, cafile = client .crt, fork на machine1 и что-то вроде ssl: server-host: 1443, cert = client.pem, cafile = server.crt on machine2

(Подробнее о socat ssl )

19
27.01.2020, 19:59

Если вы просто хотите соединить два компьютера с помощью базовой программы, такой как nc, вы можете перенаправить с / на / dev / tcp / / .

Это не настоящие устройства, а выдумка, созданная bash, поэтому такие вещи, как cat / dev / tcp / foo / 19 , не будут работать, но cat будет.

5
27.01.2020, 19:59

Передача сообщений должна быть реализована на более высоком уровне; TCP не имеет понятия сообщения - TCP-соединения передают потоки октетов.

Вы можете добиться чего-то вроде того, что вы запрашиваете, с помощью nc и именованных каналов , см. man mkfifo ; или проверьте socat , как указывает Alex Stragies.

Без службы среднего уровня основные проблемы заключаются в том, что (1) данные не могут быть записаны в сеть, если на другом конце их не прослушивает, и (2) TCP-соединения являются двунаправленными.

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

Ваш пример можно легко переписать:

  • Сначала запустите прослушиватель на машине2 (адресат):

      nc -l 1234 | ... некоторая обработка полученных данных ... 
     

    В вашем примере это будет

      nc -l 1234 | cat 
     

    Это заблокирует и будет ждать, пока кто-нибудь отправит данные на порт 1234.

  • Затем вы можете отправить некоторые данные с машины1 (источника):

     ... создать некоторые данные ... | nc machine2 1234 
     

    В вашем примере это будет

      echo "Hello" | nc machine2 1234 
     

Если вы хотите каким-то образом обработать полученные данные и ответить, вы можете использовать средство сопроцессинга оболочки.Например, это очень простой (и очень упорный) веб-сервер:

#! /bin/bash

while :; do
  coproc ncfd { nc -l 1234; }
  while :; do
    read line <&${ncfd[0]} || break
    line="$(
      echo "$line" |
      LC_ALL=C tr -cd ' -~'
    )"
    echo >&2 "Received: \"$line\""
    if [ "$line" = "" ]; then
      echo >&${ncfd[1]} "HTTP/1.0 200 OK"
      echo >&${ncfd[1]} "Content-Type: text/html"
      echo >&${ncfd[1]} "Connection: close"
      echo >&${ncfd[1]} ""
      echo >&${ncfd[1]} "<title>It works!</title>"
      echo >&${ncfd[1]} "<center><b>It works!</b></center>"
      echo >&${ncfd[1]} "<center>-- $(date +%Y-%m-%d\ %H:%M:%S) --</center>"
      break
    fi
  done
  kill %%
  sleep 0.1
done

Посмотрите, как достигается двунаправленная связь между основной частью скрипта и сопроцессом с использованием файловых дескрипторов в массиве $ ncfd .

7
27.01.2020, 19:59

Теги

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