- [C#] Hướng dẫn giải nén file *.rar với tiến trình progress bar winform
- [C#] Chia sẻ source code make Crazy Error Message Effect Bomb Windows
- [C#] Lập trình ứng dụng theo mô hình MVP Model-View-Presenter Pattern Winform
- [C#] Giới thiệu và những thứ hay ho từ thư viện System.Reactive của Microsoft
- [C#] Hướng dẫn tạo ứng dụng Chat với GPT sử dụng Open AI API
- [DEVEXPRESS] Tạo month picker trên DateEdit Winform C#
- [DATABASE] Cách sử dụng và lưu ý khi sử dụng khóa ngoại (Foreign Key) trong Sqlserver
- [C#] Garbage Collector (GC) là gì? Cách giải phóng bộ nhớ trên ứng dụng Winform khi các đối tượng không còn sử dụng
- [C#] Cách tính độ tương phản màu sắc Contrast Color mà con người có thể nhìn thấy được
- [C#] Hướng dẫn mã hóa mật khẩu tài khoản ứng dụng đúng chuẩn Men
- [C#] Sử dụng Open AI Chat GPT viết ứng dụng Count down timer có hiệu ứng trên winform
- [DATABASE] Chia sẻ dữ liệu Pantone Color sql và json api
- [SQLSERVER] Tạo mã sản phẩm tự động như: SP0001, SP0002, SP0003... sử dụng Trigger
- [C#] Hướng dẫn kiểm tra phiên bản NET Framework cài đặt ở máy tính
- [C#] Hướng dẫn đọc file excel đơn giản sử dụng thư viện Epplus
- [C#] ConcurrentBag là gì và cách sử dụng nó trong lập trình bất đồng bộ
- [C#] AutoResetEvent là gì và cách sử dụng
- [DEVEXPRESS] Chia sẻ source code cách tạo biểu đồ sơ đồ tổ chức công ty Org Chart trên Winform C#
- [C#] Hướng dẫn tạo Auto Number trên Datagridview winform
- [DATABASE] Hướng dẫn tạo Procedure String Split in Mysql
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