RS232 book cover

Centrum Outlook Express Centrum Outlook Express

OE PowerTool 4.5.3


Twój adres IP to: 54.81.69.220
Przeglądarka: CCBot/2.0 (https://commoncrawl.org/faq/)



Ludwig von Mises Institute

Zdalne włączanie komputera

4 lutego 2019

Od czasu do czasu może zajść potrzeba zdalnego dostania się do wyłączonego komputera. Możemy potrzebować skopiować jakiś plik lub uruchomić jakiś program. Wówczas jeśli dysponujemy innym komputerem w tej samej sieci lokalnej, możemy użyć go do włączenia tamtego komputera. Służy do tego mechanizm Wake on LAN (WoL). Musi być on obsługiwany przez płytę główną oraz kartę sieciową. Dodatkowo może istnieć potrzeba włączenia Wake on LAN w BIOSie i w ustawieniach karty sieciowej (w przypadku Windows w Menedżerze urządzeń, we właściwościach karty).

Aby włączyć komputer przez sieć, trzeba wysłać do niego tzw. magiczny pakiet (Magic Packet). Jest to pakiet UDP zawierający sześć bajtów FF oraz szesnaście razy powtórzony adres MAC komputera do włączenia. Najczęściej wysyła się go na adres rozgłoszeniowy sieci (broadcast). Można by go spróbować wysłać na adres IP komputera, ale komputer ten będąc wyłączony nie odpowie na zapytanie ARP i komputer wysyłający nie pozna jego adresu MAC. Co prawda ten adres jest znany z góry i jest w payloadzie pakietu, ale nie będzie znany stosowi TCP/IP komputera wysyłającego. Stąd korzystamy z adresu rozgłoszeniowego. Port nie ma znaczenia.

Do wysłania magicznego pakietu możemy użyć różnych programów lub też napisać skrypt. Załóżmy, że komputerem włączającym jest Raspberry Pi. Możemy wtedy skorzystać np. z programu etherwake. Trzeba go uruchomić z konta roota i podać adres MAC komputera do włączenia:

sudo etherwake 7d:d4:a2:87:35:45

Jeśli komputer włączający ma kilka interfejsów sieciowych, trzeba podać właściwy dla danej sieci za pomocą parametru -i.

Możemy też napisać sobie skrypt, np. w Perlu. Poniższy przykład ma adres MAC zahardkodowany w swojej treści. Podobnie adres rozgłoszeniowy. Nie wymaga roota.

#!/usr/bin/perl -w
use IO::Socket;

$mac    = "\x74\xd4\xa2\x87\x35\x45";
$packet = "\xFF\xFF\xFF\xFF\xFF\xFF". ($mac x 16);

$sock = new IO::Socket::INET(PeerAddr => "192.168.0.255",
                                 PeerPort => "8888",
                                Type => SOCK_DGRAM,
                                Broadcast => 1,
                                 Proto    => "udp") or die "Nie mozna stworzyc gniazda";
$sock->send($packet);
        

OpenVPN a routing na Raspberry Pi

28 stycznia 2019

Gdy na Raspberry Pi zainstalujemy i skonfigurujemy OpenVPN, otrzymujemy możliwość zdalnego łączenia się z maliną, np. przez SSH, w ramach sieci wirtualnej. Nie oznacza to jeszcze automatycznie możliwości łączenia się do ewentualnych innych komputerów znajdujących się w sieci lokalnej w której jest Raspberry Pi, czy też możliwości dostawania się do Internetu przez Raspberry Pi. Musimy jeszcze skonfigurować routing. W tym celu najpierw edytujemy plik /etc/sysctl.conf Trzeba odkomentować w nim linijkę

net.ipv4.ip_forward=1

Aby ta zamiana zadziałała możemy zrestartować Raspberry Pi lub też wydać komendę

sysctl -p

Ponadto musimy dodać regułkę iptables. W tym celu stworzymy skrypt, który można umieścić np. w katalogu /etc/network/if-up.d/ aby był uruchamiany przy podnoszeniu interfejsów sieciowych:

#!/bin/sh
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.3

Oczywiście skrypt musimy dostosować do używanej adresacji. Jako pierwszy adres podajemy podsieć VPN, jako drugi adres Raspberry Pi w naszej sieci lokalnej. Ważne, żeby nie opuszczać linijki z #!. Bez niej skrypt będzie się dawał uruchomić z palca, ale nie będzie uruchamiany automatycznie przy starcie systemu.


Raspberry Pi jako serwer HTTP proxy

28 stycznia 2019

Do wykorzystania Raspberry Pi jako serwer proxy możemy wykorzystać popularny program squid. Instaluje się go standardowo, korzystając z apt. Domyślnie squid będzie słuchać na porcie 3128 na localhoście. Aby był dostępny dla innych komputerów w sieci lokalnej, trzeba wyedytować plik /etc/squid/squid.conf. Odszukujemy w nim linijki zaczynające się od acl localnet. Dzięki nim możemy zdefiniować sieci uprawnione do łączenia się ze squidem. Możemy je odkomentować i zmodyfikować lub też dopisać nowe. Ja chciałem udostępnić proxy dla sieci lokalnej (192.168.0.0/24) oraz VPN (10.8.0.0/24), dopisałem więc

acl localnet src 192.168.0.0/24
acl localnet src 10.8.0.0/24

W tym momencie mamy zdefiniowaną adresację sieci lokalnych pod symbolem localnet. Musimy jeszcze dodać dla niego uprawnienie do łączenia się. W tym celu trzeba odkomentować znajdującą się dalej linijkę

http_access allow localnet

Po edycji pliku konfiguracyjnego restartujemy usługę proxy:

sudo /etc/init.d/squid restart

Raspberry Pi jako serwer DNS

28 stycznia 2019

Istnieje wiele publicznych serwerów DNS, jak np. należące do Google serwery 8.8.8.8 i 8.8.4.4. Z różnych jednak względów możemy chcieć postawić własny serwer. Może to być chęć ograniczenia bycia śledzonym przez Google, zdefiniowanie własnych hostów i domen w sieci lokalnej lub jeszcze inny przypadek. Serwer DNS na własne potrzeby możemy postawić na Raspberry Pi. W tym celu możemy zainstalować np. dnsmasq, korzystając standardowo z apt:

sudo apt-get install dnsmasq

Uruchamiamy również standardowo:

sudo /etc/init.d/dnsmasq start

dnsmasq zwykle nie wymaga dodatkowej konfiguracji, słucha na wszystkich interfejsach. Będzie więc dostępny dla innych komputerów w sieci lokalnej oraz przez ewentualny VPN. Wystawianie naszego serwera DNS do Internetu raczej nie będzie miało sensu.


Statyczny adres IP w Raspberry Pi

25 stycznia 2019

Zwykle komputery otrzymują adres IP z serwera DHCP, nie zawsze jednak taki serwer jest dostępny. A jeśli nawet jest, to niektóre serwery DHCP nie mają opcji statycznego przydziału adresu IP dla danego adresu MAC karty sieciowej. Kiedyś w Raspbianie, oraz wielu innych dystrybucjach Linuksa, statyczny adres IP ustawiało się w pliku /etc/network/interfaces. W nowszych wersjach dystrybucji Raspbian, np. stretch, edytuje się plik /etc/dhcpcd.conf, czyli plik konfiguracyjny demona klienta DHCP. Mamy tam gotowe, zakomentowane linijki dla konfiguracji statyczne. Wystarczy je odkomentować i wpisać żądane ustawienia, np.

interface eth0
static ip_address=192.168.0.3/24
static routers=192.168.0.1
static domain_name_servers=62.179.1.63 62.179.1.62 8.8.8.8

Wysyłanie sekwencji CRLF w PuTTY

20 stycznia 2018

Urządzenia i moduły komunikacyjne często są zarządzane i konfigurowane za pomocą tekstowych komend AT. Dotyczy to np. popularnych modułów HC-05 (Bluetooth) i ESP8266 (WiFi). Aby te komendy wydawać z komputera, potrzebny jest odpowiedni program terminalowy obsługujący port szeregowy. Takim programem jest np. PuTTY, obsługujący też protokoły SSH i telnet, do pracy za pomocą których jest używany najczęściej.

Z PuTTY jest jednak pewien problem przeszkadzający w używaniu go do wydawania komend AT. Otóż wymienione moduły wymagają, aby komendy AT były kończone przejściem do nowej linii wyrażonym za pomocą sekwencji CR+LF (carriage return i line feed). Znak CR to przejście na początek linii, LF to przejście do linii niższej. Razem oznaczają więc przejście na początek kolejnej linii. Znaki te są bajtami o wartościach odpowiednio 13 i 10 (0Dh i 0Ah). Często, np. w języku C, są zapisywane za pomocą sekwencji \r\n.

Tymczasem PuTTY przeznaczony jest przede wszystkim do pracy na zdalnym systemie. W związku z tym wysyła po prostu naciśnięte klawisze (z wyjątkiem klawiszy specjalnych, takich jak Shift, Alt czy Ctrl). Jeśli wciśniemy Enter, PuTTY nie wyśle znaków CR i LF a jedynie CR. Jak więc wysłać brakujący znak LF? Otóż możemy wcisnąć kombinację Ctrl+J. Rozwiązanie to jednak nie jest zbyt wygodne, gdyż wymaga wciskania tej kombinacji po każdym Enterze. Najwygodniej byłoby, gdyby można było wymusić wysyłanie CRLF dla Entera. PuTTY posiada różne opcje konfiguracyjne związane z klawiaturą, można np. skonfigurować klawisze Backspace, Home czy End. Nie ma jednak ustawienia dla Entera. W związku z tym trzeba wysyłanie CRLF dodać do PuTTY modyfikując jego kod źródłowy i kompilując go samodzielnie. Ponieważ źródła PuTTY są publicznie dostępne, skorzystałem z tej możliwości i zmodyfikowałem PuTTY o możliwość wysyłania CRLF dla Entera. Wersję tę można ściągnąć tutaj: putty-crlf.zip. Zmodyfikowane źródła dostępne są w serwisie GitHub.

PuTTY z obsługą CRLF

Osuszanie Polski w Windows XP

28 kwietnia 2017

W Windows 2000 oraz Windows XP występuje ciekawy błąd w okienku ustawień strefy czasowej: w miejscu Polski jest... morze. Skąd się to wzięło? Otóż mapka nie jest rysowana od razu za jednym zamachem. Algorytm jest taki, że na pustej wodnej przestrzeni rysowane są obszary odpowiadające kolejnym strefom czasowym. Gdy Microsoft wydawał Windows 95, Polska miała własną strefę czasową. Jednak później uchwalono przepisy synchronizujące nasz czas letni i zimowy z sąsiednimi krajami, a programiści odpowiedzialni za mapkę nie do końca sobie z tym poradzili. Usunęli starą polską strefę czasową ale nie podpięli rysowania Polski pod strefę Sarajewa, Skopie i Zagrzebia. W rezultacie Polska zniknęła pod wodą.

Morze Polskie

Od Visty mapki świata w ustawieniach strefy czasowej już nie ma, problem rozwiązał więc się sam. Co jednak z Windows XP? Mało kto już go używa, ale jeśli ktoś chciałby poprawić mapkę, to jak się okazuje, jest to bardzo proste do zrobienia. W tym celu w rejestrze, w kluczu HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time trzeba zmodyfikować wartość MapID z 2,3 na 2,65. Wtedy mapka się naprawia. Po edycji rejestru restart nie jest wymagany, efekt widać od razu po ponownym otwarciu okienka ustawień.

Morze Polskie

Intro 4k elevated

27 marca 2017

Elevated to mające niecałe 4kB intro grupy r g b a. Realizm wygenerowanej grafiki przez tak mały program robi bardzo duże wrażenie, szczególnie że intro trwa ponad 3 minuty. Intro można obejrzeć na YouTube lub też uruchomić na swoim komputerze. Wersje dla różnych rozdzielczości ekranu można pobrać ze strony twórców. Gdyby dany plik .exe się nie uruchamiał, trzeba go zrekompresować kompresorem Crinkler korzystając z przełącznika /recompress, np.

crinkler.exe /recompress elevated_1280x1024.exe

Zmiana daty plików na podstawie zawartości

27 marca 2017

Pewnego razu na usenetowej grupie pl.comp.os.ms-windows.winnt pojawiło się pytanie o sposób na zmianę daty modyfikacji plików na datę, która jest zapisana w pierwszych pięciu bajtach tych plików. Pliki te mają rozszerzenie .dr1. Przykładowo plik zaczynający się od bajtów 0E 04 05 16 30 (szesnastkowo) powinien otrzymać datę 2014/04/05 22:48:00. Operację taką można wykonać np. skryptem napisanych w PowerShell. Przykładowy skrypt przetwarzający pliki w bieżącym katalogu, może wyglądać tak:

$files = ls "*.dr1"
foreach ($f in $files) {
    $reader = New-Object IO.FileStream $f, 'Open'
    [byte[]]$buffer = new-object byte[] 5
    $len = $reader.Read($buffer, 0, $buffer.Length)
    $reader.Close()
    $d = new-object DateTime ($buffer[0] + 2000), $buffer[1], $buffer[2], $buffer[3], $buffer[4], 0
    $f.LastWriteTime = $d
}
        

Firmware dla AVT-5388

1 lutego 2016

Programatory ISP dla mikrokontrolerów AVR, będące klonami AVRISP mkII, wymagają aktualizacji firmware aby mogły działać z Atmel Studio 7. Jednym z takich programatorów jest np. AVT-5388. Zaktualizowany firmware można pobrać tutaj. Upgrade wykonuje się programem FLIP. Po aktualizacji trzeba jeszcze zainstalować sterownik libusb-win32 programem Zadig.