问题
尝试托管一个网络来扩展我的家庭 wifi 网络的范围,而不是出去花 50 美元购买 wifi 扩展器。
无论如何,我的问题是,无论我尝试什么,我的托管网络都无法访问互联网。
我做了什么
配置
首先,我首先启动 ICS,因为我需要 DHCP 服务器为我将要托管的网络分配 192.168.137.x 范围内的 IP。
然后我通过命令行设置托管网络,如下所示:
netsh wlan set hostednetwork ssid="Test" key="password"
netsh wlan start hostednetwork
它运行良好,我能够通过“通过 wifi”同步我的手机音乐收藏(DoubleTwist AirSync)来测试此连接。我之所以这么说,是因为我最初先启动了我的托管网络,它以独立模式启动了 ICS,然后它在 192.168.173.x 中分配 IP,而 DoubleTwist 找不到我的手机。虽然我可以在启动 ICS 完整模式后释放并更新 IP。
无论如何,我采取了下一步行动。我进入网络适配器设置,右键单击连接到家庭网络的 wifi 适配器,然后启用与新创建的托管网络的共享互联网连接。
没什么,什么也没有发生。
系统信息
IP配置/全部:
网络适配器设置:
结尾
我不知道为什么这不起作用,我用谷歌搜索过的每个指南和支持论坛都做了和我完全一样的事情,而且对他们来说很有效。我猜是因为我试图从广播的同一适配器共享互联网。我希望能够从单独的加密狗(我有一个备用的)进行广播,但 Windows 本身不支持这一点。
答案1
好的。共享和使用托管网络可能会带来压力。这就是我的做法。
使用命令行和 powershell 来实现所需的目标。
当然,这可以仅使用 powershell 来实现,但是嘿...可能以后再说吧。
将以下(批处理文件)文件保存为 *.bat。相应地更改其内容
您的路径\您的文件.ps1
使用上一步提供的名称保存第二个文件(PS1 文件)
“你的文件.ps1”
修改 ps1 文件的第一部分,并根据你的系统更改适配器
$wifi = "description='Broadcom 4313 802.11b/g/n'"
$ethernet = "description='Intel(R) 82577LC Gigabit Network Connection'"
您可以在 powershell 中运行以下命令
Get-WmiObject win32_networkadapterconfiguration | 选择描述
它应该只有一个连接接口,无论是物理(以太网)还是无线。
以管理员身份运行批处理文件。
此外,为了简单起见,您可以从 Windows 资源管理器上下文菜单启动该过程。
为此,请使用第三个文件并将其保存为 reg 并运行它,或者从示例中手动更改。
不用说,有必要更改它读取的位置
您的路径\BATCHFILE.bat
尽情享受吧。干杯
-------------------------------------------- 批处理文件
@echo off
echo Current Settings (netsh wlan show hostednetwork):
netsh wlan show hostednetwork | findstr -i status
rem echo Current Settings
rem echo ######################
rem echo .
echo SSID Name
netsh wlan show hostednetwork | findstr -i " ssid "
netsh wlan show hostednetwork setting=security
echo ######################
echo # #
echo # Please select #
echo # #
echo # [E] Edit #
echo # [S] Start #
echo # [Q] Stop #
echo # [V] View #
echo # #
echo ######################
choice /C ESQV
IF errorlevel 4 goto TetherView
IF errorlevel 3 goto TetherStop
IF errorlevel 2 goto TetherStart
IF errorlevel 1 goto TetherEdit
rem GOTO TetherEnd
:TetherEdit
echo "Please enter SSID:"
set /p SSID=
echo "SSID Password"
set /p PassWord=
echo %SSID% %PassWord%
netsh wlan set hostednetwork mode=allow ssid=%SSID% key=%PassWord%
netsh wlan start hostednetwork
GOTO TetherEnd
:TetherStart
netsh wlan start hostednetwork
powershell -file YOURPATH\ICS-Control.ps1 enable
GOTO TetherEnd
:TetherStop
netsh wlan stop hostednetwork
powershell -file YOURPATH\ICS-Control.ps1 disable
GOTO TetherEnd
:TetherView
cls
netsh wlan show hostednetwork | findstr -i status
echo SSID Name
netsh wlan show hostednetwork | findstr -i " ssid "
netsh wlan show hostednetwork setting=security
echo Connected clients
arp -a | findstr -i 192.168.173 | findstr /V 255 | findstr /V 192.168.173.1
GOTO TetherEnd
:TetherEnd
@PAUSE
--------------------------------------------PS1 文件
#Change accordingly
$wifi = "description='Broadcom 4313 802.11b/g/n'"
$ethernet = "description='Intel(R) 82577LC Gigabit Network Connection'"
#Doesnt change so no need to alter. Detects what interface is connected (should be only one)
$netAdapter = get-wmiobject win32_networkadapter -filter "netconnectionstatus = 2" | select netconnectionid, name, InterfaceIndex, netconnectionstatus
if ($netAdapter.netconnectionid -cmatch "Wi-Fi"){$publicAdapter = $wifi} else {$publicAdapter = $ethernet}
$privateAdapter = "description='Microsoft Hosted Network Virtual Adapter'"
Function Var1ICSenable
{
$virtualAdapter = Get-WMIObject win32_networkadapterconfiguration | where {$_.ServiceName -eq "vwifimp"} | % {$_.GetRelated('win32_networkadapter')} | Select -ExpandProperty Name
$vars1 = $privateAdapter
$Adapter0 = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter $vars1 | select description
$mAdapter3 = $Adapter0 -replace "@{description=",""
$mAdapter3 = $mAdapter3 -replace "}",""
$mAdapter4 = "description='$mAdapter3'"
$mAdapter5 = gwmi win32_networkadapter -Filter $mAdapter4 |select netconnectionid
$mAdapter5 = $mAdapter5 -replace "@{netconnectionid=",""
$global:mAdapter5 = $mAdapter5 -replace "}",""
}
Function Var2ICSenable
{
$vars2 = $publicAdapter
$Adapter1 = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter $vars2 | select description
$mAdapter = $Adapter1 -replace "@{description=",""
$mAdapter = $mAdapter -replace "}",""
$mAdapter1 = "description='$mAdapter'"
$mAdapter2 = gwmi win32_networkadapter -Filter $mAdapter1 |select netconnectionid
$mAdapter2 = $mAdapter2 -replace "@{netconnectionid=",""
$global:mAdapter2 = $mAdapter2 -replace "}",""
}
function EnableDisableICS
{
$bFound = $FALSE
$oNetSharingManager = new-object -comobject HNetCfg.HNetShare
if ($oNetSharingManager -eq $null)
{
write-host "Unable to get the HNetCfg.HnetShare object."
Exit
}
if ($oNetSharingManager.SharingInstalled -eq $null)
{
write-host "Sharing is not available on this platform."
Exit
}
$oConnectionCollection = $oNetSharingManager.EnumEveryConnection
foreach ($oItem In $oConnectionCollection)
{
$EveryConnection = $oNetSharingManager.INetSharingConfigurationForINetConnection($oItem)
$objNCProps = $oNetSharingManager.NetConnectionProps($oItem)
If ($objNCProps.name -eq $sPrivateConnectionName)
{
$bFound = $True
write-host "Setting ICS Private to " $bEnable " on connection: " $objNCProps.name
If ($bEnable -eq "true")
{
$EveryConnection.EnableSharing(1)
}
Else
{
$EveryConnection.DisableSharing()
}
}
}
$oConnectionCollection = $oNetSharingManager.EnumEveryConnection
foreach ($oItem In $oConnectionCollection)
{
$EveryConnection = $oNetSharingManager.INetSharingConfigurationForINetConnection($oItem)
$objNCProps = $oNetSharingManager.NetConnectionProps($oItem)
If ($objNCProps.name -eq $sPublicConnectionName)
{
$bFound = $True
write-host "Setting ICS Public to " $bEnable " on connection: " $objNCProps.name
If ($bEnable -eq "true")
{
$EveryConnection.EnableSharing(0)
}
Else
{
$EveryConnection.DisableSharing()
}
}
}
If ($bFound -eq $null)
{
write-host "Unable to find the connection " + $sPublicConnectionName
}
}
Function EnableSharing
{
#regsvr32 /s hnetcfg.dll
# Variables to enable and disable ICS
Var1ICSenable
Var2ICSenable
$global:firstICSvar = $global:mAdapter2
$global:secondICSvar = $global:mAdapter5
$benable = "true"
$sPublicConnectionName = $global:firstICSvar
$sPrivateConnectionName = $global:secondICSvar
$mstr = $sPublicConnectionName + " " + $sPrivateConnectionName + " " + $bEnable
EnableDisableICS $mstr
}
Function DisableSharing
{
#regsvr32 /s hnetcfg.dll
# Variables to enable and disable ICS
Var1ICSenable
Var2ICSenable
$global:firstICSvar = $global:mAdapter2
$global:secondICSvar = $global:mAdapter5
$benable = "false"
$sPublicConnectionName = $global:firstICSvar
$sPrivateConnectionName = $global:secondICSvar
$mstr = $sPublicConnectionName + " " + $sPrivateConnectionName + " " + $bEnable
EnableDisableICS $mstr
#write-host "TESTE" $mstr
}
if ($args[0] -eq "enable"){EnableSharing}else{DisableSharing}
--------------------------------------------注册文件
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\runas]
@="Tether (Hosted Network)"
"HasLUAShield"=""
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\runas\command]
@="cmd.exe /c YOURPATH\BATCHFILE.bat"
答案2
因为这个帖子的搜索量很高,所以我在这里重复一下,也许会有所帮助。
- 正如在几篇文章中提到的,我已经启用了路由和远程服务。
但这只是解决方案的一部分,互联网仍然无法正常工作。因此,在检查托管无线适配器设置时,我注意到 IP 地址是静态的,但没有任何 DNS 服务器条目。所以这是解决方案的第二部分。
- 编辑托管网络 IPv4 设置。输入有效的 DNS 服务器(使用任何可用的开放 DNS 服务器,例如谷歌的 DNS 服务器是 8.8.8.8)
这对我有用。
答案3
您需要共享计算机上使用的互联网连接。您需要转到网络中心,然后转到适配器设置。然后右键单击要共享的连接,然后单击属性并转到共享选项卡。在那里您需要与您的托管网络共享。
答案4
对你来说可能有点晚了,也许你已经买了 wifi 扩展器之类的东西。但是我正在按照你尝试的方式扩展我的 wifi 信号,一开始没有成功,但后来我使用了没有“”标记的命令行,现在一切都正常了。我尝试了一些可能影响这个过程的东西,但我记不清了。