Saturday, April 22, 2017

Nyari dot kayak balita

; Percobaan pembuatan socket dengan bahasa assembly
; ~GG~
; 12-04-2017

section .data
	pesanuntukmu db './query http://ipaddress/', 0h
	http db 'http://', 0h
	errkonek db 'Tidak tau caranya terhubung.', 0h
	template db 'GET / HTTP/1.1', 0dh, 0ah, 'Host: ', 0h
	doublecrlf db 0dh, 0ah, 0dh, 0ah, 0h
	buflen equ 200

section .bss
	buf: resb buflen
	iptok: resb 16 
	hexip: resd 1
	sockfd: resb 4
	compiled: resb 2048

section .text
	global _start

; fungsi hitung panjang string
seberapabesar:
	push edi
	push ecx
	mov edi, eax
	mov al, 0h
	mov ecx, -1
	cld
	repne scasb
	mov eax, -1
	sub eax, ecx
	dec eax ; perlu dikurangi 1 setiap pake repe repe
	pop ecx
	pop edi
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; fungsi penampil pesan
tampil:
	push edx
	push ecx
	push ebx
	push eax
	call seberapabesar
	mov edx, eax
	pop eax
	mov ecx, eax
	mov ebx, 1
	mov eax, 4
	int 80h
	mov eax, 0ah
	push eax
	mov edx, 1
	mov ecx, esp
	mov ebx, 1
	mov eax, 4
	int 80h
	pop eax 
	pop ebx
	pop ecx
	pop edx
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; fungsi penanda offset string http://
kalkulasioffsethttp:
	push edx
	push ecx
	push ebx
	mov edx, http
	xor ecx, ecx

masihsama:
	mov bl, byte [edx]
	cmp byte [eax], bl
	jne markipul
	inc eax
	inc edx
	inc ecx
	jmp masihsama

markipul:
	mov eax, ecx
	pop ebx
	pop ecx
	pop edx
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; fungsi penanda offset char /
kalkulasioffsetslash:
	push edi
	push ecx
	mov edi, eax
	mov al, 2fh
	mov ecx, -1
	cld
	repne scasb
	mov eax, -1
	sub eax, ecx
	dec eax ; perlu dikurangi 1 setiap pake repe repe
	pop ecx
	pop edi
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; fungsi parse ip
ambilip:
	push edx
	push ecx
	push ebx
	push eax
	call kalkulasioffsethttp
	cmp eax, 0
	jz nohttp
	jmp adahttp

nohttp:
	call cara
	call keluar

adahttp:
	mov ebx, eax
	pop eax
	add eax, ebx
	push eax
	call kalkulasioffsetslash
	mov ecx, eax
	pop esi
	mov edi, iptok
	repnz movsb
	pop ebx
	pop ecx
	pop edx
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; cari dot, kayak balita
caridot:
	push ecx
	xor ecx, ecx

lanjut:
	cmp byte [eax], 2eh
	je nemudot
	cmp byte [eax], 0
	jz nemudot
	cmp ecx, 3
	je nemudot ; tiga digit terlewati, tidak ada ip 4 digit
	inc eax		; anggap sudah ketemu
	inc ecx
	jmp lanjut

nemudot:
	mov eax, ecx
	pop ecx
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; hitung per octet ip
getoctet: ; eax menyimpan hasil konversi, ebx last dot
	push edx
	push ecx
	push esi
	push eax
	call caridot ; cari dot 
	mov ebx, eax ; simpan letak dot di ebx
	pop eax
	push ebx
	mov esi, eax
	xor eax, eax
	xor ecx, ecx

terus:
	cmp ecx, ebx
	je ending
	xor edx, edx
	mov dl, byte [esi + ecx]
	cmp dl, 30h
	jl ending
	cmp dl, 39h
	jg ending
	cmp dl, 0
	jz ending
	sub dl, 30h
	add eax, edx
	mov edx, 0ah
	mul edx
	inc ecx
	jmp terus

ending:
	mov ebx, 0ah
	div ebx
	pop ebx
	inc ebx
	pop esi
	pop ecx
	pop edx
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; 256 pangkat berapa?
; fungsi khusus untuk konversi ip
pangkatkan:
	push edx
	push ecx
	push ebx
	mov ebx, eax
	xor ecx, ecx
	mov eax, 1 ; inisiasi

lagi:
	cmp ecx, ebx
	je sudah
	mov edx, 100h
	mul edx
	inc ecx
	jmp lagi

sudah:
	pop ebx
	pop ecx
	pop edx
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; fungsi kalkulasi ip address
kalkulasiip:
	push edx
	push ecx
	mov ecx, 4
	; we will count for 4 octet ip
looper:
	cmp ecx, 0
	jz done
	push eax
	call getoctet
	push ebx
	push eax
	mov eax, ecx
	dec eax ; kakehan dadi overflow
	call pangkatkan
	; kalikan octet dengan hasil pemangkatan
	pop ebx ; hexa dari eax getoctet
	mul ebx ; sampai di sini eax berisi konversi octet
	; dimana tempat penyimpanannya?
	add dword [hexip], eax
	pop ebx ; len ebx getoctet
	pop eax ; string ip
	add eax, ebx ; string dipotong sampai dot
	dec ecx
	jmp looper
done: 
	pop ecx
	pop edx
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; socketcall(socket(), args)
buatkansocket:
	push ecx
	push ebx
	push eax
	push 0
	push 1
	push 2
	mov ecx, esp ; stack array pointer
	mov ebx, 1 ; socket
	mov eax, 102 ; socketcall
	int 80h
	mov dword [sockfd], eax
	;;;;; embuh iki, sing penting hemat stack :D
	pop ebx
	pop ebx
	pop ebx
	;;;;;
	pop eax
	pop ebx
	pop ecx
	ret

; socketcall(connect(), args)
cobakonekkesana:
	push ecx
	push ebx
	;;;;;;;;
	; struct sockaddr_in
	push eax ; sin_addr.s_addr (ip)
	push word 0x05000 ; sin_addr.port (80)
	push word 2 ; sin_family (AF_INET)
	mov ecx, esp ; buat pointer ke address struct
	mov ebx, dword [sockfd] ; ambil sockfd
	;;;; argument connect
	push 16 ; size addr
	push ecx ; pointer sockaddr_in
	push ebx ; sockfd
	mov ebx, 3 ; connect
	mov ecx, esp
	mov eax, 102
	int 80h
	pop ebx ; eax digunakan untuk return
	pop ebx
	;;;;;;;
	pop ebx
	pop ebx
	pop ebx
	;;;;;;;
	pop ebx
	pop ecx
	ret

;; susun query
susunquery:
	push eax ; simpan ips
	;;; isi template dulu
	mov eax, template
	call seberapabesar
	mov ecx, eax
	mov esi, template
	mov edi, compiled
	mov al, 0h ; cek null
	repne movsb

	;;; tambahkan ips
	mov eax, compiled
	call seberapabesar
	mov edi, compiled
	add edi, eax
	pop esi
	mov eax, esi
	call seberapabesar
	mov ecx, eax
	mov al, 0h
	repne movsb

	;;; tambahkan double crlf
	mov eax, compiled
	call seberapabesar
	mov edi, compiled
	add edi, eax
	mov esi, doublecrlf
	mov eax, esi
	call seberapabesar
	mov ecx, eax
	mov al, 0h
	repne movsb
	ret

; fungsi pembentuk network byte order
swaporder:
	push edx
	push ecx
	push ebx
	mov ebx, eax
	and eax, 0ff000000h
	shr eax, 24
	push eax
	mov eax, ebx
	and eax, 00ff0000h
	shr eax, 8
	pop ecx
	or eax, ecx
	push eax
	mov eax, ebx
	and eax, 0000ff00h
	shl eax, 8
	pop ecx
	or eax, ecx
	push eax
	mov eax, ebx
	and eax, 000000ffh
	shl eax, 24
	pop ecx
	or eax, ecx
	pop ebx
	pop ecx
	pop edx
	ret

;; tulis request
tulissock:
	push edx
	push ecx
	push ebx
	push eax
	call seberapabesar
	mov edx, eax
	pop eax
	mov ecx, eax
	mov ebx, dword [sockfd]
	mov eax, 4
	int 80h
	pop ebx
	pop ecx
	pop edx
	ret

; tetep harus pakai sys_recv() - 10
; karena read berdasarkan buflen
; sedangkan sys_recv() menunggu data
; mari kita praktek kan
; ssize_t recv(int sockfd, void *buf, size_t len, int flags);
; flag = 256
; len = 81370
; buf 
; sockfd
recvsock:
	push eax
	;;;;;;;;
	push dword 256
	push dword buflen
	push dword buf
	push dword [sockfd]
	mov ecx, esp
	mov ebx, 10
	mov eax, 102
	int 80h
	;;;;;;;
	pop eax
	pop eax
	pop eax
	pop eax
	pop eax
	;;;;;;;
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; ini fungsi nganu
request:
	call ambilip ; ip berada di iptok
	mov eax, iptok
	call kalkulasiip ; hasil kalkulasi di hexip
	call buatkansocket ; return sockfd
	; ip sudah dalam bentuk hexa
	mov eax, dword [hexip]
	call swaporder; swap membentuk network byte order
	call cobakonekkesana
	cmp eax, 0 ; cek apakah error?
	jz bisakonek
	call koneksierror
	call keluar
bisakonek:
	; build query 
	; template + ip sebagai host header
	mov eax, iptok
	call susunquery
	; kirim request
	mov eax, compiled
	call tulissock
	; baca response
	call recvsock ; data ada di buf
	; tampilkan respon
	mov eax, buf
	call tampil

	call keluar
	;;;;;;;
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

koneksierror:
	mov eax, errkonek
	call tampil
	ret

cara:
	mov eax, pesanuntukmu
	call tampil
	ret

keluar:
	mov ebx, 0
	mov eax, 1
	int 80h
	ret

_start:
	pop ecx
	cmp ecx, 1 ; cek apakah argumen hanya nama program tok?
	je pesandariku
	cmp ecx, 2
	je lanjutkan
	jne pesandariku
pesandariku:
	call cara
	call keluar
lanjutkan:
	pop eax ; buang nama program
	pop eax ; ambil argumen pertama
	;call tampil
	call request
	call keluar 


Poor web query dalam bahasa assembly. 



~kadang sebuah kebaikan kita lihat dalam sebuah keburukan~

Wednesday, March 22, 2017

Share global variable on forked process perl

Judulnya bahasa linggis, karena tidak tau ungkapan yang tepat dengan bahasa indonesia.

Jadi begini, si Amat membuat sebuah program perl untuk memproses begitu banyak list objek. Pada awalnya program si Amat berjalan sempurna, tidak ada masalah yang cukup berarti. Seiring berjalannya waktu, list objek yang akan diproses semakin banyak dan berukuran sangat besar, sehingga membuat program si Amat terkesan lemot dan tidak mampu menangani. Kemudian si Amat mencari tau bagian mana letak kesalahan yang terjadi. Si Amat tidak menemukan kesalahan program karena semua terlihat begitu normal, tidak ada pesan error dan tidak ada kejanggalan.

Kemudian si Amat mulai dihantui kata lemot dan tidak mampu setiap mengingat programnya. Dengan pikiran yang penuh tanya, si Amat mencari solusi dengan bertanya kepada simbahnya si google. Dalam pencerahan bersama mbah google diwejangkan bahwasanya bisa digunakan metode pemrosesan paralel. Semakin bertanya semakin banyak jawaban. Dalam percakapan yang panjang dikatakan ada model thread dan fork. 

Dicobalah kedua model itu oleh si Amat. Yang pertama adalah thread. Pada waktu percobaan dengan komputer pribadinya, program thread ini berjalan lancar. Si Amat menggunakan module threads kemudian mendeklarasikan variable global dengan keyword :shared (ex: %hash:shared;) untuk digunakan sebagai filter yang digunakan oleh programnya. Dengan keyword ini semua thread yang terbuat dapat mengirimkan nilai kepada variabel secara langsung. Cukup mudah dalam benaknya. Namun dalam implementasinya, si Amat menemukan masalah lain. Server yang dipakai untuk menjalankan program si Amat ini belum terinstall modul thread dan sysadmin tidak bisa diajak berkolaborasi.





Daripada merengek pada orang lain, si Amat masih mempunyai satu opsi lain yang bisa dicoba yaitu fork. 

Dalam percobaannya, si Amat menemui bahwa penciptaan proses anak dengan pemanggilan fork ini sangat mudah sekali. Cukup dengan menambah satu baris dengan perintah fork() kemudian baris berikutnya akan dieksekusi oleh proses anakan. Si Amat membuat sebuah program uji coba dengan fork untuk dijalankan sebagai tester di server untuk memastikan bahwa server dapat menjalankan fork.






Tanpa menyebutkan modul, fungsi fork dapat dijalankan di komputer pribadi maupun di server. Mengetahui hal tersebut, si Amat langsung mencoba membuat simulasi fork untuk pemrosesan beberapa data. 

Dalam proses pembuatan program si Amat menemui beberapa hal yang masih belum diketahuinya. Si Amat bermaksud membuat variabel penanda yang menentukan bahwa data telah pernah diproses untuk menghilangkan duplikasi. Dalam logikanya, program yang dibuat sudah memiliki alur yang benar, bahwa variabel penanda ini harus berada pada area global, sehingga semua sub fungsi bisa mengaksesnya secara langsung. 



Tidak ada yang terlihat janggal pada programnya. Variabel %hash sudah dideklarasikan secara global, kemudian dimaksudkan setiap child akan melakukan pengisian pada variabel %hash dengan mengincrement. Jika bernilai lebih dari 0 berarti data sudah pernah ada. Tetapi tidak seperti yang diharapkan, si Amat semakin kebingunan dengan output seperti berikut.



Tidak ada satupun data masuk pada variabel %hash yang berada pada skope global. Tidak ada duplikasi data terdeteksi, padahal secara kasat mata ada duplikasi yaitu data AAA terduplikasi dua kali. "Apa yang terjadi?" dalam benaknya. :))

Kembalilah si Amat pada pelukan simbahnya untuk mendapatkan jurus baru. Si Amat disuruh membaca mantra tentang IPC (Inter Process Communication) pada halaman dokumentasi perl. Si Amat melakukan kopi dan paste terhadap amalan yang ada pada halaman tersebut dengan harapan bisa meneruskan pembuatan programnya.


Si Amat melakukan sedikit modifikasi yang disesuaikan dengan kebutuhannya. Dia ingin menerapkan metodenya untuk melakukan deteksi duplikasi data pada pemrosesan paralel. Dengan sedikit pesan-pesan debugging si Amat mendapatkan apa yang diharapkan.



Pada tahap ini, si Amat telah sukses melakukan deteksi duplikasi dan variabel global menunjukan nilai yang valid. Terdapat 3 AAA dan 1 untuk lainnya. Namun masih ada ganjalan lagi yang membuat si Amat harus kembali mengunjungi simbahnya. Data yang akan diproses dalam realitanya tidak sejumlah 6 saja, bisa jadi puluhan ribu, bisa juga ratusan ribu. Dikatakan oleh simbahnya, bahwa ada limitasi dari system dimana program dijalankan, yaitu jumlah proses yang bisa dijalankan. Pada linux bisa diketahui dengan perintah ulimit -u. Jika jumlah yang ditunjukkan oleh perintah ulimit -u terpenuhi oleh proses program, maka tidak ada lagi proses yang bisa dijalankan. Misal perintah ls,ps, dkk pun tidak akan bisa berjalan karena resource penuh. Oleh karena itu, si Amat harus memikirkan, bagaimana melakukan limitasi jumlah proses anakan yang dibuat oleh fork. Mungkin akan diceritakan lagi oleh si Amat dilain waktu.


Tuesday, March 14, 2017

Try development environment with xcode

For the project, i choose proximac from github. 
At this time proximac only support SOCKS proxy, so i try to make it support https proxy.  But there are a lot of empty space in my mind and it's hard for my reptilian brain to understand all of this.

Here are a few additional parts..



Add variable proxy_type, 0 for SOCKS, 1 for HTTPS. 192.168.3.33 is gateway with https proxy listen on port 443 (not a socks proxy, but https proxy that support http connect request).
 
 
 
Add simple http data parser to collect interesting data. And the other hardcoded style on random location inside local.c file.
 
 
Test query with curl -L (follow location) success.  
 
Tested method and response with curl only:
  • Method (GET, CONNECT)
  • Response (200, 301, 302)
Other method and response not tested yet. 
 
Discover it, sometimes "nread" from libuv give us invalid size of buf, but the current buf data is valid. I think it's because proximac inject header data and append null byte after the port (ipPortNullOtherData).

Friday, March 3, 2017

Monitoring signal modem gsm

Setelah sekian lama menjadi pengguna internet dengan modal modem GSM, baru kali ini melakukan pengamatan terhadap sinyal yang bisa diterima perangkat. Hal ini disebabkan tempat menetap sementara (baca: rumah) berada di antara pusat kota yang terlihat seperti gambar berikut :


Peta sinyal


Sinyal yang sampai di sini tidak cukup kuat atau kabur kanginan istilahnya. Koneksi kadang lancar kadang macet kadang ngilang. Kemudian dilakukanlah beberapa pengamatan melalui terminal terhadap perangkat yang ada.


Output dari modem dengan minicom
 
Terdapat angka yang menimbulkan begitu banyak tanya, sehingga mbah google harus tetap bekerja di masa tuanya. Dimulai dari pencarian istilah RSSI (received signal strength indicator). 

In telecommunications, received signal strength indicator (RSSI) is a measurement of the power present in a received radio signal.[1]
RSSI is usually invisible to a user of a receiving device. However, because signal strength can vary greatly and affect functionality in wireless networking, IEEE 802.11 devices often make the measurement available to users.

Kemudian dilanjutkan menuju "see also" tentang Signal Strength dan bertemu dengan rumus yang cukup njlimet, tapi menyimpulkan suatu hal.

If the mobile device is at cell radius distance from the cell tower the received power is estimated as -113 dBm. The effective path loss is depending on the frequency, the topography, and the environmental conditions.

Pencarian masih terus dilanjutkan dengan kombinasi beberapa kata acak yang bermunculan. Terdamparlah pada website (mobilefun.co.uk) yang memberikan pencerahan. Ada daftar kekuatan sinyal dan keterangannya.

0 < -113 dBm (Marginal)
1 -111 dBm (Marginal)
2 -109 dBm (Marginal)
3 -107 dBm (Marginal)
4 -105 dBm (Marginal)
5 -103 dBm (Marginal)
6 -101 dBm (Marginal)
7 -99 dBm (Marginal)
8 -97 dBm (Marginal)
9 -95 dBm (Marginal)
10 -93 dBm (Workable under most conditions)
11 -91 dBm (Workable under most conditions)
12 -89 dBm (Workable under most conditions)
13 -87 dBm (Workable under most conditions)
14 -85 dBm (Workable under most conditions)
15 -83 dBm (Good)
16 -81 dBm (Good)
17 -79 dBm (Good)
18 -77 dBm (Good)
19 -75 dBm (Good)
20 -73 dBm (Excellent)
21 -71 dBm (Excellent)
22 -69 dBm (Excellent)
23 -67 dBm (Excellent)
24 -65 dBm (Excellent)
25 -63 dBm (Excellent)
26 -61 dBm (Excellent)
27 -59 dBm (Excellent)
28 -57 dBm (Excellent)
29 -55 dBm (Excellent)
30 -53 dBm (Excellent)
31 > -51 dBm (Excellent)

Dari penjelasan di sana, bisa disimpulkan bahwa paling buruk angka yang didapatkan pada query CSQ adalah 15 (semakin kecil semakin buruk), atau minimal -83 dBm (semakin besar minus semakin buruk). 

Terang sudah, tanya sudah terjawab, berangan dan berandai.. membayangkan yang indah kemudian mendapatkan rumus konversi angka output csq menjadi satuan dBm pada website (support.argogroup.com). 

dBm = <rssi_value> * 2 - 113
Kemudian kuterapkan dengan memasukkan angka CSQ yaitu 10 didapat hasil -93 dBm. Ternyata memang arah antena wajannya tidak tepat sasaran, karena setelah dilakukan pencarian 360 derajad bisa didapatkan hasil seperti berikut :


Setelah pemutaran antena didapat angka yang lumayan

Males kan ngitung pake kalkulator, maka dibuat saja otomatisnya dengan program sederhana seperti berikut :



Hasil eksekusi :


Program melakukan filtering terhadap output dari modem untuk diambil angka RSSI nya, kemudian digunakan untuk melakukan perhitungan kekuatan sinyal. Program hanya akan memberikan output jika terdapat perubahan angka RSSI.

Sunday, February 19, 2017

Uniq with perl

Sort uniq command

Bagi pengguna linux khususnya yang terbiasa beroperasi dengan shell, program uniq sepertinya sudah tidak asing lagi. Seperti arti dari kata uniq "unique", yaitu tidak ada duanya "cuma satu-satunya yang seperti itu", program ini bisa digunakan untuk menghilangkan duplikasi baris pada file. Untuk menghilangkan duplikasi baris, bisa dilakukan dengan command seperti pada gambar.

Pada gambar command uniq digunakan untuk menghilangkan duplikasi pada file yang berisi baris seperti ini :
AAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFFFFFFFF
AAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBB
AAAAAAAAAAAAAAAAAAAAAAAAAA


Terdapat beberapa duplikasi baris, misal baris dengan huruf A tertulis sebanyak 4 kali. Setelah eksekusi command maka duplikasi menghilang begitu saja "clink.. dan jadi sulapan". Lalu, apakah semua itu terjadi dengan wajarnya? apakah semua itu terjadi karena program uniq mempunyai ilmu hitam yang bisa menghilangkan sesuatu? Tentu tidak kawan.


Oke, sekarang mari sedikit saja membuat program sederhana untuk menghilangkan duplikasi baris dengan menggunakan perl. Pertama kita membutuhkan sebuah fungsi untuk membuka file pada program seperti berikut :
open my $handle, '<', $ARGV[0];
chomp(my @lines = <$handle>);
close $handle;

Setelah array baris file didapat, selanjutnya dilakukan seleksi terhadap baris untuk filtering. Untuk melakukan filtering, digunakan trik melalui array khusus/hash. Data tipe hash ini merupakan array seperti pada umumnya, hanya saja array ini menggunakan key dan value. Berikut penerapan pada program :
my %hash = ();
foreach $line (@lines){
    my $oldval = $hash{$line}++;
    if($oldval eq 0){
        print $line."\n";
    }
}

Buat hash dengan menggunakan baris pada file, kemudian jika nilai variable oldval 0, maka baris belum terduplikasi.
Plus di belakang variabel artinya ambil nilai baru increment. Jadi hasil increment ini akan menjadi nilai value dan baris file menjadi keynya. Jika value 0 berarti belum pernah dilakukan operasi increment pada key atau baris file.

Full code 

Hasil eksekusi

Sudah diketahui apa yang terjadi ketika sebuah hash dilakukan increment dan hanya akan diambil hash dengan nilai awal 0, maka dengan hal tersebut, code bisa lebih disederhanakan menjadi seperti berikut :




~~ clink.. dan hilang..

Saturday, February 18, 2017

Belajar nyetir

Gran Turismo Playstation 1 Dengan OpenEmu

OpenEmu merupakan aplikasi yang menggabungkan bermacam-macam game konsol yang pernah ada. Dulu hanya sempat memiliki mesin SEGA genesis, tapi kali ini dengan komputer bisa mencoba banyak sekali game konsol. Cukup download ROM game nya dan mainkan. 
Baru kali ini aja punya mesin yang cukup mumpuni, lumayan untuk mengejar kata "pernah".

 Progamers in action xD~

Friday, February 10, 2017

Slackware 13.0 sebagai Access Point

Akses VNC dengan aplikasi screen sharing di mac.
 
Mesin lama yang masih berguna. Kali ini tidak sebagai alat ketik, melainkan sebagai gateway yang tidak berpindah tempat, lagipula baterai sudah tidak bisa terisi lagi.

 

Si linux (slackware 13.0) menjadi access point dengan nama "GEDANG", dengan bantuan software bernama hostapd. Ow iya, jika download hostapd dari slackbuild.org, harus diganti dulu source nya, jadikan versi minimal 2.0 yang sudah ada driver nl80211. Atau sesuaikan saja dengan card yang dipunya. Kalau di mesinku ada card ini :
# lspci | grep -i wire                                          
04:00.0 Ethernet controller: Atheros Communications Inc. AR5001 Wireless Network Adapter (rev 01)
Card ini jalan mulus sebagai AP dengan driver nl80211, berikut isi dari hostapd.conf :
interface=wlan0
ssid=GEDANG
hw_mode=g
channel=11
driver=nl80211
wpa=2
wpa_passphrase=いぉゔぇよう
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
Untuk IP sih sebenernya bisa bebas, mau manual seperti mode Ad-Hoc atau otomatis dengan DHCP server :D. Untuk dhcpd.conf bisa di setting seperti berikut :
ddns-update-style none;
default-lease-time -1;
max-lease-time 7200;
not-authoritative;
#
# default gateway
option routers 192.168.3.33;
#
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.3.255;
option domain-name-servers 208.67.222.222;

#
subnet 192.168.3.0 netmask 255.255.255.0
{
 next-server 192.168.3.1;

 range dynamic-bootp 192.168.3.200 192.168.3.248;
 option host-name "darkstar";
}
Jadi, IP yang di assign ke interface wlan0 adalah 192.168.3.33. IP ini akan digunakan sebagai gateway, dengan client dari ip ekor 200-248.


**
Edited hostapd.Slackbuild
PRGNAM=hostapd
VERSION=${VERSION:-2.0}
ARCH=${ARCH:-i486}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}

...
~ It is not quite clear, but you will understand after trying.