工作组模式下 Windows局域网共享分析

一.工作组结构的网络
    工作组网络也被称为“对等式”网络,因为每台计算机的地位是平等的,他的资源与管理分散在各个计算机上。
    网络中每台Windows系统的计算机上都有自己的“安全账户管理器(SAM
,security access manager)数据库”。如果用户访问每台计算机的资源,那么必须在每台每台计算机的SAM数据库中创建该用户的账号,例如:A要访问B,那么B必须知道A机SAM中的账户和密码才能正常访问。


二.网上邻居和NetBIOS工作原理部分(工作组模式)
 所有使用网上邻居的机器在启动时都会向网络中宣告自己的存在,一般使用广播方式 (也是为什么无法通过路由器看到其它子网计算机的原因),而在网络中有一张浏览列表,记录了所有在此登记的计算机,也就是在网上邻居中看到的计算机,而当 计算机正常关机时,浏览列表就会从记录中删除此机器。那么这张表在哪里呢?它是被“浏览主控服务器”(service.msc中的Computer Browser服务)维护的,浏览主控服务器是工作组中的一台最为重要的计 算机,它负责维护本工作组中的浏览列表及指定其他工作组的主控服务器列表,为本工作组的其他计算机和其他来访本工作组的计算机提供浏览服务,每个工作组都 为会每个传输协议选择一个浏览主控服务器,而我们经常遇到的无法浏览网络的错误大多是因为你所处的工作组没有浏览主控服务器而造成的。你可以在一个工作组 中用NBTSTAT -a computername 命令找出使用NBT协议的浏览主控服务器,它的标识是含有\\_MSBROWSE_ 名字段。缺省情况下,windows工作组中的浏览主控服务器是该工作组中第一台启用文件及打印机共享功能的计算机,也允许手工将一台win计算机配置为浏览 主控服务器(方法会在后面讲述网络配置时具体介绍,但由于浏览主控服务器需要维护动态浏览列表,性能会受影响),如果一个工作组中有多台计算机配置了这个 选项,或是当前的浏览主控服务器关闭了系统,又没有其他计算机启用主控设置时,就要进行主控浏览器的选举。选举其实过程很简单,首先由一台计算机发送一个 选举临界报文,该报文包含了来自发送计算机的信息(操作系统,版本及NET名等),选举报文向网络中广播,工作组中的每一台计算机都会用自身信息与选举报 文进行优先级比较,主要是操作系统起主要作用,记得好像是WIN2K/XP>Win9X/Me,最后是那个自身条件最好的成为新的浏览主控服务器。
整个网络浏览的过程是,当一台win98进入网络时,如果它带有服务器 服务(启用了文件及打印机共享)会向网络广播宣告自己的存在,而浏览主控服务器会取得这个宣告并将它放入自己维护的浏览列表中;而没有在相应协议上绑定文件及打印机共享的计算机则不会宣告,因而也就不会出现在网络邻居里了。当客户计算机想获得需要的网络资源列表时,首先会广播发出浏览请求,浏览主控服务器 收到请求后,如果请求的是本组的浏览列表,则直接将客户所需的资源列表发回;如果请求的是其它工作组的浏览列表,浏览主控服务器会根据本身 Browsing List中的记录找到相应工作组的主控浏览器返回给用户,用户可从那里得到它想要的浏览列表,我们也就在网上邻居中看到计算机列表了。
    但是为什么在网上邻居里有些机子访问不了呢?事实上如果微软的网上邻居真能做到所 见即所得,相信抱怨它的人不会象现在这么多,可通过前面对浏览服务的介绍,大家已经知道这是不可能的,因为浏览列表的获得不是通过访问其中每一台机子得到 的,很多时候网络中的计算机并不能正确更新浏览列表。当一台计算机正常关机时,它会向网络发出广播宣告,使浏览主控服务器及时将它从浏览列表中删除;而非 正常关机后,浏览列表里仍会把该条目保持很长一段时间(NT下是45分钟),这就是我们仍能在网络邻居里看到它的原因.而98的稳定性是众所周知的 ----在还没来得及关机前就已经崩溃了。

难道主浏览器就必须选举产生,不能指定吗?其实也不是,作为管理员,只要在希望成为主浏览器的机器(一般配置较高)上打开注册表编辑器,在[HKEY_LOCAL_MACHINE
  \SYSTEM\CurrentControlSet\Services\Browser\Parameters]一项中,将注册表键“IsDomainMaster”的值改为“True”即可。这样,这台电脑就会成为一个主浏览器。
  这台电脑启动时,如果网络中已经有了主浏览器,那么它就会发起一个新的选举,而在选举中它常常会赢得选举(难道是贿选?)。当然,如果其他电脑也配置了这个选项,那么它们之间的竞争就要看选举的规则了。
Just Do it
让某台机器永远不成为浏览器
  如果为了降低某台机器的负载,希望它永远不成为浏览器,可以在[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Browser
  \Parameters]一项中修改“MaintainServerList”的值为“No”就可以了,代表这台电脑将不会成为浏览提供者,同时Computer Browser服务也将无法启动,强行启动就会出现图1中的故障。


三.2000/xp/2003共享服务及端口
SMB(Server Message Block)协议在NT/2000中用来作文件共享,在NT中,SMB运行于
NBT(NetBIOS over TCP/IP)上,使用137,139(UDP),139(TCP)端口。在2000
中,SMB可以直接运行在tcp/ip上,而没有额外的NBT层,使用TCP 445端口。因此在
2000上应该比NT稍微变化多一些。
可以在“网络连接/属性/TCPIP协议/属性/高级/WINS中设置启用或者禁用NBT
(NetBIOS over TCP/IP)。
当2000使用网络共享的时候,就面临着选择139或者445端口了。下面的情况确定会
话使用的端口:
1、如果客户端启用了NBT,那么连接的时候将同时访问139和445端口,如果从445端口
得到回应,那么客户端将发送RST到139端口,终止这个端口的连接,接着就从445端口
进行SMB的会话了;如果没有从445端口而是从139得到回应,那么
就从139端口进行会话;如果没有得到任何回应,那么SMB会话失败。
2、如果客户端禁用了NBT,他就将只从445端口进行连接。当然如果服务器(开共享
端)没有445端口进行SMB会话的话,那么就会访问失败了,所以禁用445端口后,对访
问NT机器的共享会失败。
3、如果服务器端启用NBT,那么就同时监听UDP 137、138端口和TCP139,445。如果禁
用NBT,那么就只监听445端口了。
所以对于2000来说,共享问题就不仅仅是139端口,445端口同样能够完成
如果客户端启用了NBT,那么连接的时候将同时访问139和445端口,微软并没有让139/TCP与445/TCP公平竞争。发起连接的SYN包在宏观上是同时发出的,具体起来,有时是先向139/TCP发起连接请求,有时是先向445/TCP发起连接请求,有点随机性。
37/UDP--NetBIOS名称服务器,网络基本输入/输出系统(NetBIOS)名称服务器(NBNS)协议是TCP/IP上的NetBIOS(NetBT)协议族的一部分,它在基于NetBIOS名称访问的网络上提供主机名和地址映射方法。
138/UDP--NetBIOS数据报,NetBIOS数据报是TCP/IP上的NetBIOS(NetBT)协议族的一部分,它用于网络登录和浏览。
139/TCP--NetBIOS会话服务,NetBIOS会话服务是TCP/IP上的NetBIOS(NetBT)协议族的一部分,它用于服务器消息块(SMB)、文件共享和打印。请设置防火墙开启相应的端口。一般只要在防火墙中允许文件夹和打印机共享服务就可以了。 
SMB(Server Message Block)协议在NT/2000中用来作文件共享,在NT中,SMB运行于
NBT(NetBIOS over TCP/IP)上,使用137,139(UDP),139(TCP)端口。在2000
中,SMB可以直接运行在tcp/ip上,而没有额外的NBT层,使用TCP 445端口。因此在
2000上应该比NT稍微变化多一些。



四.关于空会话$(扩展阅读)

NULL会话(空会话)使用端口也同样遵循上面的规则。NULL会话是同服务器建立的
无信任支持的会话。一个会话包含用户的认证信息,而NULL会话是没有用户的认证信
息,也就好比是一个匿名的一样。

没有认证就不可能为系统建立安全通道,而建立安全通道也是双重的,第一,就是
建立身份标志,第二就是建立一个临时会话密匙,双方才能用这个会话进行加密数据交
换(比如RPC和COM的认证等级是PKT_PRIVACY)。不管是经过NTLM还是经过Kerberos认
证的票据,终究是为会话创建一个包含用户信息的令牌。(这段来自Joe Finamore)

根据WIN2000的访问控制模型,对于空会话同样需要提供一个令牌。但是空会话由于
是没有经过认证的会话,所以令牌中不包含用户信息,因此,建立会话双方没有密匙的
交换,这也不能让系统间发送加密信息。这并不表示空会话的令牌中不包含SID,对于
一个空会话,LSA提供的令牌的SID是S-1-5-7,这就是空会话建立的SID,用户名是
ANONYMOUS LOGON。这个用户名是可以在用户列表中看到的。但是是不能在SAM数据库中
找到,属于系统内置的帐号。
(关于这部分对NULL SESSION的分析,可以参照:《NULL Sessions In
NT/2000http://rr.sans.org/win/null.php)

NULL会话几乎成为了微软自己安置的后门,但是微软为什么要来设置这样一个“后
门”呢?我也一直在想这个问题,如果NULL会话没有什么重要的用途,那么微软也应该
不会来设置这样一个东西。好不容易才在微软上找到这个:

当在多域环境中,要在多域中建立信任关系,首先需要找到域中的PDC来通过安全通
道的密码验证,使用空会话能够非常容易地找到PDC,还有就是关于一些系统服务的问
题。而且LMHOSTS的#Include就需要空会话的支持,可以参考文章:
http://support.microsoft.com/defaul...b;EN-US;q121281
还http://support.microsoft.com/defaul...b;EN-US;q124184

其实建立一个空会话的条件也非常严格。首先要能够满足上面的,也就是打开TCP
139和TCP 445端口。我们可以从一次关闭这两个端口的情况中看得出来。服务器关闭
445和139端口,然后我们来进行空会话的连接。首先,客户端打算
连接的是445端口,然后再试图连接139端口。当然最后还是失败了。
仅仅开放这两个端口还不行,服务器还必须得打开IPC$共享。如果没有IPC共享,即
使共享一个文件,有权限为Anonymous Logon,也不能建立会话,即使权限设置为完全
控制,出现的连接错误依然是权限不够。这和其他帐号是不一样的。如果要允许一个文
件夹共享能够类似IPC$(命名管道而非共享)能够使用空会话,那么需要修改注册表:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
\中的:NullSessionShares,
添加新的共享名,这样才能建立一个共享的空会话。这时,将不依赖IPC的存在了。
(即使这样的空会话对于后面的突破也是一点没可取之处的,因为没有了IPC$命名管
道,RPC不可取了,这下知道IPC这个命名管道的具体实现了。呵呵)

虽然空会话建立的要求很严格,但是那都是默认建立的。既然是默认的,对于使用
WIN2K系统的服务器来说,就还是有利用的价值。最明显的就是空会话可以很方便地连
接到其他的域,枚举用户、机器等。这也就是扫描软件进行探测的原理

二.Xp的两种共享模式
运行—gpedit.msc—本地计算机配置—windows设置—安全设置—本地策略—安全选项
在右侧窗口找到—网络访问:本地账户的安全和共享模式
1.仅来宾
2.经典
XP专业版中默认设置时仅来宾 而在2000、2003中默认是经典
 访问模式工作过程

  当我们将网上邻居工作模式设置成“仅来宾——本地用户将以来宾身份验证”模式时任何共享用户访问本地共享资源时他用户帐号都会被自动映射为“Guest”此时Windows系统是不需要用户输入任何帐号和密码这样来就能大大提高共享资源访问效率不过这需要共享资源所在主机系统事先将“Guest”帐号启用起来;如果共享资源所在主机系统还没有启用好“Guest”帐号时那么系统会弹出身份验证对话框在该对话框中我们不但无法自行更改访问用户名称而且输入任何密码都无效

  如果网上邻居功能工作在“经典——本地用户以自己身份验证”模式状态下时那么客户端工作站系统首先以共享用户登录本地系统用户帐号以及密码来向共享资源所在主机系统提交身份验证信息比方说共享用户登录客户端工作站系统时使用帐号为“aaa”密码为“bbb”此时该用户如果通过网上邻居功能访问局域网中共享资源时客户端工作站系统就会自动把帐号为“aaa”、密码为“bbb”信息提交给共享资源所在主机系统进行身份验证

  要是共享资源所在主机系统中恰好已经存在“aaa”用户帐号并且对应该帐号访问密码也为“bbb”时用户就能顺利地访问到目标共享资源;如果共享主机中存在“aaa”用户帐号但对应该用户帐号访问密码不为“bbb”时那么该用户在访问目标共享资源过程中系统会弹出身份验证对话框此时该用户只要输入“aaa”帐号、“bbb”密码就能进入下阶段安全验证环节了倘若共享主机中不存在“aaa”帐号并且对应主机系统中“Guest”帐号也没有被禁止使用那么用户访问共享主机中共享资源时就会自动使用“Guest”帐号来进行身份验证操作;要是共享主机中“Guest”帐号已经被禁用时那么客户端工作站系统仍然会弹出身份验证对话框此时共享访问用户只有正确输入共享主机中事先已经存在用户名和密码才能进入下个身份验证环节

  在这里需要提醒各位注意是查看“Guest”帐号是否处于起用状态时应该从计算机管理窗口中“本地用户和组”选项下面来查看而不应该从系统控制面板窗口中来查看系统控制面板窗口中“Guest”帐号启用或禁止状态只是介绍说明了允许或禁止“Guest”帐号从本地系统中进行登录我们可以按照下面思路方法来快速查看“Guest”帐号实际启用状态只要先将共享主机系统切换到DOS命令行工作状态的后在DOS命令行中输入串命令“net user guest”单击回车键后如果系统返回如图1所示结果信息时那就介绍说明“Guest”帐号还没有被成功启用

Windows网上邻居互访的基本条件:
1) 双方计算机打开,且设置了网络共享资源;
2) 双方的计算机添加了 "Microsoft 网络文件和打印共享" 服务;
3) 双方都正确设置了网内IP地址,且必须在一个网段中;
4) 双方的计算机中都关闭了防火墙,或者防火墙策略中没有阻止网上邻居访问的策略。

我们在这里不考虑这些基本条件,而仅仅是做策略上的排错

了解了上面的一些原理 相信大家对局域网共享故障的排错应该不会有多少问题了

下面来看看一些实例


1.强力技巧



  (1)让“网上邻居”实现多点下载和断点续传



很多人喜欢直接通过访问“网上邻居”来共享文件,但使用“网上邻居”则有诸多不便:既不能多点下载,又无法断点续传。其实只要在本地机器架设FTP服务器,就可以让“网上邻居”实现多点下载和断点续传。具体做法如下。

在本地电脑上利用SERV-U架设FTP服务器,然后设置站点和用户权限,在这里按照默认选项设置就行了。有关SERV-U架设的基本操作,很多文章已经介绍,这里不再赘述。

在SERV-U中添加虚拟目录。在第一步“Physical path”的地方直接填入共享名,如\\192.168.0.1\xxx之类。后续步骤与添加本地目录方法相同。

通过Flashget的站点资源探索器进入ftp://192.168.0.1(也就是下载文件所在计算机的IP地址)。进入相应目录后,在右边窗口文件列表中选择要下载的文件或目录,单击右键,选择“下载”。

由于利用了Flashget的多点下载属性,在局域网条件下可以极大提高速度,网络状况良好情况下是原速度的若干倍,同时可以完美支持断点续传。

(2)不将最新打开的共享文档添加到“网上邻居”中



Windows会在“网上邻居”中自动记忆下最近打开过的共享文档,如果不喜欢这项设置,可以在[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies

\Explorer]下新建一个名为“NoRecentDocsNetHood”的DWORD,然后将它赋值为1即可。

(3)让“邻居”更容易找到自己



一般情况下,一块网卡只能配置一个IP地址,但实际上可以为它添加更多IP地址。这样,你的电脑将会更频繁地向网络发送广播信息,对于新安装的操作系统,此方法可以帮助别人尽快找到你。在本地网卡上依次点击“属性→TCP/IP属性→高级”,然后按下“添加”按钮即可输入新的IP地址和子网掩码。

小提示

虽然一块网卡可以配置多个IP地址,但在网络邻居中连接的IP地址只有一个—网卡所配置的第一个IP地址。 (4)删除“网上邻居”保存的密码



访问网上邻居时提示输入密码,我为了方便,点了保存密码,但现在不想要这台电脑保存这个密码了,该如何清除呢?Windows XP的方法是依次进入“设置→控制面板→用户帐户”,然后点击你的账号,再点击左上角的“管理我的网络密码”。

如果是Windows 9x用户,只要删除该用户的PWL文件即可。

(5)加速“网上邻居”的启动速度



进入Windows XP的“网上邻居”后,它会搜索自己的共享目录、共享打印机以及和网络相关的计划任务,然后才显示出来,这样速度会慢很多。这些功能对我们没多大用的话,可以将其删除。在注册表编辑器中找到[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Current Version\Explore\RemoteComputer\NameSpace],删除其下的{2227A280-3AEA-1069-A2DE08002B30309D}(打印机)和{D6277990-4C6A-11CF87- 00AA0060F5BF}(计划任务),重启即可。

2.故障解决方案



故障现象1:一个小型网络,电脑之间物理连接没有任何问题,每台电脑都没有安装任何防火墙软件,但其中一台电脑出现“网上邻居”没有任何信息,输入“NET VIEW”命令结果是“清单是空的”,但是,网络中的其他电脑“网上邻居”中却有这台电脑的信息,并能正常访问。

原因:由于“Microsoft 网络客户端”协议没有绑定,或Workstation服务不正常造成的(见图3)。

解决方法:将“Microsoft网络客户端”协议勾选,这一点对于Windows 98系统同样重要,只是设置的位置有所区别。

你知道吗?



细心的读者可能已经发现了,上面的例子是在没有防火墙的条件下进行的,为什么要强调这一点呢?因为Browser服务是通过网络广播方式进行,很多防火墙会对广播的几个端口进行封堵(因为微软的NetBIOS协议有漏洞,会随机泄漏内存中的数据)。同样,Windows XP中的ICF(Internet连接防火墙)也会有这种作用。

故障现象2:初次通过“网上邻居”连接一台基于Windows XP的电脑时,我们都会遇到这个现象(见图4)。

这时,不管在对话框中输入任何密码,都没有作用,而此时也不能修改登录使用的账户。

原因:默认情况下,处于工作组状态的Windows XP Professional版本和Windows XP home版本电脑都会使用GUEST账户作为网络访问的默认账户。而在默认情况下WindowsXP中的GUEST账户为禁用状态,所以会出现这个现象。

解决方法:启用GUEST账户,然后参照本刊2004年第9期《Windows XP和平共享之终极报告》介绍的方法处理即可。

小提示

Windows XP中有一个很有意思的小“BUG”,就是在“用户账户”中的来宾GUEST账户的启用和停用状态和实际的情况可能不一致。

但是,通过本地用户和组进行设置时,始终和实际情况保持相同状态。

故障现象3:有些电脑连入网络后,发现“网上邻居”无法看到其他用户,而设置和物理连接都没有异常。

原因:在“我的电脑”上选择“属性→计算机名”,检查“计算机描述”内容,看看是否过长。

解决方法:在“运行”窗口输入“net config server /srvcomment:"text"”(不包括外侧引号),回车后即可把“计算机描述”改为“text”。重启电脑,检查“网上邻居”是否恢复正常。

故障现象4:“网上邻居”中“邻近的计算机”图标丢失。

原因:误删除造成。

解决方法:在Windows 2000中,如果不小心删除了“网上邻居”中的这个图标,可以通过修改注册表的方法找回来,其实有一个更加简单的方法:就是在“我的电脑→属性→网络标识→属性”菜单中,将当前计算机加入另外一个工作组,这样,“邻近的计算机”图标就会重建,再把工作组改回来就可以了。
Xp共享机制
被访问电脑上符合以下条件
1.不使用简单文件共享
2.本地安全策略设在“使用空白密码的本地帐号允许进行控制台登录”已启用
3.本地安全策略设在“网络访问:本地账户的共享和安全模式”为经典
4.本地安全策略设在“拒绝从网络访问这台计算机”中没有guest