好吧, 我不会让你的异步端口冒起黑烟的. 我的意思并不是说NMCap一定简单好用, 事实上它并不难用. 但是任何的命令行工具都有它的不足. GUI不就是为了弥补这种不足而被发明的么?
NMCap使得你自动化地得到抓取变得更容易了. 还有, 它还使得你可以给别人提供脚本, 这比教一个人如何使用不是更简单么. 我不知道有多少人试过在电话或者邮件中指导父母, 朋友或者客户, 但是我肯定理解这样教导别人的难度. "双击的快一点, 妈妈...哦, 不, 不是那里, 在那个看起来有点像蜘蛛的东西上点击!"
NMCap是一个运行在命令行中的工具, 它允许你设置各种选项, 如何启动, 如何关闭, 抓什么, 在哪抓, 还有其他各种各样的变量. 这能使你在让别人抓取封包的时候可以写脚本, 并精确地得到你想要的东西.
NMCap 是...
- Low profile – 低能耗的- 如果你想抓一个trace而不影响服务器的性能, 你可以使用不带有任何filters的NMCap.
- Configurable – 可配置的- 有一大堆选项, 能够允许你完全地控制如何开启和关闭trace.
- Scriptable – 可编写脚本的- 因为它是命令行工具, 所以你可以在批处理文件中使用它.
我如何才能在我的进程结束的时候停止我的trace?
=======================
另一个NMCap能使变得简单的应用程序是automation. 你会经常想要在某种特定条件下开始或结束一个trace. 因为你不能直接地与NMCap沟通, 所以你需要告诉它在某种条件发生的时候要启动或结束. 这意味着, 你可以PING某个地址, 让这个结果来引发你的抓取停下来的动作. 这是在自动化抓取的后台技术的关键.
情景: 你需要启动一个capture, 运行你的测试, 然后停掉capture.
-------------------------------------
那么, 现在想象你的应用程序叫做blah.exe. 这项任务需要两个不同的进程. 一个运行NMCap来抓trace并寻找停止抓取的条件, 另一个进程是你的测试应用程序. 我们的批处理文件看起来像这样.
start nmcap /network * /capture /file t.cap /stopwhen /frame (ipv4.address == ipconfig.localipv4address) AND (Ipv4.DestinationAddress == 1.2.3.4)
Sleep 5
Blah.exe
Ping 1.2.3.4
我们通过使用START命令开启了nmcap的运行. 这使得NMCap运行在另外一个窗口的另外一个进程里(我们可以使用 /b 参数来让它运行在相同的窗口里).
后面的参数, " /network * " 告诉NMCP在所有的NIC上抓取. 你还可以用数字来选择一个特定的网络适配器. 要列出网络适配器的映射, 你可以输入命令" NMCap /DisplayNetworks "
参数 /capture /file t.cap 描述了把信息存往何处, 和如何使用我们的capture filter. 在这里, 我们没有capture filter. 如果我们想要提供一个的话, 我们可以在/capture参数后面添加一个filter.
最后的部分, " /stopwhen /frame … " 确定了合适NMCap可以停下来. 当使用" /frame " 参数的时候, 这允许你在某个filter的条件满足的时候停下来.
一旦我们看到有一个frame过了这个filter的约束, 我们就会停止抓取, 并离开NMCap. 我们寻找一个filter, 这个filter的sending IP address满足本地的IPvr地址, 并且IPv4的目的地址是1.2.3.4.
批处理文件的下一行就是简单地等5秒钟, 来确保NMCap能启动并准备好抓取封包了. 一旦5秒钟结束, 我们就调用想要为它抓取网络包的应用程序. 然后, 我们发出NMCap等待的PING命令, 告诉它应该停止抓取了.
你PING的地址存在与否并不重要. 至少在Windows机器上, PING命令不论你的目标合法与否都会发出去. 但是你还是可以修改你想用来结束抓取的封包的. 并不是只有一种方法来生成你想要用来做触发器的网络通讯封包的.
最基本的一些例子:
====================
那么让我们花一点时间退一步来看看一些最基本, 最简单的例子吧. 下面的命令在所有的网卡上抓取trace, 没有加任何的filter.
NMCap /network * /capture /file test.cap
现在让我们使用上面的命令, 给它添加一个filter. 我现在想要排除任何在3389端口上的通讯, 因为我知道我的Terminal Server session运行在这个端口上, 而且我不想在我的trace中看到任何这样的通讯记录.
NMCap /network * /capture "!(tcp.port == 3389)" /file test.cap
你可以在这里使用任意复杂的filter. 你可以引用所有我们有parser的协议. 不像你在NetMon2.x中你只能使用协议的一部分.
停止和开启
====================
默认的停止条件是在用户按了Ctrl+C 或 Ctrl+Break时停止抓取. 你可以使用参数"/stopwhen /keypress x" 或者任意其他的字母来指定在那个字符被输入的时候, 停止抓取.
有许多的开启和停止的条件. 你可以简单地让一个network event来启动NMCap的抓取. 你也可以在一定长度的时间之后来开启或停止抓取, 方法是指定" /TimeAfter " 参数. 在这种情况下, 你提供一个数值和单位, 比方说" /TimeAfter 30 mintues ". 或者用一个时间段来取而代之, 你可以指定绝对时间, 比如说"/Time 10:30:00 am 9/10/2006". 时间的格式取决于你的区域设置.
Capture File Output, creating chained captures
=====================
当你使用" /File "参数指定抓取文件的名字是, 你就通过给文件添加的后缀名告诉了NMCap你要用那种类型的文件格式来存放你抓取的信息. 如果你使用".cap"后缀, 那么我们就会把抓取来的数据存放到一个单独的抓取文件中, 并且限制文件的大小为20兆. 但是如果你在文件名后面添加一个冒号还有一个文件大小, 那么你就修改了默认的尺寸设定. 比如说, " /File t.cap:50M ", 那么文件的上限就是50兆了. 一旦我们到达了这个尺寸上限, 我们还是会继续抓取的, 不过文件的大小不会再增长了(前面的抓取会被丢掉).
但是如果你想要链接起来的抓取方式, 你可以使用".chn"后缀名. 同样地, 你还是可以指定每一个链式文件的大小, 添加一个冒号和数字就可以了. 当你使用链式抓取文件的时候, 它们的名字会用括号括起来一个数字来告诉它所在的抓取文件中的序列号. 举例说明, " /file t.chn:1M ", 会创建t(1).chn 和 t(2).chn等等文件. 每一个文件都会是1兆那么大.
很酷的NMCap窍门, 使用另一个抓取文件作为输入源
=====================
NMCap还允许你接受另一个capture文件作为输入. 这对于在使用他们之前先清理一下是非常有用的. 或者你可以仅解析在不同的端口或不同IP地址的网络通信. 下面的例子把test.cap文件中的发送向10.0.0.1的网络通信拿出来放到c1.cap文件中.
NMCap /InputCapture test.cap /capture Ipv4.Address == 10.0.0.1 /file c1.cap
Seeing more examples
=====================
NMCap还接受" /examples " 作为参数, 它会展现给你更多的例子, 从而帮助你更好的理解各种不同的参数. 通过这么多的抓取选项, 你就能够满足你的抓取需求了.
NMCap: the easy way to Automate Capturing
http://blogs.technet.com/netmon/archive/2006/10/24/nmcap-the-easy-way-to-automate-capturing.aspx