0. Предыстория


Так получилось, что несколько раз я порывался написать что-то на замену teamviwer для себя, каждый раз поднимал этот вопрос во внутреннем форуме своей головы при очередной необходимости покупать дополнительный канал своим «инженерам».

Что такое vnc и что такое teamviwer/rms/ammyy никому объяснять уже давно не надо, какие варианты «поднятия» своего аналога тут тоже поднимались не один раз, в самом простом варианте это скрипт для обратного подключения на проброшенный порт, я не знаю почему этот вариант не подходит многим, в т.ч и мне, но мне всегда казалось, что написать что-то своё — не сильно и сложно. С этой мыслью я потратил целый год в режиме работы в свободное время над своей «реализацией». Обозвал её «Визит».

Многих кто мне писал на почту и в личку на нескольких ресурсах волновал вопрос, в чем мой «интерес», «как же так» и тому подобное… В общем-то, я всем отвечал честно, что это чистый энтузиазм и решение нескольких своих задач, первая, это все же создание какого-то бюджетного аналога, второе — я мечтал стать программистом(хоть каким-то), а практику как-то получать надо.

В процессе решения этой большой задачи, я получил общие представления о многопоточности, объектах синхронизации, сетевой подсистемы со стороны программы и много другого интересного и не очень. Если эта часть интересна, я могу выкинуть куски кода с описанием проблем которые я решал.

В конечном счете я получил что-то более-менее рабочее, но так как средой разработки был выбран «c builder 6» появилась проблема поддержки и выявления ошибок. С чем связан такой оригинальный выбор? Человеческая лень, в универе мы учились на нем, на нем я написал курсовую работу — мессенджер, вот я и взял свой мессенджер и «дописал», даже имя внутреннее где-то проскальзывало — vaim(инициалы и Instant Messenger).

Время шло, ошибки скапливались, я наконец-то переехал в другую страну, устроился программистом и вроде бы все хорошо. Но появилась потребность «поизучать» golang и конечно подопытным кроликом был выбран мой «любимый» проект, благо, на своей же родине потребность в подобном никогда не исчезала.

Но в этот раз было решено пересмотреть принцип работы кардинально: уже существует десяток готовых реализаций VNC, зачем же будем отнимать у них хлеб(почему сразу я так не думал...)? Давайте сделаем просто «коммутатор», этого хватит закрыть свою задачу и помочь другим.

Так появился reVisit. Здесь я хочу Вам рассказать как с ним можно работать и возможно запустить свой сервер. Это конечно не конечная реализация и я уверен, что что-то где-то упустил. Знаю, что у людей вокруг опыта больше, поэтому может немного критики будет уместно.

1. Quick Support


image

И так, для работы в режиме qs достаточно запустить клиент, он скачает vnc по-умолчанию, распакует в temp и запустит сервер в режиме прослушивания с localhost. Далее для подключения мы используем id и пароль. Пароль проверяется на стороне клиента, сервер такие данные не хранит.

2. Создание учетной записи


image

Это удобно если есть необходимость периодически подключаться к одним и тем же компьютерам. Для создания указываем в верхнем поле над кнопкой регистрации свой e-mail и через мгновение придет пароль на Ваш почтовый ящик. Теперь используя эту комбинацию, мы можем войти.

2.1 Создание, редактирование, удаление, управление


image

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

2.2 Смена версии VNC


image

При этом в списке контактов по-мимо редактирования данных самого контакта можно поменять vnc на удаленной системе из доступных на нашем сервере, этот пункт называет «Управление». Для смены своей же версии эту панель можно достать из «Управления» в traybar.

3. Запуск своего сервера


Можно использовать исходники на github и скомпилировать под linux, убрать/исправить/добавить и получить свою версию, но нужно будет туда так же добавить информацию о vnc(её можно взять и из готовой сборке). А можно использовать готовый bundle, поменяв только настройки для smtp сервера, именно через эту учетку будут отправляться пароли для новых профилей. И запускать клиент с аргументом -server 1.2.3.4, после первого запуска создается файл с настройками и адрес сохранится там.

Вот и всё, всем спасибо!

Комментарии (18)


  1. theurs
    08.03.2018 15:45

    Как подключаться то к тем кто за фаирволом? Тимвьювер и эти самые же только из за этой проблемы и существуют.


    1. vaizmanai Автор
      08.03.2018 15:55

      За nat или именно за файрволом? Если про первое речь, то проблем нет, ведь в данной схеме появляется сервер, который и занимается ретрансляцией между клиентами. А если о втором — только настройка правильно правил, не зависимо от используемого ПО для подключения.


  1. resetme
    08.03.2018 17:56
    +2

    Глянул в исходники и нашел вот такого монстра:

    func getPid(serial string) string{
    
    	var a uint64 = 1
    	for _, f := range serial {
    		a = a * uint64(f)
    	}
    
    	//todo добавить нули если число меньше трех знаков
    	b := a % 999
    	for b < 100 {
    		b = b * 10
    	}
    	c := (a / 999) % 999
    	for c < 100 {
    		c = c * 10
    	}
    	d := ((a / 999) / 999 ) % 999
    	for d < 100 {
    		d = d * 10
    	}
    	e := (((a / 999) / 999 ) / 999 ) % 999
    	for e < 100 {
    		e = e * 10
    	}
    
    	var r string
    	r = strconv.Itoa(int(b)) + ":" + strconv.Itoa(int(c)) + ":" + strconv.Itoa(int(d)) + ":" + strconv.Itoa(int(e))
    
    	return r
    }
    


    Вызов всего этого:

    
    ...
            s := getPid(message.Messages[0])
            if message.Messages[0] == "00:00:00:00:00:00" {
                    s = getPid(randomString(17))
            }
    ...
    


    Вам стоит заняться изучением основ программирования, а не написанием постов на Хабре.


    1. NixGuy
      08.03.2018 18:13

      Ну, не будте так строги :)
      Если софт делает то, что от него требуется — это уже отлично, а со временем, можно и код будет причесать. Для успокоения, к примеру, гляньте исходники десктопного Telegram.


      1. justhabrauser
        08.03.2018 20:46

        Логично. Windows же работает.


    1. vaizmanai Автор
      08.03.2018 18:31

      Спасибо за критику, но в том и суть, если нужен какой-то свой, особенный вариант, можно взять и исправить.


    1. justhabrauser
      10.03.2018 08:30

      Ну что Вы… Так. Здесь. Принято.


      1. vaizmanai Автор
        10.03.2018 11:07

        Просто речь была не об алгоритмах, я вроде и хаб правильный выбрал…


  1. mirrr
    08.03.2018 22:44

    visit.exe на вашем сайте банится антивирусом как malware CXweb/OddDld-A


    1. vaizmanai Автор
      08.03.2018 23:01

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


  1. romxx
    08.03.2018 22:51

    Программа с «говорящим» названием «Висит».


    1. vaizmanai Автор
      08.03.2018 23:01

      Мне нечего Вам ответить на это, может есть что-то по теме?


  1. Novaplus
    09.03.2018 00:03

    Молодчина!!! Многие и могут критиковать и ковыряться в чужом коде, а сами написать, разработать русский аналог для русских людей не могут. А вы этим занялись и отлично! Причесать это все дело, сделать хорошее описание и небольшой сайт. Глядишь и гуру программисты подтянуться и проект начнет обрастать хорошей логикой. А там и тимвьювер можно будет выкинуть на помойку. На данный момент же времени я использую тимвьювер — лучшего не видел — по дизайну, по простоте.


    1. avost
      09.03.2018 00:31

      В каком смысле "русский аналог для русских людей"? Одна из популярных реализаций vnc и есть "русский аналог". Только, наверное, не для "русских людей", а для всех. Для всех людей. Что значит "для русских людей" и зачем?


      1. vaizmanai Автор
        09.03.2018 00:43

        Речь не об аналоге внц, а варианте quick support "из коробки".


      1. Novaplus
        09.03.2018 00:44

        Имел в виду для русскоязычного населения, если будет время и силы перевести это детище на все языки мира да только плюс такому решению. Писать такие программы для русских нужно потому, чтобы мы не использовали чужое, а свое использовали и честно я бы заплатил за классную русское ПО. Но тимвьювер стоит просто бешенные деньги — поэтому использую его бесплатно и всегда думаю, ну когда уже кто то напишет аналог похожий, а может и лучший? Ещё не забываем каждый аналог написанный и поддерживаемой программы на русском языке это экспансия, продвижение русского мышления, мысли русской, а не зарубежной. Надеюсь не обидел никого таким высказыванием.


        1. mSnus
          09.03.2018 04:25

          Это не экспансия. Экспансия — это когда вы купите команду разработчиков TeamViewer и парочка ведущих программистов из Google попросится к вам работать в русской компании.


          А то, о чем вы говорите — это просто барьер для распространения самой программы и принцип Неуловимого Джо.


          Чтобы была экспансия, надо сделать что-то лучше, чем "они".


  1. sbh
    09.03.2018 15:33
    +1

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