Windows GUI-app on Golang with GTK 3

To develop a GUI app in Windows, I chose the gotk3 package. This is a binding of the GTK lib, which provides a native interface for Windows. I didn’t deal with crosscompiling and installed all the necessary tools in the Windows 10 VM. The VM image is officially distributed by Microsoft. I used the instructions from the wiki to install gotk3. Also I used the Chocolatey to install the necessary tools. For install it: ...

<span title='2020-09-01 00:00:00 +0000 UTC'>September 1, 2020</span>

Management of multiple versions of Python with pyenv

Pyenv pyenv lets you easily install and switch between multiple versions of Python. Install and customization zsh The main issues are described in wiki curl https://pyenv.run | bash echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc exec $SHELL sudo apt-get update; sudo apt-get install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev Update pyenv ...

<span title='2020-08-30 00:00:00 +0000 UTC'>August 30, 2020</span>

How to live without net-tools

The main headache of today is installing and running the latest version of Ubuntu Lts in a VMware. Since Ubuntu version 18.04 (maybe from 17.10), there are no /etc/network/interfaces and net-tools with the usual ifconfig and route commands. They were replaced by netplan and iproute2. Now this is what network configuration looks like: alex@ubuntu-server-lts:~$ ip -c addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:28:ef:9a brd ff:ff:ff:ff:ff:ff inet 192.168.15.129/24 brd 192.168.15.255 scope global dynamic ens33 valid_lft 1575sec preferred_lft 1575sec inet6 fe80::20c:29ff:fe28:ef9a/64 scope link valid_lft forever preferred_lft forever alex@ubuntu-server-lts:~$ ls /etc/netplan 00-installer-config.yaml alex@ubuntu-server-lts:~$ cat /etc/netplan/00-installer-config.yaml # This is the network config written by 'subiquity' network: ethernets: ens33: dhcp4: true addresses: [] optional: true version: 2 In this case the ip-address is received from dhcp. For now to set the ip-address, you need to write something like: ...

<span title='2020-08-25 00:00:00 +0000 UTC'>August 25, 2020</span>

Visualizing network topologies with Golang

This day is inspired by the article “Визуализация сетевых топологий, или зачем еще сетевому инженеру Python #2”. I wrote Golang program that analyzes the output of the cisco sh int, sh mac-address-table (for switches) or sh ip arp (for routers) commands and vizualizes network topology from mac address tables. I only used mac address information, not LLDP (CDP). NeXt Ui (Github) is used for visualization. For example, I received an output with self-made telnet client on Golang from a network of this topology: ...

<span title='2020-08-23 00:00:00 +0000 UTC'>August 23, 2020</span>

Использование EasyJSON в golang вместо encoding/json

Пакет Go easyjson от Mail.Ru предоставляет быстрый и простой способ маршалировать/демаршалировать структуры Go в/из JSON основанный на рефлексии. В тестах производительности easyjson превосходит стандартный encoding/json пакет в несколько раз (сравнительный benchmark в конце). Установка и использование (OS Windows) Должна быть установлена переменная окружения GOPATH. У меня: echo %GOPATH% d:\projects-go\ И должен быть установлен git. Cтавим easyjson: go get -u github.com/mailru/easyjson/... в %GOPATH%\bin появится easyjson.exe В каталоге нашего проекта создаем подкаталог, он же пакет go, отличный от main (это обязательно), например %GOPATH%\project\model ...

<span title='2020-08-08 00:00:00 +0000 UTC'>August 8, 2020</span>

Начальное конфигурирование роутера Cisco

Если осталась старая конфигурация, удалить и перезапустить Cisco>enable Cisco#erase startup-config Cisco#reload Cisco>enable Новая конфигурация Cisco#configure terminal Назвать роутер Cisco(config)#hostname R1 Хранить пароли в файле конфигурации в зашифрованном виде R1(config)#service password-encryption Отключить управление по http, https, CDP R1(config)#no ip http server R1(config)#no ip http secure-server R1(config)#no cdp run Отключить интерпретацию неправильно введенных команд как DNS-запрос R1(config)#no ip domain lookup Пароль на подключение по консольному порту R1(config)#line console 0 R1(config-line)#password cisco R1(config-line)#login local R1(config-line)#exit ...

<span title='2020-04-09 00:00:00 +0000 UTC'>April 9, 2020</span>

Сохранение паролей в Windows Credentials Locker из Python

Ставим keyring pip install keyring Выполняем import keyring keyring.set_password("system", "username", "password") Результат Доступ к данным keyring.get_password("system", "username") 'password'

<span title='2020-04-08 00:00:00 +0000 UTC'>April 8, 2020</span>

Логгирование команд на Cisco с помощью Event Manager

Настроить Event Manager для логгирования всех выполненных на роутере команд: event manager applet CLIaccounting event cli pattern ".*" sync no skip no action 1.0 syslog priority informational msg "$_cli_msg" set 2.0 _exit_status 1 Включить логгирование: archive log config logging enable logging size 1000 notify syslog hidekeys По умолчанию logging size 100 если этого достаточно, команду можно не вводить. Посмотреть лог: show archive log config all Все выполненные команды будут дублироваться на консоль. Если это не надо, отключить вывод: no logging console Включить: logging console ...

<span title='2020-04-05 00:00:00 +0000 UTC'>April 5, 2020</span>

Подключение к устаревшим Cisco по SSH

Если при попытке подключиться выдает что-то похожее на “no matching key exchange method found”: На Cisco (ip 192.168.2.2): длина ключа RSA должна быть больше 1024 создаем учетную запись пользователя (здесь - cisco) В linux: создаем ~/.ssh/config Host 192.168.2.2 KexAlgorithms +diffie-hellman-group1-sha1 Ciphers aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc Алгоритмы могут быть другие, подходящие будут указаны в сообщении об ошибке. проверяем ssh 192.168.2.2 -l cisco При ошибке ‘connection refused’ помогает создание нового ключа: crypto key generate rsa general-keys modulus 1024 В linux удаляю запись о старом ключе ssh-keygen -f ~/.ssh/known_hosts -R "192.168.2.2" и пробую поключиться ...

<span title='2020-04-04 00:00:00 +0000 UTC'>April 4, 2020</span>

Управление роутером в GNS3 с Ansible в Windows

В Windows запущен GNS3 с роутером, доступным по telnet (ip 192.168.2.2), установлена Ubuntu в WSL. Как управлять роутером через Ansible? Ставим Ansible sudo apt install ansible Создаем файлы в домашнем каталоге myhosts [cisco-routers] 192.168.2.2 ansible.cfg [defaults] inventory = ./myhosts gathering = explicit telnet_command_show_ver.yml (логин без ввода имени пользователя) --- - name: Run show command on routers hosts: cisco-routers tasks: - name: run show commands telnet: login_prompt: "Password: " password: cisco prompts: - "[>#]" command: - terminal length 0 - show version Выполняем ansible-playbook telnet_command_show_ver.yml ...

<span title='2020-04-03 00:00:00 +0000 UTC'>April 3, 2020</span>