﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Magic Machine-文章分类-计算机网络</title><link>http://www.cppblog.com/Jianglu/category/4245.html</link><description>汀小洛</description><language>zh-cn</language><lastBuildDate>Thu, 12 Jun 2008 01:55:01 GMT</lastBuildDate><pubDate>Thu, 12 Jun 2008 01:55:01 GMT</pubDate><ttl>60</ttl><item><title>[转] Windows 网络工具包 Netsh</title><link>http://www.cppblog.com/Jianglu/articles/23863.html</link><dc:creator>蒋露</dc:creator><author>蒋露</author><pubDate>Thu, 10 May 2007 20:24:00 GMT</pubDate><guid>http://www.cppblog.com/Jianglu/articles/23863.html</guid><wfw:comment>http://www.cppblog.com/Jianglu/comments/23863.html</wfw:comment><comments>http://www.cppblog.com/Jianglu/articles/23863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Jianglu/comments/commentRss/23863.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Jianglu/services/trackbacks/23863.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"><span style="DISPLAY: block">
<p>NETSH是Windows网络工具包中最强大的工具之一。这个列表将为你介绍NETSH在各种情况下的一些优秀用法，说明如何简化网络配置、管理和文件资料。</p>
<p><strong>#1</strong><strong>：NETSH</strong><strong>是什么？</strong></p>
<p>NETSH是Windows 2000和Windows Server 2003中最强大但不太为人所知的一个工具。它被默认安装，位于系统根目录的system32文件夹内。Windows XP中同样含有NETSH工具。</p>
<p>NETSH帮助你显示、修改、输入和输出系统网络参数的许多元素。它还能通过远程机器参数（-r）远程连接其它系统。</p>
<p><strong>#2</strong><strong>：NETSH</strong><strong>上下文</strong></p>
<p>上下文指NETSH能够管理的网络配置的特殊因素。NETSH中的命令和选项对上下文敏感，同样的命令可能存在于多个上下文区域内，并且每种上下文的命令和结果各不相同。下面为Windows Server 2003的NETSH上下文区域：</p>
<p><strong>上下文——说明</strong></p>
<p>aaaa &#8211; 验证、授权、审核与审计</p>
<p>dhcp &#8211; DHCP服务器管理</p>
<p>diag &#8211; OS和网络服务参数</p>
<p>interface &#8211; NIC配置；包括子上下文</p>
<p>ipsec &#8211; 可供选择的IP服务参数</p>
<p>netsh bridge &#8211; 网络桥接配置</p>
<p>ras &#8211; 远程访问服务器配置</p>
<p>routing &#8211; 路由管理（不是RRAS）</p>
<p>rpc &#8211; 子网和接口设置</p>
<p>wins &#8211; Windows互联网域名服务管理</p>
<p>现在，上下文可能还有子上下文，使得问题更加复杂。例如，接口上下文有三个子上下文：ip、ipv6和portproxy。NETSH把这些子上下文作为上下文引用，如netshet接口ip上下文。注意，Windows XP有一组不同的上下文。在非交互模式下使用输入和输出操作时，你必须指定上下文或子上下文配置。</p>
<p><strong>#3</strong><strong>：用NETSH</strong><strong>协调网络变更控制</strong></p>
<p>你可以使用NETSH输入和输出网络配置。使用NETSH进行网络变更控制就是一个典型的例子。如果要将一个系统安装到另一个网络中，但需要维持与其它系统的通信通道，NETSH输出将允许各个系统同意使用各种网络设置。例如，下面是一个转储操作的接口上下文NETSH输出的一部分。</p>
<p>set address name = "Teamed NIC" source = static addr = 10.64.32.100 mask = 255.255.252.0</p>
<p>set address name = "Teamed NIC" gateway = 10.25.44.1 gwmetric = 1</p>
<p>set dns name = "Teamed NIC" source = static addr = 10.64.22.50</p>
<p>add dns name = "Teamed NIC" addr = 10.95.61.22</p>
<p>add dns name = "Teamed NIC" addr = 10.95.45.34</p>
<p>set wins name = "Teamed NIC" source = static addr = 10.95.45.70</p>
<p>add wins name = "Teamed NIC" addr = 10.95.45.25</p>
<p>检查一个包含各部分在内的NETSH输出可以确保使用正确DNS、WINS和子网掩码对系统进行了正确路由。最大的优点在于，在完成所有适当的条目后，你可以将整个文件输入Windows系统中，并且不会输入任何错误信息。这只能用于接口上下文，也同样可用于所有其它上下文脚本。</p>
<p><strong>#4</strong><strong>：用NETSH</strong><strong>动态改变TCP/IP</strong><strong>地址</strong></p>
<p>你可以用NETSH动态修改IP地址，简单输入一个文件，就可将一个静态IP地址修改为DHCP。NETSH还能完成整个第3层配置（TCP/IP地址、DNS设置、WINS设置、IP别名等）。当你在网络上工作却没有DHCP，但有一台连接几个网络的移动计算机，其中一些网络有DHCP，此时应用这项功能就十分方便。使用NETSH快捷方式更优于Windows的自动公共IP寻址功能。下面是一个动态更新IP地址的实例：</p>
<p>C:NETSH -f filename.netsh</p>
<p>在这个例子中，filename.netsh为包含一个接口转储配置的NETSH文件。在Windows中，你可以把快捷方式建成一个.BAT批处理文件，它将运行上面的命令，以便你能方便地增加快捷方式，获得一个DHCP地址，并转换到一个客户网站、DMZ网络或其它静态IP网络的静态IP地址。</p>
</span>
<p><strong>#5</strong><strong>：最佳实践：使用.NETSH</strong><strong>后缀名</strong></p>
<p>NETSH输入和输出操作为本地普通文本格式，能够用任何文本工具阅读和编辑。但是，NETSH文件应作为一种特殊的文件类型处理，因为它们记录网络配置，并用来进行输入输出处理。最好的办法是把所有的输出操作提交到一个FILE.NETSH文件中，用这个文件保存NETSH的输出内容。这样，即使初学者也能够知道文件的内容。</p>
<p>输出（转储）和输入（-f）操作文件扩展名完全由用户指定。为了方便，你可以把.NETSH扩展名和Windows安装结合起来，从而实现本地双击编辑。</p>
<p><strong>#6</strong><strong>：交互模式NETSH</strong></p>
<p>NETSH是一个能够在交互或非交互模式下运行的Windows工具。根据所选择的模式，交互工具（如nslookup和dnscmd）的用法各不相同。</p>
<p>交互模式还有两个子模式：在线和离线模式。在交互模式下，在线模式直接与网络组件进行交互。离线模式允许你进行交互修改，再进入在线模式，使修改立即上线。</p>
<p><strong>#7</strong><strong>：非交互模式</strong></p>
<p>在非交互模式下，你可以输入一个文件来执行NETSH命令。进行文件输入和输出操作时，推荐使用非交互模式。在非交互模式下，你可以用NETSH输入每个上下文的关键设置，把它作为系统文件的一个特殊部分。另外，如果出现问题，你可以回溯到某个特殊的网络主题，因为NETSH输出了一个已知工作时间的脚本，你可以在非交互模式下重新输入这个NETSH脚本，还原那个时间的网络功能。请注意，NETSH并不备份上下文中的数据，如WINS数据库。</p>
<p><strong>#8</strong><strong>：解释脚本</strong></p>
<p>交流NETSH脚本时，你可以插入注释请求反馈。这允许你说明一个条目，或使用它对其他人进行培训。在一个NETSH输出文件中插入REM增加注释。但是，不要添加太多注释，仅在必要的地方增加注释。</p>
<p><strong>#9</strong><strong>：NETSH</strong><strong>警告</strong></p>
<p>NETSH是一个强大的工具，应该小心使用。使用交互在线模式（默认模式）进行修改比在交互离线模式下进行修改后再上线提交修改具有更大的风险。但是，使用非交互模式进行修改的情况也很普遍，因为所做的修改能够写入脚本。因此，应在虚拟机上试用NETSH或首先进行系统测试。</p>
<p><strong>#10</strong><strong>：导航NETSH</strong></p>
<p>最初，NETSH的大量特性可能让你难以适从。进入NETSH查看它的选项，并练习在交互模式下如何使用接口（那些习惯非交互模式的用户可能觉得有些不一样），会对你有所帮助。进入交互模式下的NETSH相当简单：在命令提示符下输入NETSH即可。然后，使用下面这些指导来导航这个命令的选项：</p>
<p>改变到另一个上下文，输入上下文的名称：例如，输入<em>interface ip</em>将从你现在所在的上下文直接进入接口<em>ip</em>上下文。</p>
<p>改变模式，输入<em>offline</em>或<em>online</em>：输入<em>offline</em>将使交互任务离线，那么任何修改都不会立即发生；输入<em>online</em>将使交互任务上线，任何改变将立即对系统的网络因素生效。</p>
<p>输入<em>show mode</em>将显示当前的模式（离线或在线）。默认的模式为在线；因此，如果你在进行测试，一定要保证你立即转入离线模式。</p>
<p>输入?或<em>help</em>将显示当前上下文位置的有效命令。如果你处于这个工具的根位置，就不存在活动的上下文，你的工具接口为<em>netsh&gt;</em>提示符。</p>
<p>通用命令，如<em>online</em>和<em>quit</em>，是指你可以随处使用的命令。上下文命令仅在当前上下文有效。例如，使用<em>netsh interface ip</em>&gt; <em>context</em>，你可以运行<em>show dns</em>命令查看网络配置，但这个命令不能在其它上下文或子上下文中运行。</p>
<p>在上下文中，运行<em>set</em>和<em>show</em>将提供上下文敏感的命令选项。</span></p>
<img src ="http://www.cppblog.com/Jianglu/aggbug/23863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Jianglu/" target="_blank">蒋露</a> 2007-05-11 04:24 <a href="http://www.cppblog.com/Jianglu/articles/23863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>