У меня есть приложение, работающее на сервере Ubuntu 14.04.3 с использованием xsession и xorg с google-chrome. Я установил teamviewer 10 на машине, поэтому, если у них есть подключение к Интернету, они могут удаленно войти в ПК и отредактировать настройки приложения. То, что я хочу сделать, - это обнаружить, когда создается сеанс Teamviewer (когда кто-то входит в компьютер) и после некоторого времени выкидывает его (что может быть сделано путем убийства идентификатора процесса Teamviewer).
Дело в том, что я не знаю, как я могу обнаружить, когда сеанс начинается с teamviewer. Возможно ли это сделать?
Я не смог найти инструмент командной строки для проверки текущих сеансов. Кроме того, TeamViewer не создает новый процесс для каждого нового сеанса.
Я в конечном итоге проверяю созданные сокеты напрямую, используя модифицированный скрипт, написанный cYrus, из раздела «Как определить время соединения сокета на Linux
Скрипт проверяет установленные соединения демонами teamviewerd. Это зависит от конфигурации, но по умолчанию, он пытается порт 5938, если он не работает, пытается 443 и может быть 80. Затем он выдает время жизни / времени в минутах от всех сокетов.
teamviewerd создает одно соединение при запуске настольного приложения, а затем другое новое для сеанса (я не мог тестировать несколько сеансов) [!d4 ]
#!/bin/bash
function suptime() {
addr=${1:?Specify the remote IPv4 address}
port=${2:?Specify the remote port number}
pid=$(netstat -ntp 2>/dev/null | awk '
$6 == "ESTABLISHED" && $5 == "'$addr:$port'"\
{sub("/.*", "", $7); print $7}')
hex_addr=$(python -c "
import socket, struct;
print hex(struct.unpack('<L',
socket.inet_aton('$addr'))[0])[2:10].upper().zfill(8)")
hex_port=$(python -c "print hex($port)[2:].upper().zfill(4)")
inode=$(awk '$3 == "'$hex_addr:$hex_port'" {print $10}' /proc/net/tcp)
time=$(find /proc/$pid/fd -lname "socket:\[$inode\]" -printf %A@)
LANG=C printf '%i' $(bc <<<"($(date +%s.%N) - $time)/60")
}
ns=$(netstat -tpn | grep -e ":5938 *ESTABLISHED *[0-9]*/teamviewerd" -e ":443 *ESTABLISHED *[0-9]*/teamviewerd" | awk '{print $5}')
for s in $ns
do
addr=$(echo $s | awk '{split($0,a,":"); print a[1]};')
port=$(echo $s | awk '{split($0,a,":"); print a[2]};')
echo $(suptime $addr $port)
done
Другие возможные варианты:
Проверить журнал соединений, подобных Амиту в его ответе. Используйте xdotool или аналогичный инструмент, чтобы открыть боковую панель для закрытия сеанса.Начиная с TeamViewer 12 и Ubuntu 16.04, новый процесс
/opt/teamviewer/tv_bin/TeamViever_Desktop --IPCport 5936 --module 1
создается с началом сеанса. Это можно легко контролировать.
(Я знаю, что это старый вопрос, но кто-то может найти обновление полезным)