Microsoft MVP성태의 닷넷 이야기
.NET Framework: 938. C# - ICS(Internet Connection Sharing) 제어 [링크 복사], [링크+제목 복사],
조회: 19465
글쓴 사람
정성태 (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)
11543정성태6/9/201823373.NET Framework: 764. C# 7.2 - private protected 접근자 추가파일 다운로드1
11542정성태6/9/201861893개발 환경 구성: 381. Azure Web App 확장 예제 - Remove Custom Headers
11541정성태6/9/201821056개발 환경 구성: 380. Azure Web App 확장 배포 방법 [1]
11540정성태6/9/201821242개발 환경 구성: 379. Azure Web App 확장 예제 제작 [2]
11539정성태6/8/201821714.NET Framework: 763. .NET Core 2.1 - Tiered Compilation 도입파일 다운로드1
11538정성태6/8/201820505.NET Framework: 762. .NET Core 2.1 - 확장 도구(Tools) 관리 [1]
11537정성태6/8/201825597.NET Framework: 761. C# - SmtpClient로 SMTP + SSL/TLS 서버를 이용하는 방법 [5]
11536정성태6/7/201822457.NET Framework: 760. Microsoft Build 2018 - The future of C# 동영상 내용 정리 [1]파일 다운로드1
11535정성태6/7/201825100.NET Framework: 759. C# - System.Span<T> 성능 [1]
11534정성태6/6/201830566.NET Framework: 758. C# 7.2 - Span<T> [6]
11533정성태6/5/201833270.NET Framework: 757. 포인터 형 매개 변수를 갖는 C++ DLL의 함수를 C#에서 호출하는 방법파일 다운로드1
11532정성태6/5/201822618.NET Framework: 756. JSON의 escape sequence 문자 처리 방식
11531정성태6/4/201826856오류 유형: 468. JSON.parse가 허용하지 않는 문자 [9]
11530정성태5/31/201827640.NET Framework: 755. C# 7.2 - 스택에만 생성할 수 있는 값 타입 지원 - "ref struct" [2]파일 다운로드1
11529정성태5/23/201824882.NET Framework: 754. 닷넷의 관리 포인터(Managed Pointer)와 System.TypedReference [6]파일 다운로드1
11528정성태5/17/201824378.NET Framework: 753. C# 7.2 - 3항 연산자에 ref 지원(conditional ref operator) [1]
11527정성태5/17/201822101오류 유형: 467. RDP 로그인 에러 - This could be due to CredSSP encryption oracle remediation.
11526정성태5/16/201822020.NET Framework: 752. C# 7.2 - 메서드의 반환값 및 로컬 변수에 ref readonly 기능 추가파일 다운로드1
11525정성태5/16/201826114.NET Framework: 751. C# 7.2 - 메서드의 매개 변수에 in 변경자 추가 [3]파일 다운로드1
11524정성태5/15/201825009.NET Framework: 750. C# 7.2 - readonly 구조체 [5]파일 다운로드1
11523정성태5/15/201822182.NET Framework: 749. C# - 값 형식의 readonly 인스턴스에 대한 메서드 호출 시 defensive copy 발생 [1]파일 다운로드1
11522정성태5/15/201820633개발 환경 구성: 378. Azure - VM 진단 설정 화면의 "This subscription is not registered with the Microsoft.Insights resource provider."
11521정성태5/15/201818907개발 환경 구성: 377. Azure - 원하는 성능 데이터로 모니터링 대시보드 구성
11520정성태5/12/201821127.NET Framework: 748. C# 7.1 - 참조 어셈블리(Ref Assemblies)
11519정성태5/12/201822969개발 환경 구성: 376. ASP.NET Web Application 프로젝트의 FileSystem 배포(Publish) 시 Before/After Task 설정 방법 [1]
11518정성태5/10/201821231.NET Framework: 747. C# 7.0에서도 부분적으로 가능해진 "타입 추론을 통한 튜플의 변수명 자동 지정"
... 91  92  93  94  95  96  [97]  98  99  100  101  102  103  104  105  ...