명령 줄을 사용하여 인터넷 연결 공유를 활성화하는 방법은 무엇입니까?


34

네트워크 연결을 마우스 오른쪽 버튼으로 클릭하고 공유 탭을 열고 "다른 네트워크 사용자가이 컴퓨터의 인터넷 연결을 통해 연결하도록 허용"확인란을 클릭하여 수동으로 수행 할 수 있습니다.

이제이 작업을 자동화해야합니다. 이를 수행하기위한 명령 줄 도구 또는 Powershell cmdlet이 있습니까?


4
지금은 시도 할 수 없지만 Process Monitor를 실행 하여 레지스트리를 가리 키 려고 할 수 있습니다 . 설정을 전환하고 적용 할 때 어떤 키 / 값이 변경되는지 확인한 다음 그에 따라 스크립트를 작성하십시오.
Iszi


Microsoft-Windows-SharedAccessWindows 자동 설치 프로그램 구성 요소가 너무 가까이,하지만 그것은 단지 Windows 설치에서 작동합니다! technet.microsoft.com/ko-kr/library/ff715511.aspx
Jacob Krall

답변:


19

다음은 순수한 PowerShell 솔루션입니다 (관리자 권한으로 실행해야 함).

# Register the HNetCfg library (once)
regsvr32 hnetcfg.dll

# Create a NetSharingManager object
$m = New-Object -ComObject HNetCfg.HNetShare

# List connections
$m.EnumEveryConnection |% { $m.NetConnectionProps.Invoke($_) }

# Find connection
$c = $m.EnumEveryConnection |? { $m.NetConnectionProps.Invoke($_).Name -eq "Ethernet" }

# Get sharing configuration
$config = $m.INetSharingConfigurationForINetConnection.Invoke($c)

# See if sharing is enabled
Write-Output $config.SharingEnabled

# See the role of connection in sharing
# 0 - public, 1 - private
# Only meaningful if SharingEnabled is True
Write-Output $config.SharingType

# Enable sharing (0 - public, 1 - private)
$config.EnableSharing(0)

# Disable sharing
$config.DisableSharing()

social.msdn.microsoft.com 에서이 질문을 참조하십시오 .

연결중인 어댑터에서 공용 인터페이스를 활성화하고 네트워크에 사용할 어댑터의 개인 인터페이스에서 공유를 활성화해야합니다.


1
PowerShell과 COM interop을 수행 할 수있는 줄 몰랐습니다. [System.Runtime.Interopservices.Marshal]::ReleaseComObject(...)뿌려야 한다고 생각합니다 .
Jacob Krall

이 호출은에 EnableSharing예외 : 내가 관리자로 PowerShell을 실행하는거야에도 불구하고,이 예외를 던지고있다 "EnableSharing"을 호출 예외로 "1"인수 (들) : "이벤트는 HRESULT에서 가입자의 (예외를 호출 할 수 없습니다 : 0x80040201) "-> 호출 대상에 의해 예외가 발생했습니다. -> 이벤트는 가입자 (0x80040201 HRESULT에서 예외)의 호출 할 수 없습니다
야곱 크롤

regsvr32 hnetcfg.dll관리자 권한으로 수동으로 실행하십시오 .
utapyngo

"어댑터의 공용 인터페이스 사용"이 무엇을 의미하는지 궁금합니다.
Jacob Krall

2
파워 쉘의 새로운 버전, .SharingType는 .SharingConnectionType 지금
Baodad

9

이를 위해 간단한 명령 줄 도구 를 만들었습니다 .

  1. 다운로드 및 압축 해제 또는git clone git@github.com:utapyngo/icsmanager.git

  2. 실행하여 빌드 build.cmd

  3. HNetCfgCOM 라이브러리를 등록하십시오 : regsvr32 hnetcfg.dll(에있는 표준 라이브러리입니다 %WINDIR%\System32)

명령 줄 사용법

  1. 관리자 권한으로 명령 줄 프롬프트를 엽니 다.

    cd받는 icsmanager디렉토리 (또는 icsmanager-master당신은 우편을 다운로드 한 경우).

  2. 유형 icsmanager

    사용 가능한 네트워크 연결이 표시되어야합니다. GUID 속성을 확인하십시오. 이 도구를 사용하려면 최소한 두 개의 연결이 있어야합니다.

  3. 유형 icsmanager enable {GUID-OF-CONNECTION-TO-SHARE} {GUID-OF-HOME-CONNECTION}

    ICS를 활성화해야합니다.

Powershell 사용법

  1. 가져 오기 모듈 :

    가져 오기 모듈 IcsManager.dll

  2. 네트워크 연결 목록 :

    Get-NetworkConnections

  3. 인터넷 연결 공유를 시작하십시오.

    Enable-ICS "공유 연결" "홈 연결"

  4. 인터넷 연결 공유를 중지하십시오.

    ICS 비활성화


면책 조항 : 아직 도구를 테스트하지 않았습니다. 자신의 책임하에 사용하십시오. 작동하지 않는 경우 GitHub에서 문제를 자유롭게여십시오. 풀 요청도 환영합니다.


산뜻한. NETCONLib라는 외부 바이너리를 사용합니다. 어디에서 왔습니까? 무엇을합니까?
Jacob Krall

아하. 이것은 Windows에 포함 된 "NetCon 1.0 형식 라이브러리"에 대한 COM 클래스 래퍼입니다.
Jacob Krall

@JacobKrall, 예,에 있습니다 C:\Windows\System32\hnetcfg.dll.
utapyngo

이것은 내가 원하는 것을 정확하게 수행하는 것처럼 보입니다. 나는 그것을 시도 할 것입니다.
Jacob Krall

1
죄송합니다. 몇 달 전에이 작업을 수행했으며 HNetCfg가에 수동으로 등록해야한다는 것을 잊었습니다 regsvr32 hnetcfg.dll. 그리고 나는 msdn.microsoft.com/en-us/library/windows/desktop/hnetcfg.dll 에서 배웠습니다
utapyngo

5

내 이해에 따르면 Vista 이후 라우팅 기능이 Windows에서 제거되었으며 현재 Windows Server에서만 사용할 수 있습니다.

인터넷에서 다음과 같은 트릭을 찾아 다시 활성화 netsh routing할 수 있습니다. 먼저 시스템 복원 지점 작성을 포함하여 일반적인 예방 조치를 제안합니다.

  1. 2003 년 또는 XP에서 IPMONTR.DLL 및 IPPROMON.DLL 가져 오기
  2. WINDOWS \ SYSTEM32에 복사하십시오.
  3. 관리자 권한으로 명령 프롬프트 (cmd)에서 실행하십시오.

    netsh add helper ipmontr.dll
    netsh add helper ippromon.dll

라우팅 및 원격 액세스 서비스를 자동 시작으로 설정해야 할 수도 있습니다.

시도하기 전에 재부팅하십시오.


1
XP 라이센스가없는 경우 XP에서 파일을 복사하는 것이 합법입니까?
utapyngo

1
Windows 7 64bit에서 시도했습니다. XP 64 비트에서 파일을 복사했습니다. 관리자로 실행 중입니다. 오류 :The following helper DLL cannot be loaded: IPMONTR.DLL. The following helper DLL cannot be loaded: IPPROMON.DLL.
utapyngo

1
"도움말 추가"도 시도했지만 64 비트에서 작동하지 않는다는 것을 확인하여 죄송합니다. 두 OS 모두에서 올바른 dll 이식의 적법성에 대해서는 명확하지 않습니다. 귀하는 Windows 파일을 수정할 수있는 권한이 없지만 XP 라이센스에서 해당 파일을 복사 할 수 없습니다.
harrymc

1
64 비트 Windows에서는 작동하지 않는다는 대답에 언급해야합니다. XP 32 비트에서 파일을 복사해야합니다.
utapyngo

@ utapyngo : 실제로 64 비트 에서이 작업을 수행 할 수있는 방법이 없다는 것을 확신 할 수 없습니다. 내 연구에 따르면 문제는이 두 개보다 많은 dll을 복사해야하지만 문제를 완전히 분석하려면 내가 줄 수있는 것보다 더 많은 시간이 필요하다는 것입니다.
harrymc

2

이전의 동료는 창 자체 도구 netsh를 통해이 작업을 수행했습니다. 이 작업을 직접 수행 한 적이 없기 때문에 Microsoft netsh 설명서를 살펴 보라고 스스로 조언 할 수 있습니다 .

내가 기억할 수 있듯이 그것은 필요한 곳에서 꽤 까다 롭고 많은 netsh 전화 였지만 결국에는 효과가있었습니다 ...


6
함께 할 수 있었다 netsh routing그들이 그 명령을 제거한 윈도우 7 윈도우 XP뿐만있다. 그렇기 때문에 Windows 7에 대해서만 묻습니다.
utapyngo

2

다음은 작동해야합니다

netsh routing ip autodhcp install
netsh routing ip autodhcp set interface name="Local Area Connection(or whereever your internet connection is from)" mode=enable
netsh routing ip autodhcp set global 192.168.0.1 255.255.255.0 11520

8
함께 할 수 있었다 netsh routing그들이 그 명령을 제거한 윈도우 7 윈도우 XP뿐만있다. 그렇기 때문에 Windows 7에 대해서만 묻습니다.
utapyngo

1

불행히도 Windows 7 이상에는 그러한 cmd 명령이 없으므로이 Visual Basic 함수를 사용하여 완료했습니다.

Private Function EnableDisableICS(ByVal sPublicConnectionName As String, ByVal sPrivateConnectionName As String, ByVal bEnable As Boolean)  
    Dim bFound As Boolean
    Dim oNetSharingManager, oConnectionCollection, oItem, EveryConnection, objNCProps
    oNetSharingManager = CreateObject("HNetCfg.HNetShare.1")
    oConnectionCollection = oNetSharingManager.EnumEveryConnection
    For Each oItem In oConnectionCollection
        EveryConnection = oNetSharingManager.INetSharingConfigurationForINetConnection(oItem)
        objNCProps = oNetSharingManager.NetConnectionProps(oItem)
        If objNCProps.name = sPrivateConnectionName Then
            bFound = True
            MsgBox("Starting Internet Sharing For: " & objNCProps.name)
            If bEnable Then
                EveryConnection.EnableSharing(1)
            Else
                EveryConnection.DisableSharing()
            End If
        End If
    Next
    oConnectionCollection = oNetSharingManager.EnumEveryConnection
    For Each oItem In oConnectionCollection
        EveryConnection = oNetSharingManager.INetSharingConfigurationForINetConnection(oItem)
        objNCProps = oNetSharingManager.NetConnectionProps(oItem)
        If objNCProps.name = sPublicConnectionName Then
            bFound = True
            MsgBox("Internet Sharing Success For: " & objNCProps.name)
            If bEnable Then
                EveryConnection.EnableSharing(0)
            Else
                EveryConnection.DisableSharing()
            End If
        End If
    Next
    Return Nothing 'bEnable & bFound
End Function  

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    EnableDisableICS("YOUR ACTIVE NETWORK", "YOUR ADAPTOR TO SHARE", True)
End Sub

"" ""는 필수입니다. 즐기세요


1

내가 읽은 것을 기반으로 게시 한 사람들이 netsh7에서 시작하여 작동하지 않고 잘못 되었다고 말한 경우 . 이제 " netsh routing" 에 관한 것이라면 , 당신이 옳을 것 같지만, 이것이 효과가 있습니다. 저는 Windows 8.1을 위해 제작 한 배치 파일의 내용을 보여 주려고합니다. 일반적인 의견과 정보를 얻는 대신 전체 정보를 가진 사람들을 돕기 위해 노력할 것입니다.

먼저 공유 할 연결이 실제로 연결을 공유하도록 설정되어 있는지 확인해야합니다. 이 링크를 통해 다음 작업을 수행 할 수 있습니다.

http://windows.microsoft.com/en-us/windows/set-internet-connection-sharing#1TC=windows-7

  1. 시작 단추 시작 단추 그림 단추를 클릭 한 다음 제어판을 클릭하여 네트워크 연결을 엽니 다. 검색 상자에 어댑터를 입력 한 다음 네트워크 및 공유 센터에서 네트워크 연결보기를 클릭합니다.

  2. 공유 할 연결을 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭하십시오. 관리자 권한 필요 관리자 암호 나 확인을 요청하는 메시지가 나타나면 암호를 입력하거나 확인하십시오.

  3. 공유 탭을 클릭 한 다음 다른 네트워크 사용자가이 컴퓨터의 인터넷 연결을 통해 연결하도록 허용 확인란을 선택합니다.

호스트 컴퓨터에서 ICS를 설정하기 위해 위의 단계를 수행 한 후에는 호스트 컴퓨터가 아닌 다른 모든 컴퓨터에서 다음과 같이 변경하십시오.

  1. 시작 단추 시작 단추 그림 단추, 제어판, 네트워크 및 인터넷을 차례로 클릭 한 다음 인터넷 옵션을 클릭하여 인터넷 옵션을 엽니 다.

  2. 연결 탭을 클릭 한 다음 연결을 다이얼하지 않음을 클릭하십시오.

  3. LAN 설정을 클릭하십시오.

  4. LAN 설정 대화 상자의 자동 구성에서 자동으로 설정 검색 및 자동 구성 스크립트 사용 확인란을 지 웁니다.

  5. 프록시 서버에서 LAN에 프록시 서버 사용 확인란을 선택 취소 한 다음 확인을 클릭합니다.

내가 알기로는 이것이 Windows 7과 8 모두에서 작동해야한다고 생각합니다.

이제 주제는 명령 행 솔루션에 관한 것이 었으므로 가상 무선 어댑터를 구성하고 준비하는 방법에 대한 배치 파일 내용입니다.

작성된 후에는 위의 지시 사항을 사용해야하고 무선 장치에서 볼 수있는 새로 작성된 가상 어댑터와 소스 연결을 공유하고 있는지 확인하십시오.

연결 공유 .bat 파일 :

@echo off
set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%

cd\
    if NOT EXIST "C:\TEMP\switch.txt" (
        GOTO :START
    ) ELSE (
        GOTO :STOP
    )

:START
REM Create Temp File for On and Off switch.
ECHO WOOHOO >"C:\TEMP\switch.txt"

REM -- Output everything that is happening into a file called wifi.txt.
REM -- Start out with a timestamp at the top to show when it was done.
REM -- All 'netsh' commands are for setting up the SSID and starting the    sharing.
REM -- I stop and start when starting the service just for prosperity.

echo _%_my_datetime% >"C:\TEMP\wifi.txt"
netsh wlan set hostednetwork mode=allow ssid=ITWORKS key=111222333 >>    "C:\TEMP\wifi.txt"
netsh wlan stop hostednetwork >>"C:\TEMP\wifi.txt"
netsh wlan start hostednetwork >>"C:\TEMP\wifi.txt"
echo MSGBOX "Wifi Sharing Started!" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q
GOTO :END


REM -- This will turn ICS off and give a prompt via VBS that you're turned off.
REM -- I timestamp when the service is turned off in the output file.
REM -- I delete the switch file to let the code know to turn it on when
REM -- when fired off again.  Tempmessage is the msgbox used to show the service
REM -- has been turned off.  Same for the msgbox above when it's on.

:STOP
echo OFF AT _%_my_datetime% >>"C:\TEMP\wifi.txt"
netsh wlan stop hostednetwork >>"C:\TEMP\wifi.txt"
DEL /Q "C:\TEMP\switch.txt"
echo MSGBOX "Wifi Sharing Stopped!" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q

:END

나는 독특한 상황이있을 것이므로 이것에 관한 질문에 기꺼이 답변 할 것입니다. 위에서 찾은 것을 함께 모아야했기 때문에 도와주고 싶습니다.

그러나이를 관점에서 살펴보면 이더넷 연결을 사용하여 가상 어댑터에 대한 연결을 공유하는 랩톱에 Windows 8.1에서 작동합니다. 소스 무선 연결을 공유하려는 경우에도 잘 작동 할 수 있습니다.


슈퍼 유저에 오신 것을 환영합니다! 자세한 답변을 보내 주셔서 감사합니다. 일부 텍스트를 간소화하고 박쥐 파일 내용을 코드 블록에 넣도록 귀하의 질문을 편집했습니다. 문제가 있으면 다른 형식 지침을 볼 수 있습니다 . 코드의 의미를 변경하지 않았는지 확인하십시오.
bertieb

그래 괜찮아 고마워 나는 형식에 대해 더 나은 일을해야한다는 것을 알았습니다. 실제로 거기에 가지 않아도 MS 링크를 만지십시오.
user2562950

그것에 대해 걱정하지 마십시오, 당신은 충분히 빠르게 인하 구문을 데리러 갈게 :) 링크의 내용을 포함하여 것은 질문에 대답 여기에 정책의 일부 - 링크는 오래된, 변화를 이동하거나 사라질 수 있습니다. 이것은 Microsoft의 경우에는 거의 발생하지 않지만 여전히 가능합니다. 답 자체에 솔루션에 필요한 모든 것을 넣는 것이 좋습니다. 더 좋은 답변을 기대하겠습니다!
bertieb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.