Tag-Archive for » mac address «

Monday, November 19th, 2007 | Author: Riza

Beberapa hari yang lalu aku bikin fungsi untuk mengambil MAC Address dari ethernet card. Fungsinya aku beri nama GetMacAddress(AEthNumber: Byte). Kembalian dari fungsi ini adalah string dari MAC address ethernet card ber-index AEthNumber. Kalau PC hanya mempunyai sebuah ethernet card, AEthNumber bisa diisi dengan 0 (nol). Fungsi GetMacAddress memanfaatkan unit NB30 bawaan delphi yang berisi beberapa record serta fungsi untuk mengambil informasi network device melalui NetBios.

Mumpung inget, tak dokumentasikan di sini. Sekalian share kali aja ada yang perlu. Code-nya seperti di bawah ini.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
uses NB30;
 
function GetMacAddress(AEthNumber: Byte): string;
var
  ncb: PNCB;
  errorCode: Char;
  adapter: PAdapterStatus;
begin
 
  New(ncb);
  { Inisiasi isi memory pada pointer ncb dengan char 0 };
  FillChar(ncb^, SizeOf(TNCB), 0);
  ncb^.ncb_command := Char(NCBRESET);
  ncb^.ncb_lana_num := Char(AEthNumber);
  errorCode := NetBios(ncb);
 
  { Reset kembali isi memory pointer nbc dengan char 0 };
  FillChar(ncb^, SizeOf(TNCB), 0);
  ncb^.ncb_command := Char(NCBASTAT);
  ncb^.ncb_lana_num := Char(AEthNumber);
  { Harus berisi 16 karakter }
 
  StrPCopy(ncb^.ncb_callname, '*         ');
 
  New(adapter);
  FillChar(adapter^, SizeOf(TAdapterStatus), 0);
  ncb^.ncb_buffer := Pointer(adapter);
  ncb^.ncb_length := SizeOf(TAdapterStatus);
 
  errorCode := NetBios(ncb);
  if (errorCode = Char(NRC_GOODRET)) or
  (errorCode = Char(NRC_INCOMP)) then
    Result := IntToHex(Ord(adapter^.adapter_address[0]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[1]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[2]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[3]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[4]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[5]), 2)
  else
    Result := '00-00-00-00-00-00';
 
  Dispose(ncb);
  Dispose(adapter);
end;

Begitu saja semoga bermanfaat. Kali aja ada yang mau ikutan nambahin.