- [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
- Hướng dẫn khóa file bằng nhiều process id, không cho xóa tập tin
- Hướng dẫn cách tạo Product Id cho ứng dụng phần mềm XXXXX-XXXXX-XXXXX-XXXXX
- [SQLSERVER] Hướng dẫn tạo script sql từ ứng dụng Sqlserver management Studio
- [C#] Hướng dẫn sử dụng thư viện AutoITx lấy id và password Ultraviewer trên winform
- [VB.NET] Hướng dẫn lấy thông tin tài khoản đăng nhập windows và khởi động lại ứng dụng ở chế độ Administrator
- [C#] Sử dụng thư viện Polly gửi lại request api khi request bị lỗi hay rớt mạng
- [DEVEXPRESS] Chia sẻ source code tạo báo cáo report in tem nhãn label trên C# winform
- [DEVEXPRESS] Hướng dẫn vẽ biểu đồ Bar Chart trên Winform
- [C#] Tạo form đăng nhập và đăng ký với hiệu ứng Sliding Animation Effect
- [C#] Hướng dẫn tạo thanh toán đơn hàng qua mã vạch VietQR sử dụng API PayOS hoàn toàn miễn phí
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