كيف يمكنني الحصول على قائمة بالشبكات اللاسلكية المتاحة على نظام التشغيل Linux؟

StackOverflow https://stackoverflow.com/questions/400240

  •  03-07-2019
  •  | 
  •  

سؤال

أرغب في الحصول على قائمة بالشبكات اللاسلكية المتاحة.من الناحية المثالية، سيكون هذا عبر بعض مكالمات C، لكن لا أمانع إذا اضطررت إلى التلاعب بها من خلال استدعاء النظام.والأفضل من ذلك أن مكالمة C أو البرنامج المطلوب لا يتطلب بعض حزم الطرف الثالث الغريبة.

يبدو أن الإنترنت يشير إلى أنني أستخدمه sudo iwlist <interface> scan والذي يبدو أنه يقوم بالخدعة من سطر الأوامر، لكنني أفضل عدم طلب أذونات الجذر.أريد فقط رؤية الأساسيات، وليس تغيير أي شيء.

هل كانت مفيدة؟

المحلول

ال أدوات لاسلكية الحزمة - منها com.iwlist جزء - يحتوي أيضًا على مكتبة مساعد الأدوات اللاسلكية.تحتاج إلى تضمين iwlib.h والارتباط مع libiw.a (أي.إضافة -liw).ثم ابحث عن الوثائق الخاصة بـ iw_set_ext وظيفة.ال SIOCSIWSCAN ستكون المعلمة ذات فائدة كبيرة.للحصول على مثال لكيفية استخدام هذه الواجهة، قم بإلقاء نظرة على مصدر KWifiManager في مكتبة KDE (انظر: Interface_wireless_wirelessextensions::get_available_networks طريقة).وبدلاً من ذلك، يمكنك أيضًا تنزيل كود مصدر الأدوات اللاسلكية وألق نظرة على كيفية استخدام وظيفة iwlib iw_set_ext أيضًا للمسح الضوئي في iwlist.c.

أما بالنسبة للامتيازات، فأنا أتصور أن العملية ستحتاج إلى تشغيلها كجذر لإجراء الفحص.أود أن أعرف ما إذا كان من الممكن القيام بذلك بطريقة أخرى أيضًا.

نظرًا لأنك تستخدم Ubuntu 8.04 libiw-dev يجب أن تكون الحزمة ذات فائدة.

نصائح أخرى

من السهل جدًا إجراء فحص في سطر الأوامر.صفحات الرجل هي صديقك هنا (راجع com.iwconfig و com.iwlist).لكن استخدام واجهة C أصعب قليلاً لذا سأركز على ذلك.

أولاً وقبل كل شيء، كما ذكر أشخاص آخرون، قم بالتأكيد بتنزيل ملف كود مصدر الأدوات اللاسلكية.جميع الوثائق الخاصة بواجهة البرمجة موجودة في ملف ج ملفات.بقدر ما أستطيع أن أقول، لا توجد وثائق ويب لواجهة برمجة التطبيقات.ومع ذلك، من السهل جدًا قراءة الكود المصدري.أنت بحاجة إلى حد كبير فقط iwlib.h و iwlib.c لهذا السؤال.

بينما يمكنك استخدام iw_set_ext و iw_get_ext, ، ال com.libiw ينفذ وظيفة المسح الأساسية iw_scan, ، والذي يمكنك من خلاله استخراج معظم المعلومات التي تحتاجها.

إليك برنامج بسيط للحصول على ESSID لجميع الشبكات اللاسلكية المتاحة.جمع مع -liw وتشغيل مع sudo.

#include <stdio.h>
#include <time.h>
#include <iwlib.h>

int main(void) {
  wireless_scan_head head;
  wireless_scan *result;
  iwrange range;
  int sock;

  /* Open socket to kernel */
  sock = iw_sockets_open();

  /* Get some metadata to use for scanning */
  if (iw_get_range_info(sock, "wlan0", &range) < 0) {
    printf("Error during iw_get_range_info. Aborting.\n");
    exit(2);
  }

  /* Perform the scan */
  if (iw_scan(sock, "wlan0", range.we_version_compiled, &head) < 0) {
    printf("Error during iw_scan. Aborting.\n");
    exit(2);
  }

  /* Traverse the results */
  result = head.result;
  while (NULL != result) {
    printf("%s\n", result->b.essid);
    result = result->next;
  }

  exit(0);
}

تنصل:هذا مجرد برنامج توضيحي.من الممكن أن لا تحتوي بعض النتائج على essid.بالإضافة إلى ذلك، يفترض هذا أن الواجهة اللاسلكية لديك هي "wlan0".انت وجدت الفكرة.

إقرأ ال com.iwlib مصدر الرمز!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top