Kamis, 29 Desember 2011

Install DNS di Ubuntu

Selamat pagiii semua :)

Hari ini saya mau posting tentang step - step cara install dns server di ubuntu 10.10. Walaupun sudah banyak yang tulis mengenai tutorial install dns server, tapi ga salah kan kalo kita buka-buka lagi :)

Pertama yang harus diinstall itu bind9, ketik : sudo apt-get install bind9

Lalu kita edit file named.conf.local, gunakan editor kesayangan kalian aja ya :) 
ketik : sudo vim /etc/bind/named.conf.local

Lalu edit file tersebut guna menambahkan zone untuk domain kita, misalnya :

zone "ardi.com" {
      type master;
      notify no;
      file "/etc/bind/db,ardi.com";
};

Kemudian kita save, bisa dilihat type master menunjukan kalau kita penguasa domain tersebut. Lalu notify no menunjukkan bahwa domain ini tidak tersebar di internet dan informasi tentang anggota domain terdapat dalam file db.ardi.com.
Setelah domain sudah dibuat, kemudian kita edit file db.ardi.com. Untuk lebih mudah kita kopi dari file db.local. 
Ketik : sudo cp /etc/bind/db.local  /etc/bind/db.ardi.com
Kita edit isinya menjadi seperti ini :

$TTL            604800
@                  IN           SOA            ns.ardi.com.      webmaster.ardi.com.   (
                                                                    2                    ;  Serial
                                                          604800                    ;  Refresh
                                                            86400                    ;  Retry
                                                        2419200                    ;  Expire
                                                          604800 )                  ;  Negative Cache TTL
;

                                     NS               ns.ardi.com.
                                     MX              10  mail.ardi.com.
mail               IN           A                 192.168.0.122
ns                   IN          A                 192.168.0.135
www             IN          CNAME       ns
pemula           IN         CNAME       ns

Sabtu, 24 Desember 2011

Comand comand ISO 7816 - 4

Hallo hari ini mau melanjutkan postingan mengenai ISO 7816 - 4. Sekarang kita bahas command apa saja yang didukung oleh ISO 7816 - 4.
Ada banyak command yang mendukung ISO 7816 - 4 :
  1. Read Binary Command
  2. Write Binary Command
  3. Update Binary Command
  4. Erase Binary Command
  5. Read Record(S) Command
  6. Write Record Command
  7. Append Record Command
  8. Update Record Command
  9. Get Data Command
  10. Put Data Command
  11. Select File Command
  12. Verify Command
  13. Internal Authenticate Command
  14. External Authenticate Command
  15. Get Challenge Command
  16. Manage Chanel Command

Jumat, 23 Desember 2011

Introduction C# : Hello World

Hari ini mau tulis tentang C#,tapi masih sederhana dulu ya :)
Langsung aja ke kodenya ya :


using System;

namespace Csharp
{
  class Program
{
static void Main(String[] args)
{
Console.Write("Hello Dunia !! ");
}
}
}


Mirip seperti Java bukan ?? :D
Bisa dilihat disitu ada syntax namespace yang berguna untuk menentukan scope atau bisa dibilang ruang lingkup.
Kalau masih kurang jelas bisa lihat langsung di sini

Sekian dulu ya, nanti kita sambung lagi :)

Sabtu, 10 Desember 2011

Format Command APDU ISO 7816 - 4

Sebelum kita melanjutkan postingan tentang command APDU, terlebih dahulu kita harus tahu apa itu APDU. APDU (Application Protocol Data Unit) adalah protokol yang digunakan untuk berkomunikasi antara smart card reader dan smart card.
Berikut format dari APDU yang dikirim smart card reader ke smart card

CLA | INS | P1 - P2 | Lc Field | Data field | Le field |

Note : 
CLA : Class of instructions
INS   : Instructions Code  (command APDU)
P1     : Instructions parameter 1
P2     : Instructions parameter 2
Lc     : Number of bytes presents in data field of the command
Data  : String of bytes sent in data field of the command
Le     : Maximum number of bytes expected in the data field of the response to the command

Lalu ini format response yang diterima oleh smart card reader

Data | SW1 | SW2 |

Data             : Response data
SW1 - SW2 : Processing status yang mengindikasikan itu sukses atau tidak.

Jika kurang jelas, kalian bisa lihat di sini

Sekian dari saya mengenai pengenalan format command apdu :)

Array Function Pointer

Masih di topik yang sama, yakni function pointer. Topik sekarang yakni Array Function Pointer, jadi Array  tersebut berisi fungsi - fungsi. Dari pada bak bik buk, langsung aja liat kodenya :

file functions.h :
#define pointer_functions

#ifdef pointer_functions
int sum (int a, int b);
int subtract (int a, int b);
int multiply (int a, int b);
int devide (int a, int b);

#endif

File functions.c :
#include <stdio.h>
#include <string.h>
#include "functions.h"

int sum (int a, int b) {
return a + b;
}

int subtract (int a, int b) {
return a - b;
}

int multiply (int a, int b) {
return a * b;
}

int devide (int a, int b) {
if ( b )
return a/b;
else
0;
}

File main.c
#include <stdio.h>
#include <string.h>
#include "functions.h"

void main() {
int a = 2;
int b = 4;
int ( *p [5] ) ( int , int ) = { sum,  subtract,  multiply,  devide };
int r;

r = p[0](a, b);

        printf("result %d\n", r);
}

hasil run :
result 6

Bisa dilihat kalau tiap fungsi yang ada di file functions.c dimasukin dalam array p, bisa dikatakan diregister ke dalam array tersebut. Kemudian dalam array tersebut bisa dipanggil. Kalau kurang jelas bisa dilihat di sini

Note : ini digunakan jika kita mempunyai fungsi yang sama, dan kita memiliki alur program yang sama sehingga hanya memanggil tiap fungsi tersebut sebagai menjadi per state.

Sekian, terima kasih :)

Jumat, 09 Desember 2011

Function Pointer

Hari ini mau tulis tentang function pointer. Langsung aja ke kode ya

#include <string.h>
#include <stdio.h>

void (*p)(char *);


void function(char *param) {
printf("param %s\n", param);
}

void main() {
char buff[100] = "learn pointer function";

p = &function;

        p(buff);
}

result : param learn pointer function

Coba perhatikan p = &function, bisa diperhatikan kalau p sebagai pointer yang kemudian menunjuk ke fungsi function, jadi seolah - olah p itu ada fungsi dari function. Itu seperti terlihat miror.

Keuntungan menggunakan cara ini adalah,
  • Bisa digunakan untuk passing fungsi sebagai parameter pada fungsi
  • Lebih flexibel, karena fungsi itu berupa variabel
Sekian dari saya, jika kurang jelas bisa lihat di sini

Terima kasih

Kamis, 08 Desember 2011

ISO 7816 - 4

Kali ini saya mau tulis tentang iso 7816-4. Sedikit intro, iso 7816 - 4 itu digunakan pada smart card yang sudah ada sekarang mereka menggunaka APDU messages. Sepengetahuan saya, yang menggunakan APDU messages itu Desfire (dari keluaraga nfc) dan EMV.

Tapi kali ini saya hanya memberikan pendahuluan tentang apa yang perlu diketahui dari iso 7816 - 4 :

  1. Isi messsage, command(perintah) dan response dari device (dalam hal ini bisa Electronic Data Capture untuk keluarga EMV dan PCD untuk keluarga NFC)
  2. Struktur dan kontent dari byte yg dikirim sebelumnya oleh kartu selama ATR (Answer To Reset)
  3. Struktur dari data dan files
  4. Metode akses pada file - file dan data dalam kartu
  5. Metode akses untuk proses algoritma oleh kartu
Untuk bagian isinya nanti saya akan posting lagi :)

Sekian dulu

Belajar Makro di C

Hari ini mau belajar makro di C. Di makro kita kenal namanya syantax #define, #ifdef#ifndef#endif dll.
Berikut penjelasannya :

  1. #define, digunakan untuk mendefinisikan sesuatu menjadi hal yg umum
  2. #ifdef digunakan dalam kondisi jika variable itu sudah di define dalam makro maka kolom yg ada dalam #ifdef akan dieksekusi
  3. #ifndef, kebalikan dari #ifdef. Jika tidak dijelaskan dalam makro makanya kolom dalam #ifndef tersebut dieksekusi
  4. #endif, untuk mengakhiri kondisi dari makro #ifdef dan #ifndef
Saya punya petikan kode


#include<stdio.h>
#include<string.h>

#define HAPUS(a)        memset(a, 0x00, sizeof(a))
#define COPY(a, b)      memcpy(b, a, sizeof(b))

#define mymakro

void main(){
        char buff[255];
        char source[255] = "Mari kita lihat makro";

        HAPUS(buff);

#ifdef mymakro
        COPY(source, buff);
#endif

        printf("result : %s\n", buff);
}

kalau diliat ada fungsi makro HAPUS() dan COPY(), itu menjelaskan kalo kita bisa membuat fungsi makro mengunakan #define. Kemudian yang ada didalam kolom mymakro itu dieksekusi, itu karena sebelumnya sudah kita definisikan makro mymakro, jika tidak didefinisikan maka variable buff masih kosong. 

Kira - kira begitu cara mainnya. Sekian dari saya

Terima kasih

Senin, 05 Desember 2011

Port forwarding menggunakan rinet

Halo,
Kali ini saya mau tulis gimana cara melakukan port forwarding menggunakan rinet. Ini saya lakukan pada ubuntu 10.10.
Langkah - langkahnya :

  1. Install rinet : sudo apt-get install rinetd
  2. kemudian edit file rinetd.conf : vim /etc/rinetd.conf (saya menggunakan editor vim)
  3. restart rinetd : sudo service rinetd restart
Isi file rinetd.conf :

#ipaddrsource     #portsource      #ipaddrdest       #portdest
192.168.7.7            1010              10.10.10.1         8205

penjelasan :
Jadi setiap paket data yg lewat ip 192.168.7.7 dan port 1010 itu akan disalurkan ke ip 10.10.10.1 dan port 8205

Mudah bukan :)

Sekian tulisan dari saya

Kamis, 17 November 2011

Copy string ke member struct

Hari ini mau tulis mengenai cara kopi string ke member struct yg berbentuk array of char. Misalkan ada struct yang bentuknya begini :

typedef struct {
      char member1[10];
      char member2 [15];
}st;

lalu ada string (array of char) seperti ini :

char buff[70] = "Hari ini kita belajar programing bahasa C dengan bahasan struct";

lalu untuk mengkopinya, kita menggunakan memcpy, berikut cuplikan codenya :

st myST;
memcpy(myST.member1, &buff[0], 9);
memcpy(myST.member2, &buff[10], 14);
printf("member1  %s", myST.member1);
printf("member2  %s", myST.member2);

outputnya :

member1 Hari ini k
member2 ita belajar pro

Tapi jika codenya kita salah tulis size num, misalnya :

memcpy(myST.member1, &buff[0], 10);
printf("member1  %s", myST.member1);

maka yg nantinya ke print

member1 Hari ini kita belajar prog

bisa dilihat walaupun yg ingin kita kopi 10 tapi yg ke kopi malah 25, itu karena setiap member dalam struct itu saling berhubungan. Jadi bisa dibilang ukurannya adalah jumlah size dari 2 member dalam struct tersebut.

*sekedar info panjang buff diatas itu 63

Jumat, 22 Juli 2011

Kirim data melalui RS232 dengan C

 Assalamualaikum
Hari ini saya mau nulis tentang gmn caranya ngirim data melalui RS232 menggunakan bahasa C. Caranya sangat mudah sekaliiii....download dlu fungsinya di sini

Nah ini contoh kode yg saya buat :

#include <stdio.h>
#include"RS-232/rs232.h"

void pack(char packbuff[]){
unsigned char buff[255];
int i;

buff[0] = 0x10; //stx 2B
buff[1] = 0x02;
buff[2] = 0x01; //cmd 2B
buff[3] = 0x00;
buff[4] = 0x00; //SN 1B
buff[5] = 0x00; //RFU 2B
buff[6] = 0x00;
buff[7] = 0x00; //bno 2B
buff[8] = 0x00;
buff[9] = 0x00; //dlen 2B
buff[10] = 0x06;
buff[11] = 0x03; //data
buff[12] = 0x05;
buff[13] = 0x05;
buff[14] = 0x41;
buff[15] = 0x42;
buff[16] = 0x43;
buff[17] = 0x44; //LRC
buff[18] = 0x10; //ETX 2B
buff[19] = 0x03;

for(i = 0; i < 20; i++){
packbuff[i] = buff[i];
}

}

int main(){
int ret, size;
unsigned char sbuff[20];
unsigned char rbuff[255];

/* OPEN COM PORT */
ret = OpenComport(16, 38400);
if (ret != 0){
printf("FAIL OPEN COM PORT\n");
goto lbl_END;
}

pack(sbuff);

/* SEND DATA */
ret = SendBuf(16, sbuff, 20);
if (ret < 0){
printf("FAIL SEND DATA\n");
goto lbl_END;
}


ret = PollComport(16, rbuff, size);

printf("size %d\n", strlen(rbuff));

/* Close COM PORT */
CloseComport(16);

lbl_END:
return 0;
}

Kalau diliat kodenya sangat mudah bukan, waktu itu saya coba gunakan untuk ngirim data dari PC ke PC. Kalau kurang lengkap bisa liat di sini, Oh iya saya juga sudah tulis di web linux jakarta
Sekian dari saya
Wassalamuaalikum