Microsoft MVP성태의 닷넷 이야기
.NET Framework: 938. C# - ICS(Internet Connection Sharing) 제어 [링크 복사], [링크+제목 복사],
조회: 19443
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일

C# - ICS(Internet Connection Sharing) 제어

이 글에서는 해결책을 제시하지 않습니다. 단지 환경 구성한 C# 프로젝트가 아까워 기록용으로 남기는 것입니다.




검색해 보면, Windows 7부터 ICS를 명령행에서 제어할 수 있는 기능이 없어졌다고 합니다.

How to enable Internet Connection Sharing using command line?
; https://superuser.com/questions/470319/how-to-enable-internet-connection-sharing-using-command-line

그래서 PowerShell 등을 이용해 코딩으로 해결해야 한다고 하는데 "hnetcfg.dll"을 시스템에 등록해야 한다는 점이 마음에 안 드는군요. 반면 예전에 소개한,

Registry 등록 없이 COM 개체 사용 
; https://www.sysnet.pe.kr/2/1/262

Registry 등록 과정 없이 COM 개체 사용 - 두 번째 이야기
; https://www.sysnet.pe.kr/2/0/1167

Reg-free COM 개체 사용을 위한 manifest 파일 생성 도구 - COMRegFreeManifest
; https://www.sysnet.pe.kr/2/0/12160

방법을 사용하면 C#에서 그 문제를 해결할 수 있으니 시도를 해봤는데요,

using hnetcfgLib;
using System;

namespace ics
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            NetSharingManagerClass nsmc = new NetSharingManagerClass();

            Console.WriteLine(nsmc.SharingInstalled);
            {
                // Element not found
                //INetSharingPrivateConnectionCollection ec = nsmc.EnumPrivateConnections[tagSHARINGCONNECTION_ENUM_FLAGS.ICSSC_DEFAULT];
                //Console.WriteLine(ec.Count);
            }

            {
                // Element not found
                //INetSharingPublicConnectionCollection ec = nsmc.EnumPublicConnections[tagSHARINGCONNECTION_ENUM_FLAGS.ICSSC_DEFAULT];
                //Console.WriteLine(ec.Count);
            }

            {
                INetSharingEveryConnectionCollection ec = nsmc.EnumEveryConnection;
                if (ec.Count == 0) // Always 0
                {
                    return;
                }

                // System.Runtime.InteropServices.COMException: 'Error HRESULT E_FAIL has been returned from a call to a COM component.'
                foreach (object nc in ec)
                {
                    INetConnection connection = nc as INetConnection;

                    if (connection == null)
                    {
                        continue;
                    }

                    hnetcfgLib.INetConnectionProps ncProps = nsmc.NetConnectionProps[connection];
                    Console.WriteLine(nc);
                }
            }
        }
    }
}

(첨부 파일은 이 글의 예제 코드를 포함합니다.)

아쉽게도 정상적으로 EnumEveryConnection에서 네트워크 어댑터 나열이 되지 않습니다. 반면, 아래의 VBScript 코드에서는,

Enabling Internet Connection Firewall (VBScript)
; https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ics/enabling-internet-connection-firewall-vbscript

NetSharingManager.EnumEveryConnection에서 정상적으로 값을 반환하는데요, 뭐가 문제인지는... 일단 현재는 흥미가 사라졌으므로 나중에 좀 더 조사하는 걸로 하고 여기서 마무리합니다. ^^;




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 3/9/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 91  92  93  94  95  96  97  [98]  99  100  101  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11518정성태5/10/201821225.NET Framework: 747. C# 7.0에서도 부분적으로 가능해진 "타입 추론을 통한 튜플의 변수명 자동 지정"
11517정성태5/10/201819528.NET Framework: 746. Azure runbook 예제 - 6시간 동안 수행 중인 VM을 중지 [1]파일 다운로드1
11516정성태5/9/201820261.NET Framework: 745. Azure runbook을 PowerShell 또는 C# 코드로 실행하는 방법파일 다운로드1
11515정성태5/9/201822837.NET Framework: 744. C# 6 - Expression bodied function [1]
11514정성태5/3/201820810오류 유형: 466. Bitvise - Error in component session/transport/kexHandler [2]
11513정성태5/3/201827635.NET Framework: 743. C# 언어의 공변성과 반공변성 [9]파일 다운로드2
11512정성태5/2/201819931개발 환경 구성: 375. Azure runbook 실행 시 "Errors", "All Logs"에 오류 메시지가 출력되는 경우
11511정성태5/2/201821528개발 환경 구성: 374. Azure - Runbook 기능 소개
11510정성태4/30/201822379.NET Framework: 742. windbg로 확인하는 Finalizer를 가진 객체의 GC 과정파일 다운로드1
11509정성태4/28/201820773.NET Framework: 741. windbg로 확인하는 객체의 GC 여부
11508정성태4/23/201822378개발 환경 구성: 373. MSBuild를 이용해 프로젝트 배포 후 결과물을 zip 파일로 압축하는 방법파일 다운로드1
11507정성태4/20/201823003개발 환경 구성: 372. MSBuild - 빌드 전/후, 배포 전/후 실행하고 싶은 Task 정의
11506정성태4/20/201827234.NET Framework: 740. C#에서 enum을 boxing 없이 int로 변환하기 - 두 번째 이야기 [7]파일 다운로드1
11505정성태4/19/201820036개발 환경 구성: 371. Azure Web App 확장 예제 - Simple WebSite Extension
11504정성태4/19/201821643오류 유형: 465. Azure Web App 확장 - Extplorer File manager 적용 시 오류
11503정성태4/19/201820673오류 유형: 464. PowerShell - Start-Service 명령 오류 (Service 'xxx' cannot be started)
11502정성태4/17/201822908개발 환경 구성: 370. Azure VM/App Services(Web Apps)에 Let's Encrypt 무료 인증서 적용 방법 [3]
11501정성태4/17/201820138개발 환경 구성: 369. New-AzureRmADServicePrincipal로 생성한 계정의 clientSecret, key 값을 구하는 방법파일 다운로드1
11500정성태4/17/201821117개발 환경 구성: 368. PowerShell로 접근하는 Azure의 Access control 보안과 Azure Active Directory의 계정 관리 서비스
11499정성태4/17/201819692개발 환경 구성: 367. Azure - New-AzureRmADServicePrincipal / New-AzureRmRoleAssignment 명령어
11498정성태4/17/201819773개발 환경 구성: 366. Azure Active Directory(Microsoft Enfra ID)의 사용자 유형 구분 - Guest/Member
11497정성태4/17/201817611개발 환경 구성: 365. Azure 리소스의 액세스 제어(Access control) 별로 사용자에게 권한을 할당하는 방법 [2]
11496정성태4/17/201818127개발 환경 구성: 364. Azure Portal에서 구독(Subscriptions) 메뉴가 보이지 않는 경우
11495정성태4/16/201819982개발 환경 구성: 363. Azure의 Access control 보안과 Azure Active Directory의 계정 관리 서비스
11494정성태4/16/201816294개발 환경 구성: 362. Azure Web Apps(App Services)에 사용자 DNS를 지정하는 방법
11493정성태4/16/201818058개발 환경 구성: 361. Azure Web App(App Service)의 HTTP/2 프로토콜 지원
... 91  92  93  94  95  96  97  [98]  99  100  101  102  103  104  105  ...