유용하게 활용 가능한 배치 파일 만들기

이번에는 기존에 적었던 배치파일을 활용하여 와이파이를 필터하는 방법입니다.




M-CAS Auto LTE 라우터


MCAS Auto

산업안전을 위한 무스마 크레인 충돌방지 모니터링 시스템 증 하나인 M-CAS Auto는 여러 시행착오를 거쳐 현재 LTE 라우터로 통신하고 있습니다.


MXR-440KD

모델은 (주)멕서스 MXR-440KD, 현장에서 사용하는 태블릿이 와이파이로 연결됩니다.




와이파이 리스트


Wifi 리스트

예시 화면


와이파이를 클릭하면 리스트가 정말 많이 나옵니다.

저희 사내에서도 많이 나오고 크레인이 설치된 현장에서도 많이 나옵니다.


LTE 연결이 간헐적으로 끊어졌을 때 설치된 현장의 개방된 WIFI에 자동으로 연결되어 보안에 취약하며 불안정한 인터넷 상태를 유지하는 경우를 접하게 되었습니다.


게다가 옆 크레인에 설치된 LTE 라우터와 동일한 Wi-Fi SSID명을 사용하니 의도하지 않은 Wi-Fi에 붙어서 불안정한 연결이 유지되어 붙었다 끊겼다를 반복하는 경우도 있었습니다.


그래서 저희는 SSID를 구분해서 사용하며 하나의 와이파이만 표시하기를 원했습니다.


  • 와이파이 필터 후 연결

    ::목록에 모든 wifi 제거 필터 추가
    netsh wlan add filter permission=denyall networktype=infrastructure 
    ::목록에 설정한ssid 추가 필터 추가
    netsh wlan add filter permission=allow ssid="ssid명" networktype=infrastructure 
    ::ssid에 연결
    netsh wlan connect name="ssid명" ssid="ssid명" 
    ::자동연결 모드로 변경
    netsh wlan set profileparameter name="ssid명" connectionmode=auto
    


  • 와이파이 필터 제거

    ::목록에 모든 wifi 제거 필터 제거
    netsh wlan delete filter permission=denyall networktype=infrastructure
    ::목록에 설정한 ssid 추가 필터 제거
    netsh wlan delete filter permission=allow ssid="ssid명" networktype=infrastructure 
    


Wifi 필터링

이런 모습입니다! 허용한 Wi-Fi SSID만 리스트에 나타납니다.




배치파일 만들기

그래서 Wi-Fi를 필터하고 필터 해제하는 배치 파일을 만드는 프로그램을 만들었습니다.

아래는 간단한 소스입니다.

if(textBox1.Text.Length>0)
{
    string ssid = textBox1.Text;
    
    string[] lines = {
        "netsh wlan add filter permission = denyall networktype = infrastructure",
        $"netsh wlan add filter permission = allow ssid = \"{ssid}\" networktype = infrastructure",
        $"netsh wlan connect name = \"{ssid}\" ssid = \"{ssid}\"",
        $"netsh wlan set profileparameter name = \"{ssid}\" connectionmode = auto",
    };
    StreamWriter outputAddFile = new StreamWriter(System.IO.Directory.GetCurrentDirectory() + $"\\OnlyOneWifiAdd_{ssid}.bat");
    if (outputAddFile != null)
    {
        foreach (string line in lines)
        {
            outputAddFile.WriteLine(line);
        }
    }
    outputAddFile.Close();

    string[] lines2 = {
        "netsh wlan delete filter permission = denyall networktype = infrastructure",
        $"netsh wlan delete filter permission = allow ssid = \"{ssid}\" networktype = infrastructure",
    };
    StreamWriter outputDeleteFile = new StreamWriter(System.IO.Directory.GetCurrentDirectory() + $"\\OnlyOneWifiDelete_{ssid}.bat");
    if (outputDeleteFile != null)
    {
        foreach (string line in lines2)
        {
            outputDeleteFile.WriteLine(line);
        }
    }
    outputDeleteFile.Close();
    
    MessageBox.Show("생성 되었습니다.");
}
else
{
    MessageBox.Show("입력된 ssid가 없습니다.");
}