קבלת מספר MAC בלינוקס בצורה תכנותית

שאלו שאלה כללית באחד רשימות הדיוור שאני מנוי עליהם איך: לקבל בצורה תכנותית את מספר ה MAC של רכיב רשת בלינוקס ?

אני מכיר 2 דרכים: האחת להשתמש בספרייה בסגנון של libnet, והשנייה פשוטה יותר. החלטתי ליצור קוד quick and dirty שמדגים איך לעשות את הדרך הפשוטה יותר (הקוד כאן מוגש כקוד עבור לימוד בלבד, ולא נועד לשימוש אחר):

{$mode objfpc}
program get_mac;
uses sysutils;

const
  linux_path     = '/sys/class/net/%s/address';
  default_device = 'eth0';

var
  f       : textfile;
  device,
  path,
  addr    : string;

begin
  device := default_device;

  if (ParamCount = 1) then
   begin
    device := ParamStr(1);
   end;

  path := Format(linux_path,[device]);
  if Not FileExists(path) then
    begin
     writeln('Could not find the device: ', device);
     halt(1);
    end;

  AssignFile(f, path);
  reset(f);
  readln(f,addr);
  closefile(f);

  writeln(device, ' MAC Address: ', addr);
end.

מה קורה כאן בעצם ? תחת הספרייה של:

/sys/class/net

יושבים קישורים לכל device הקיים כרגע עבור תקשורת בלינוקס. תחת ספריית ה device, יש קובץ בשם address אשר מכיל את מספר הMAC של אותו device.

הקוד בעצם קורא את הקובץ הזה בהתאם ל device שהוא ברירת מחדל או התקבל כפרמטר (בודד) מהמשתמש, ובמידה והקובץ קיים, הוא מדפיס את התוכן שלו. חשוב גם לבדוק הרשאות קריאה של הקובץ, אם בכלל יש תוכן לקובץ ועוד כמה דברים (שהתוכנית הקצרה שלי לא עושה), כמו כן, אפשר לעשות את זה בצורה יותר אלגנטית וקצרה גם בקוד הפסקל כאן, אבל סה"כ כמו שאפשר לראות זה יותר מידי פשוט ולא דורש פעולות מיוחדות של מערכת הפעלה כלשהי או ספרייה מיוחדת, וזה יעבוד בכל מערכת לינוקס מודרנית.

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s