모름

유니티에서 현재 연결된 WIFI SSID를 가져오는 방법

 

저같은 경우는 목표한 WIFI를 윈도우에서 잡고 있는지 확인하기 위해서, 현재 연결된 와이파이와 목표한 와이파이의 SSID를 비교하였습니다. 이 때 사용한 방법입니다.

 

우선 프로세스를 실행합니다.

 

using System.Diagnostics;
Process p = new Process();
p.StartInfo.FileName = "netsh.exe";
p.StartInfo.Arguments = "wlan show interfaces";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
p.WaitForExit();

 

위와 같이 프로세스를 실행하면, cmd 에서 netsh wlan show interfaces 를 명령한 값과 같은 결과를 호출합니다.

 

 

위와 같은 결과를 유니티에서 string으로 아래와 같이 가져옵니다.

 

p.StandardOutput.ReadToEnd()

 

그런데 이 결과를 받아오려면 한글이 깨집니다. 보통 외부 string 값을 가져올때 유니티에선 utf-8 로 인코딩하고 디코딩해서 가져와야한다고 알고있습니다.

 

// utf-8 인코딩
byte[] bytesForEncoding = Encoding.UTF8.GetBytes(p.StandardOutput.ReadToEnd());
string encodedString = Convert.ToBase64String(bytesForEncoding);

// utf-8 디코딩
byte[] decodedBytes = Convert.FromBase64String(encodedString);
string decodedString = Encoding.UTF8.GetString(decodedBytes);

 

하지만 위와 같은 방식으로도 똑같이 한글이 깨져있습니다. 이것저것 해봤는데 어쨋든 한글이 깨지네요... 일단 SSID는 영어라 안깨지기에  패스합니다. (혹시 방법을 아시는 분은 알려주셔서 내용을 공유해주세요!)

 

그럼 받아온 String 을 한 줄 한 줄 읽어가면서 SSID가 있는 줄을 찾아냅니다. 우선 읽기 쉽도록 공백을 모두 지우고, String이 몇 줄인지 카운트합니다.

 

string output = Regex.Replace(decodedString, " ", "");
int lineCount = output.Split('\n').Length;

 

그리고 한 줄 한 줄 읽어가면서 해당하는 줄에 "SSID:" 이라는 단어가 있는지 검색합니다. 만약 "SSID:" 가 있으면 이는 와이파이에 연결된 것이고, SSID가 없으면 와이파이가 꺼져있거나 연결되어 있지 않은 상황일것입니다.

 

어쨌든 SSID: 를 찾으면 이것을 ""으로 Replace() 해줍니다. 그러면 해당하는 줄에 남은 단어는 WIFI의 SSID가 됩니다.

 

string result = "";
StringReader sr = new StringReader(output);
for (int i = 0; i < lineCount; i++)
{
  hasSSID = false;
  string line = sr.ReadLine();
  if (line == "") continue;
  if (line.Contains("SSID:"))
  {
    line = line.Replace("SSID:", "");
    result = line;
    hasSSID = true;
    break;
  }
}