- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
Viết chương trình kiểm tra tín hiệu mạng, lấy địa chỉ MAC wifi bằng C#
Hôm nay, mình xin viết bài hướng dẫn các bạn viết một ứng dụng bằng ngôn ngữ C# quét các bạn xung quanh, lấy địa chỉ MAC và kiểm tra tín hiệu của các mạng wifi xung quanh mình.
Giao diện chương trình như hình bên dưới:
Thực ra, bài viết này sử dụng câu lệnh của MS-DOS: lệnh Netsh, để liệt kê và thấy các thông tin như: địa chỉ Mac, tín hiệu wifi ....
wlan show networks mode=bssid
Các bạn có thể vào chương trình CMD: (Windows +R => cmd =>enter)
Bạn gõ vào lệnh sau: bạn sẽ thấy kết quả trả về các tín hiệu wifi như hình dưới đây:
- Đầu tiên các bạn cần imports thư viện vào:
using System.IO;
using System.Media;
- Sau đó các bạn viết một function scan sau: để get dữ liệu vào list box:
private void Scan()
{
string output;
string line;
int BSSIDNumber = 0;
int NetworkIndex = -1;
string[,] Networks = new string[100, 9];
listView1.SmallImageList = imageSignalLevel;
Process proc = new Process();
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.FileName = "netsh";
proc.StartInfo.Arguments = "wlan show networks mode=bssid";
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false; // required for the Redirect setting above Process.Start(proc);
proc.Start();
output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
StringReader sr = new StringReader(output.ToString());
line = null;
while ((line = sr.ReadLine()) != null)
{
if (line.StartsWith("General Failure"))
{
// Wifi disconnected or not installed
break;
}
if (line.StartsWith("SSID"))
{
NetworkIndex++;
for (int i = 0; i < 9; i++)
{
Networks[NetworkIndex, i] = " "; // prevent exception finding null on search
}
Networks[NetworkIndex, 3] = "0%"; // prevent exception for trim
BSSIDNumber = 0;// reset the BSSID number
Networks[NetworkIndex, 1] = line.Substring(line.IndexOf(":") + 1).TrimEnd(' ').TrimStart(' ');
continue;
}
if (line.IndexOf("Network type") > 0)
{
if (line.EndsWith("Infrastructure"))
{
Networks[NetworkIndex, 7] = "AP";
continue;
}
else
{
Networks[NetworkIndex, 7] = line.Substring(line.IndexOf(":") + 1); //"Ad-hoc";
}
}
if (line.IndexOf("Authentication") > 0)
{
Networks[NetworkIndex, 4] = line.Substring(line.IndexOf(":") + 1).TrimStart(' ').TrimEnd(' ');
continue;
}
if (line.IndexOf("Encryption") > 0)
{
Networks[NetworkIndex, 5] = line.Substring(line.IndexOf(":") + 1).TrimStart(' ').TrimEnd(' ');
continue;
}
if (line.IndexOf("BSSID") > 0)
{
if ((Convert.ToInt32(line.IndexOf("BSSID" + 6)) > BSSIDNumber))
{
BSSIDNumber = Convert.ToInt32(line.IndexOf("BSSID" + 6));
NetworkIndex++;
Networks[NetworkIndex, 1] = Networks[NetworkIndex - 1, 1]; // same SSID
Networks[NetworkIndex, 7] = Networks[NetworkIndex - 1, 7]; // same Network Type
Networks[NetworkIndex, 4] = Networks[NetworkIndex - 1, 4]; // Same authorization
Networks[NetworkIndex, 5] = Networks[NetworkIndex - 1, 5]; // same encryption
}
Networks[NetworkIndex, 0] = line.Substring(line.IndexOf(":") + 1);
continue;
}
if (line.IndexOf("Signal") > 0)
{
Networks[NetworkIndex, 3] = line.Substring(line.IndexOf(":") + 1);
continue;
}
if (line.IndexOf("Radio Type") > 0)
{
Networks[NetworkIndex, 6] = line.Substring(line.IndexOf(":") + 1);
continue;
}
if (line.IndexOf("Channel") > 0)
{
Networks[NetworkIndex, 2] = line.Substring(line.IndexOf(":") + 1);
continue;
}
if (line.IndexOf("Basic Rates") > 0)
{
//Networks[NetworkIndex, 8] = line.Substring(line.Length - 2, 2);
Networks[NetworkIndex, 8] = line.Substring(line.IndexOf(":"));
if (Networks[NetworkIndex, 8] == ":") { Networks[NetworkIndex, 8] = "not shown"; continue; }
Networks[NetworkIndex, 8] = Networks[NetworkIndex, 8].TrimStart(':').TrimStart(' ').TrimEnd(' ');
for (int i = Networks[NetworkIndex, 8].Length - 1; i > 0; i--)
{
if (Networks[NetworkIndex, 8].Substring(i, 1) == " ")
{
Networks[NetworkIndex, 8] = Networks[NetworkIndex, 8].Substring(i + 1, Networks[NetworkIndex, 8].Length - 1 - i);
break;
}
}
}
if (line.IndexOf("Other Rates") > 0)
{
// overwrite the basic rates if this entry is present
Networks[NetworkIndex, 8] = line.Substring(line.IndexOf(":"));
if (Networks[NetworkIndex, 8] == ":") { Networks[NetworkIndex, 8] = "not shown"; continue; }
Networks[NetworkIndex, 8] = Networks[NetworkIndex, 8].TrimStart(':').TrimStart(' ').TrimEnd(' ');
for (int i = Networks[NetworkIndex, 8].Length - 1; i >= 0; i--)
{
if (Networks[NetworkIndex, 8].Substring(i, 1) == " ")
{
Networks[NetworkIndex, 8] = Networks[NetworkIndex, 8].Substring(i + 1, Networks[NetworkIndex, 8].Length - 1 - i);
break;
}
}
}
}
for (int i = 0; i < listView1.Items.Count; i++)
{
// set signal to zero on all items in list
listView1.Items[i].SubItems[3].Text = "0%";
listView1.Items[i].ImageIndex = 5;
}
for (int i = 0; i < NetworkIndex + 1; i++)
{
ListViewItem SearchItem = new ListViewItem();
if (Networks[i, 0] == " ") continue; // don't search if no valid MAC Address !
SearchItem = listView1.FindItemWithText(Networks[i, 0]);
if (SearchItem == null)
{
// New discovery - add it to the list
SystemSounds.Hand.Play();
listView1.Items.Add(Networks[i,0]); // MAC Address
listView1.Items[listView1.Items.Count-1].SubItems.Add( Networks[i, 1]); // SSID
listView1.Items[listView1.Items.Count-1].SubItems.Add( Networks[i, 2]); // Channel
listView1.Items[listView1.Items.Count-1].SubItems.Add( Networks[i, 3]); // Signal
listView1.Items[listView1.Items.Count-1].SubItems.Add( Networks[i, 4]); // Authenticatiopn
listView1.Items[listView1.Items.Count-1].SubItems.Add( Networks[i, 5]); // Encryption
listView1.Items[listView1.Items.Count-1].SubItems.Add( Networks[i, 6]); // Radio Type
listView1.Items[listView1.Items.Count-1].SubItems.Add( Networks[i, 7]); // Network Type
listView1.Items[listView1.Items.Count-1].SubItems.Add( Networks[i, 8]); // Speed
int SignalInt = Convert.ToInt32(Networks[i, 3].TrimEnd(' ').TrimEnd('%'));
if (SignalInt > 50) listView1.Items[listView1.Items.Count - 1].ImageIndex = 0;
else if (SignalInt > 40) listView1.Items[listView1.Items.Count - 1].ImageIndex = 1;
else if (SignalInt > 30) listView1.Items[listView1.Items.Count - 1].ImageIndex = 2;
else if (SignalInt > 20) listView1.Items[listView1.Items.Count - 1].ImageIndex = 3;
else if (SignalInt > 0) listView1.Items[listView1.Items.Count - 1].ImageIndex = 4;
if ((Networks[i, 4] == "Open") & (Networks[i, 5] == "None")) listView1.Items[listView1.Items.Count - 1].BackColor = Color.PaleGreen;
listView1.Items[listView1.Items.Count - 1].EnsureVisible();
}
else
{
// Already in list - update Signal and other details that may change
listView1.Items[SearchItem.Index].SubItems[3].Text = Networks[i, 3]; // Signal
// Don't change any details if blank
if (Networks[i,1] != null) listView1.Items[SearchItem.Index].SubItems[1].Text = Networks[i, 1]; // SSID
if (Networks[i, 4] != null) listView1.Items[SearchItem.Index].SubItems[4].Text = Networks[i, 4]; // Authenticatiopn
if (Networks[i, 5] != null) listView1.Items[SearchItem.Index].SubItems[5].Text = Networks[i, 5]; // Encryption
if (Networks[i, 6] != null) listView1.Items[SearchItem.Index].SubItems[6].Text = Networks[i, 6]; // Radio Type
if (Networks[i, 7] != null) listView1.Items[SearchItem.Index].SubItems[7].Text = Networks[i, 7]; // Network Type
if (Networks[i, 8] != null) listView1.Items[SearchItem.Index].SubItems[8].Text = Networks[i, 8]; // Speed
int SignalInt = Convert.ToInt32(Networks[i, 3].TrimEnd(' ').TrimEnd('%'));
if (SignalInt > 50) listView1.Items[SearchItem.Index].ImageIndex = 0;
else if (SignalInt > 40) listView1.Items[SearchItem.Index].ImageIndex = 1;
else if (SignalInt > 30) listView1.Items[SearchItem.Index].ImageIndex = 2;
else if (SignalInt > 20) listView1.Items[SearchItem.Index].ImageIndex = 3;
else if (SignalInt > 0 ) listView1.Items[SearchItem.Index].ImageIndex = 4;
else if (SignalInt == 0) listView1.Items[SearchItem.Index].ImageIndex = 5;
}
}
}
- Sau đó các bạn gọi hàm Scan(), khi nhấn vào button dò tìm:
private void btnScan_Click(object sender, EventArgs e)
{
Scan();
}
Chúc các bạn thành công!
Nếu thấy hay xin các bạn hãy like và share để ủng hộ chúng mình. Xin cảm ơn các bạn