BoSy blog. Droga donikąd też prowadzi do przodu.

MIPU - mini aktualizator adresu IP.

MIPU - mini aktualizator adresu IP.


Witam.

W tym wpisie chciałbym przedstawić swoją miniaturową aplikaję 'mipu'.
Mipu to skrót od 'mini IP updater'. Program działa z linii komend.
Celem jest uzyskanie zewnętrznego adresu IP naszej domowej sieci w formacie IPv4, zarówno na serwerze jak i po stronie klienta korzystającego z mipu.


Jeśli jesteśmy w sieci lokalnej i korzystamy z routera uzyskanie zewnętrznego adresu IP jest możliwe po wpisaniu zapytania 'my ip' w wyszukiwarce internetowej.
Na tej zasadzie lecz trochę rozwiniętej działa również ten program.
Łączy się z podanym jako pierwszy parametr adresem serwera. Wykorzystuje protokół http i łaczy się z serwerem na porcie numer 80.
Nie trzeba przekierowywac portu na routerze na komputer z którego zapytanie wysyłamy aby uzyskać odpowiedź. Jednak należy o tym pamiętać, gdy stawiamy serwer www lokalnie.


Przykładowe polecenie

mipu.exe api.ipify.org GET ?format=json

Powoduje ładnie sformatowaną odpowiedź z serwera. Czysty adres IPv4.

Zmodyfikowałem tez przykładowy plik dla serwera, który wspiera php.
Odpowiada tylko gdy w zapytaniu mipu podamy rodzaj metody POST i wprowadzimy nasz nick i hasło.

Strony, które wyświetlają nasze publiczne IP w przeglądarkach, nie odpowiedzą poprawnie mipu gdyż ten wyszukuje w bloku danych znaków { }.

Czyli poprawne echo z serwera powinno miec postać.

echo ' {"ip": "'.$ip_address.'"} ';

Jak przypisać zmiennej $ip_address nasz właściwy adres można zobaczyć w pliku "index2.php" w folderze "for server" w załączniku.

Plik .bat, który przygotowałem wykona automatyczne uruchomienia mipu regularnie według ustalonego czasu co 15 minut.
Wystarczy wyedytowac adres serwera na swój podać nazwę pliku w parametrach mipu i wrzucić do katalogu na serwerze ten plik index2.php. Nazwę pliku można oczywiście zmienić. Tak samo należy pamiętac o ustawieniu własnego loginu i hasła, czy też username i password bo takie brzmienie mają te zmienne w programie.

Link do programu na Google Drive.

MIPU 0.5 (beta).

To tyle na dzisiaj.

 

 

Biblioteka Allegro i Asembler.

 

Biblioteka Allegro w wersji 4 nie jest już rozwijana. Jednak pokażę w tym wpisie jak skorzystać z tej biblioteki posługując się asemblerem. Wykorzystam NASM. Strona oficjalna projektu znajduje się pod adresem www.nasm.us
Potrzebny również będzie kompilator gcc i jego biblioteki. Można pobrać z tej strony - GNU GCC Collection
Dla programujących pod Windows wystarczy zainstalować MinGW.
Dla chcących coś więcej Cygwin powinien zadowolić swoją funkcjonalnością.

Program graf1.exe działa w trybie okienkowym. Wyświetla napis i rysuje prostą i okrąg. Następnie czeka na wciśnięcie klawisza, po czym zostaje zamknięty.

; Program graf1.exe wykorzystuje bibliotekę Allegro
;
; Autor: Bogdan D., bogdandr (at) op.pl 
; Modyfikacja: Sylvi91 
;
; kompilacja:
; 
; nasm -f win32 -o graf1.o graf1.asm
; 
; linkowanie dynamiczne. Uwaga program wymaga biblioteki .dll do działania!
;
; gcc -o graf1 graf1.o -L"YourDirectorylib" -lalleg -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -ldinput -lddraw -ldxguid -lwinmm -ldsound
;
; linkowanie statyczne.
;
; gcc -o graf1 graf1.o -L"YourDirectorylib" -lalleg_s -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -ldinput -lddraw -ldxguid -lwinmm -ldsound
;



section .text
; wymagane przez Allegro:
global _main		
global _mangled_main
global _mangled_main_address

; deklaracje elementów zewnętrznych:
extern	_install_allegro
extern	_install_keyboard
extern	_set_color_depth
extern	_set_gfx_mode
extern	_allegro_exit
extern	_text_mode
extern	_set_palette
extern	_default_palette
extern	_clear_to_color
extern	_screen
extern	_textout
extern	_font
extern	_line
extern	_makecol
extern	_circle
extern	_readkey

%define GFX_AUTODETECT 0		; autowykrywanie sterownika
%define GFX_AUTODETECT_WINDOWED 2		; autowykrywanie sterownika

_main:			; TO WŁĄCZYĆ, JEŚLI ALLEGRO WYMAGA FUNKCJI MAIN
_mangled_main:
	; inicjalizacja biblioteki:
	push	dword 0
	push	err			; nasza zmienna do błędów
	push	dword 0
	call	_install_allegro
	add	esp, 3*4		; zdjęcie parametrów ze stosu

	; instalacja klawiatury
	call	_install_keyboard

	; ustawienie głębi kolorów:
	push	dword 8
	call	_set_color_depth
	add	esp, 1*4		; zdjęcie parametrów ze stosu

	; ustawienie rozdzielczości:
	push	dword 0			; wysokość okna
	push	dword 0			; szerokość okna
	push	dword 480		; wysokość całego trybu
	push	dword 640		; szerokość całego trybu
	push	dword GFX_AUTODETECT_WINDOWED
	call	_set_gfx_mode
	add	esp, 5*4

	; sprawdź, czy się udało
	cmp	eax, 0
	jne	koniec

	; ustaw tło pod tekstem
	push	dword -1
	call	_text_mode
	add	esp, 1*4

	; ustaw domyślną paletę
	push	dword _default_palette
	call	_set_palette
	add	esp, 1*4

	; wyczyść ekran
	push	dword 0			; czyść na czarno
	push	dword [_screen]		; co czyścić
	call	_clear_to_color
	add	esp, 2*4

	; wyświetl napis
	push	dword 15		; kolor
	push	dword 10		; współrzędna Y
	push	dword 10		; współrzędna X
	push	dword napis		; napis do wyświetlenia
	push	dword [_font]		; czcionka
	push	dword [_screen]		; gdzie wyświetlić
	call	_textout
	add	esp, 6*4

	; stwórz kolor biały do narysowania linii
	push	dword 255		; składowa niebieska
	push	dword 255		; składowa zielona
	push	dword 255		; składowa czerwona
	call	_makecol
	add	esp, 3*4

	; narysuj linię
	push	eax			; kolor
	push	dword 240		; współrzędna Y końca
	push	dword 320		; współrzędna X końca
	push	dword 400		; współrzędna Y początku
	push	dword 540		; współrzędna X początku
	push	dword [_screen]
	call	_line
	add	esp, 6*4

	; stwórz kolor zielony do narysowania koła
	push	dword 0
	push	dword 255
	push	dword 0
	call	_makecol
	add	esp, 3*4

	; narysuj koło
	push	eax			; kolor
	push	dword 20		; promień
	push	dword 240		; współrzędna Y środka
	push	dword 320		; współrzędna X środka
	push	dword [_screen]
	call	_circle
	add	esp, 5*4

	; czekaj na klawisz
	call	_readkey

koniec:
	; zamknij Allegro
	call	_allegro_exit
	; powróć z naszej funkcji głównej
	ret

section .data
napis			db	"Allegro", 0	; napis do wyświetlenia
_mangled_main_address	dd	_mangled_main	; wymagane
err			dd	0		; nasza zmienna błędów

Przykład pochodzi z tej strony.


... i to tyle.

Home