<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Network Monitor : Filtering</title><link>http://blogs.technet.com/netmon/archive/tags/Filtering/default.aspx</link><description>Tags: Filtering</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Broadcasts</title><link>http://blogs.technet.com/netmon/archive/2008/08/20/broadcasts.aspx</link><pubDate>Wed, 20 Aug 2008 17:31:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3109042</guid><dc:creator>PaulELong</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/netmon/comments/3109042.aspx</comments><wfw:commentRss>http://blogs.technet.com/netmon/commentrss.aspx?PostID=3109042</wfw:commentRss><description>&lt;P&gt;We can categorize traffic into two general types; directed and broadcast traffic. In the most general sense, a broadcast is sent to anybody that wants to listen. What I’d like to talk about is how broadcasts work and what they are used for. 
&lt;H4&gt;How broadcasts work&lt;/H4&gt;
&lt;P&gt;In general a broadcast is a special address. Different layers, in particular the hardware and network layers have specific addresses defined as broadcasts. So let’s look at each layer specifically. 
&lt;H5&gt;Hardware Layer:&lt;/H5&gt;
&lt;P&gt;This layer is normally controlled completely by hardware. It defines how the electrical signals go across the wire and how to decide what traffic you network adapter should listen to. In reality network traffic is always broadcasted to everybody on the same segment. Switches and Routers will further determine how segments are defined and may block or allow this type of traffic. 
&lt;P&gt;Your network adapter is setup to “listen” for a hardware address that is assigned to it. This 6 byte address is usually hard coded by the network card manufacturer. A manufacturer is assigned a group of addresses and they make sure they are all unique when shipped. When your network adapter sees an electrical signal, it decodes the Ethernet header information and checks if it’s one of the addresses it’s listening for. If it matches, then it sends the packet to the OS for more processing. 
&lt;P&gt;Here’s an example of the Ethernet portion of a packet. 
&lt;DIV class=csharpcode-wrapper&gt;
&lt;DIV class=csharpcode-wrapper&gt;
&lt;DIV class=csharpcode-wrapper&gt;&lt;PRE class=csharpcode&gt;&lt;STRONG&gt;    - Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[FF-FF-FF-FF-FF-FF],SourceAddress:[00-06-5B-61-2E-7A]
     + MacAddress DestinationAddress: *BROADCAST [FF-FF-FF-FF-FF-FF]
     + MacAddress SourceAddress: Dell Computer Corp. 612E7A [00-06-5B-61-2E-7A]
       UINT16 EthernetType: Internet IP (IPv4), 2048(0x800)&lt;/STRONG&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;You can see that the Source Address is comprised of 6 bytes, 00-06-5B-61-2E-7A. The first 3 bytes, 00-06-5B, indentify it as the Dell Computer Corp. The final 3 bytes are unique and set by the manufacturer. 
&lt;P&gt;In wireless, all traffic is inherently broadcast based. The air is the medium, ok not really air, but the idea is that everybody sees that traffic. But again once your wireless adapter sees the traffic; it will inspect the address and if it matches, it knows to send to the OS. 
&lt;P&gt;Broadcasts at this layer are special addresses that are industry defined. Each NIC is configured to listen to its personal address and any broadcast related traffic. For Ethernet, the broadcast is simply an Ethernet address of FF-FF-FF-FF-FF-FF. 
&lt;P&gt;So for instance, if we look at an ARP packet with NM3.2, you can see that the destination address is FF-FF-FF-FF-FF-FF, and there for while be listened to by any machine that receives the packet. 
&lt;DIV class=csharpcode-wrapper&gt;&lt;PRE class=csharpcode&gt;    &lt;STRONG&gt;Ethernet: Etype = ARP,DestinationAddress:[FF-FF-FF-FF-FF-FF],SourceAddress:[00-07-B3-29-F8-00]&lt;/STRONG&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;H5&gt;Network Layer:&lt;/H5&gt;
&lt;P&gt;The network layer in the case of IPv4 and IPv6 also does the same thing. The only difference here is that it may also include information on how to route traffic. For instance an IP address will determine if traffic is local or not for outgoing traffic. 
&lt;P&gt;[See &lt;A href="http://blogs.technet.com/netmon/archive/2007/07/20/intro-to-name-resolution.aspx" mce_href="http://blogs.technet.com/netmon/archive/2007/07/20/intro-to-name-resolution.aspx"&gt;http://blogs.technet.com/netmon/archive/2007/07/20/intro-to-name-resolution.aspx&lt;/A&gt; for more info about routing.] 
&lt;P&gt;When incoming traffic arrives at the IP layer, it again checks the address to see if it’s something it should be listening for. IP addresses however are not hardcoded. They are assigned and a NIC can listen on multiple IP addresses if it wants. 
&lt;P&gt;At this layer the broadcast again is defined as a specific IP address. For IPv4, this could be 255.255.255.255. This can also be restricted to the current sub net, so for instance 192.168.1.255 for a class C network. (For more info on IPv4 classes see http://en.wikipedia.org/wiki/Classful_network). 
&lt;H4&gt;Why have Broadcasts?&lt;/H4&gt;
&lt;P&gt;You may have already figured this out but broadcasts are used to send information that every machine on the same segment. For instance, when IPv4 needs to see if an address is already taken it will broadcast an ARP packet and ask if an address is available. In fact, you may have already seen that ARPs tend to always be broadcasts. 
&lt;DIV class=csharpcode-wrapper&gt;&lt;PRE class=csharpcode&gt;&lt;STRONG&gt;    Frame: Number = 41, Captured Frame Length = 60, MediaType = ETHERNET 
    + Ethernet: Etype = ARP,DestinationAddress:[FF-FF-FF-FF-FF-FF],SourceAddress:[00-07-B3-29-F8-00]
    + Arp: Request, 192.168.100.253 asks for 192.168.100.13&lt;/STRONG&gt;
    
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Broadcasts are also used to announce general things like their names to everybody. When NETBIOS starts up, it sends out an announcement to anybody who’s listening to see if this name has been used before. When the name is heard machines called browse masters listen to these names and record them. This allows you to see all the machines on your local network. Your machine may ask the browser for a complete list. 
&lt;DIV class=csharpcode-wrapper&gt;&lt;PRE class=csharpcode&gt;&lt;STRONG&gt;    + Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[FF-FF-FF-FF-FF-FF],SourceAddress:[00-1D-09-AB-5D-0A]
    + Ipv4: Src = 192.168.1.5, Dest = 192.168.1.255, Next Protocol = UDP, Packet ID = 3092, Total IP Length = 78
    + Udp: SrcPort = NETBIOS Name Service(137), DstPort = NETBIOS Name Service(137), Length = 58
    + Nbtns: Query Request for MachineX &lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;0x00&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;&amp;gt;&lt;/SPAN&gt; Workstation Service&lt;/STRONG&gt;

&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;When a computer boots, often broadcasts are used to ask the DCHP server for an address. In fact each time you boot a machine without an IP address, it must use a broadcast to find and communicate with the DHCP server. The message below is discover request that is sent when a machine is looking to find its first IP address. 
&lt;DIV class=csharpcode-wrapper&gt;&lt;PRE class=csharpcode&gt;&lt;STRONG&gt;    + Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[FF-FF-FF-FF-FF-FF],SourceAddress:[00-60-08-01-D3-03]
    + Ipv4: Src = 0.0.0.0, Dest = 255.255.255.255, Next Protocol = UDP, Packet ID = 288, Total IP Length = 328
    + Udp: SrcPort = BOOTP client(68), DstPort = BOOTP server(67), Length = 308
    + Dhcp: Request, MsgType = DISCOVER, TransactionID = 0x83484743&lt;/STRONG&gt;
&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Another application, and perhaps the first thing you had in mind when you heard the word broadcast, is sending audio or video data to minimize the network utilization. Rather than sending a separate feed to everybody, you can broadcast to a general address, and NICs can then be told to listen to these special broadcast addresses. This form of broadcast is also called multicasts. 
&lt;H4&gt;What is P-Mode?&lt;/H4&gt;
&lt;P&gt;Your NIC has a special mode called Promiscuous. This mode allows your NIC to see all traffic regardless if it’s meant for your machine or not. However, P-Mode is not necessary to see broadcast traffic as your NIC is already listening for these. By default this mode is disabled for each NIC. Even if you don’t enable P-Mode you will still see traffic where your IP or Ethernet address is not involved. This is because of the broadcast traffic. So this is why to see traffic when you click on the “Other Traffic” node in the conversation tree. 
&lt;H4&gt;Conclusion&lt;/H4&gt;
&lt;P&gt;Now hopefully you’ll be able to identify broadcast traffic and understand some reasons why this kind of traffic exist. There are many other reasons broadcasts are used and IPv6 uses something similar to IPv4. Perhaps with this knowledge you can inspect traffic and make sure broadcasts are going to the intended network segments as sometimes ill configured routers/switches can make for a noisier than necessary network.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3109042" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/netmon/archive/tags/Filtering/default.aspx">Filtering</category><category domain="http://blogs.technet.com/netmon/archive/tags/tshoot/default.aspx">tshoot</category></item><item><title>Understanding HTTP Flow with Netmon 3 - By Yuri Diogenes</title><link>http://blogs.technet.com/netmon/archive/2007/12/21/understanding-http-flow-with-netmon-3-by-yuri-diogenes.aspx</link><pubDate>Fri, 21 Dec 2007 18:37:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:2667183</guid><dc:creator>PaulELong</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.technet.com/netmon/comments/2667183.aspx</comments><wfw:commentRss>http://blogs.technet.com/netmon/commentrss.aspx?PostID=2667183</wfw:commentRss><description>&lt;P&gt;&lt;B&gt;1. Introduction&lt;/B&gt; 
&lt;P&gt;One of the most common protocols that we need to deal with these days is the HTTP Protocol. This is not only a privilege of Internet users, there are a lot of Intranet users that also use this protocol for internal transactions. 
&lt;P&gt;This post will show how to use Network Monitor 3 to better understand HTTP traffic and also to help you troubleshooting HTTP traffic. 
&lt;P&gt;&lt;B&gt;2. HTTP Components&lt;/B&gt; 
&lt;P&gt;On HTTP we pretty much have two messages: HTTP Request and HTTP Response. The picture below shows an example of these messages: 
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image001_2.jpg" mce_href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image001_2.jpg" atomicselection="true"&gt;&lt;IMG style="WIDTH: 619px; HEIGHT: 207px" title=HTTPFig0 border=0 alt=HTTPFig0 align=middle src="http://blogs.technet.com/photos/paulelong/images/2667230/original.aspx" width=619 height=207 mce_src="http://blogs.technet.com/photos/paulelong/images/2667230/original.aspx"&gt;&lt;/A&gt; 
&lt;P&gt;Figure 1 – HTTP Messages 
&lt;P&gt;Here is a brief explanation of the main components of a message: 
&lt;UL&gt;
&lt;LI&gt;&lt;B&gt;HTTP Version: &lt;/B&gt;the http version in use by the message (ex.: HTTP 1.0 or HTTP 1.1). 
&lt;LI&gt;&lt;B&gt;Method:&lt;/B&gt; this is about the action that the client is requesting to the server (ex.: GET and POST). 
&lt;LI&gt;&lt;B&gt;Status Code: &lt;/B&gt;this code describes what happened on that transaction (ex.: 200, 301 and 407). 
&lt;LI&gt;&lt;B&gt;Reason: &lt;/B&gt;complement to the status code (ex.: OK, NOT OK). 
&lt;LI&gt;&lt;B&gt;Headers: &lt;/B&gt;the content of the header will depend on the version of the HTTP. For instance, HTTP/1.1. has some headers that needs to be present for the method in use (request or response). 
&lt;LI&gt;&lt;B&gt;Body:&lt;/B&gt; some messages will contain the body, which is the data itself. Some other messages will have a blank line.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Based on this brief explanation about the main components of a message, let’s see how NetMon 3 can help us tracking down a HTTP conversation. 
&lt;P&gt;&lt;B&gt;3. &lt;/B&gt;&lt;B&gt;Understanding HTTP Messages using Netmon3&lt;/B&gt;&lt;B&gt;&lt;/B&gt; 
&lt;P&gt;On this example the server is trying to access the website &lt;A href="http://www.sysinternals.com/" mce_href="http://www.sysinternals.com"&gt;www.sysinternals.com&lt;/A&gt;. This server (Windows Server 2003) is behind a Proxy (ISA Server 2004) and using Integrated Authentication. All the traffic was captured from this server while was accessing this web site. 
&lt;P&gt;To help understand the HTTP conversations add the columns “&lt;I&gt;HTTP is Request” &lt;/I&gt;and “&lt;I&gt;HTTP is Response”&lt;/I&gt;. Those columns will have a number 1 in the column if this sentence is TRUE. This will help to identify what HTTP message was in use at that time. 
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image003_2.jpg" mce_href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image003_2.jpg" atomicselection="true"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; WIDTH: 777px; HEIGHT: 330px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=HTTPNMFig1 border=0 alt=HTTPNMFig1 align=middle src="http://blogs.technet.com/photos/paulelong/images/2667241/original.aspx" width=777 height=330 mce_src="http://blogs.technet.com/photos/paulelong/images/2667241/original.aspx"&gt;&lt;/A&gt; 
&lt;P&gt;Figure 2 – Choosing Columns. 
&lt;P&gt;For this example is quiet easy to identify the traffic, however on a real world scenario it might be difficult to locate the packet that has the URL request that you want. You might say, “Well, let’s create a filter for this request.” The thing is, if you create a filter for this request you will see only one packet requesting for this URL and this is not what we want here. 
&lt;P&gt;There is one cool feature on Netmon3 that allows you to use a filter to find a packet. To use this feature you need to click on the menu Frames than click in Find (or click Ctrl+F). The following window will appear: 
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image004_2.jpg" mce_href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image004_2.jpg" atomicselection="true"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image004 src="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image004_thumb.jpg" width=343 height=244 mce_src="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image004_thumb.jpg"&gt;&lt;/A&gt; 
&lt;P&gt;Figure 3 – Find Packet based on a filter. 
&lt;P&gt;In this case I want to find a packet that matches with the following criteria: 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Contains(http.request.URI,”sysinternals.com”)&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;After typing this and clicking &lt;I&gt;Find &lt;/I&gt;the packet that matches with this request is selected as the current frame. 
&lt;P&gt;To make even easier to read the trace we can also change the color for the HTTP packets. This will allow you to quickly identify the HTTP traffic. For this example we will set the HTTP Request in Red and the HTTP Response in blue. Follow the steps below to configure that: 
&lt;UL&gt;
&lt;LI&gt;Click in Filter. 
&lt;LI&gt;Click in Color Filters. 
&lt;LI&gt;Click in Add and type the query specified on the figure below:&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image005_2.jpg" mce_href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image005_2.jpg" atomicselection="true"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image005 src="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image005_thumb.jpg" width=422 height=375 mce_src="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image005_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Figure 4 – Color Filter feature. 
&lt;UL&gt;
&lt;LI&gt;After type this query click, the color (red) and the Bold style click OK. 
&lt;LI&gt;Click in Add again and now type the following query: protocol.HTTP.response 
&lt;LI&gt;Choose the color blue and leave it bold 
&lt;LI&gt;Click OK again.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Here an example of how it will look after you apply the color filter: 
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image007_2.jpg" mce_href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image007_2.jpg" atomicselection="true"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; WIDTH: 902px; HEIGHT: 179px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=HTTPNM3Fig5 border=0 alt=HTTPNM3Fig5 align=middle src="http://blogs.technet.com/photos/paulelong/images/2667280/original.aspx" width=902 height=179 mce_src="http://blogs.technet.com/photos/paulelong/images/2667280/original.aspx"&gt;&lt;/A&gt; 
&lt;P&gt;Figure 5 – Frame summary after applies the filter. 
&lt;P&gt;Now we can close the Find Dialog window and look at the packet. Here is the HTTP part of the packet:&lt;PRE class=csharpcode&gt;- Http: Request, GET http://www.sysinternals.com/ 
- Request: 
  Command: GET
  - URI: http://www.sysinternals.com/
    + Uri: 
    ProtocolVersion: HTTP/1.0
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
    Accept-Language: en-us
    UA-CPU: x86
    Proxy-Connection: Keep-Alive
    UserAgent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)
    Host: www.sysinternals.com
    HeaderEnd: CRLF&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;P&gt;As you can see, this is a HTTP Request message and some of the components of the messages previously explained appear on this packet. Let’s check the answer for this packet:&lt;PRE class=csharpcode&gt;- Http: Response, HTTP/1.1, Status Code = 301
  - Response: 
    ProtocolVersion: HTTP/1.1
    StatusCode: 301, Moved permanently
    Reason: Moved Permanently
    Via: 1.1 SRVISA
    Connection: Keep-Alive
    Proxy-Connection: Keep-Alive
    ContentLength: 31
    Date: Sun, 26 Aug 2007 15:05:10 GMT
    Location: http://www.microsoft.com/technet/sysinternals
    ContentType: text/html
    Server: Microsoft-IIS/6.0
    XPoweredBy: ASP.NET
    Set-Cookie: ASPSESSIONIDCCRASDTB=OKKIMCCDOMFAEPIPJCLNPEBN; path=/
    Cache-control: private
    HeaderEnd: CRLF
    + payload: HttpContentType = text/html&lt;/PRE&gt;
&lt;P&gt;Note: it is important to mention that in my lab there were no multiple streams involved. Which make it easier to track it down the answer, since it is the next packet in the sequence. 
&lt;P&gt;This HTTP Response message is really important to emphasize one particular point, which is the Status Code. 
&lt;P&gt;The status code on this answer is 301. This number itself already says what is going on in this answer. It is important to know at least the meaning of status code based on the number range. The ranges are:&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=400 unselectable="on"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=198&gt;&lt;B&gt;Status Code &lt;/B&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=200&gt;&lt;B&gt;Means&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=198&gt;200 – 299&lt;/TD&gt;
&lt;TD vAlign=top width=200&gt;Success&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=198&gt;300 – 399&lt;/TD&gt;
&lt;TD vAlign=top width=200&gt;Redirection&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=198&gt;400 – 499&lt;/TD&gt;
&lt;TD vAlign=top width=200&gt;Error on the client side&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=198&gt;500 – 599&lt;/TD&gt;
&lt;TD vAlign=top width=200&gt;Error on the server side&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;The netmon3 parser for HTTP has the main codes already defined. If you click on the Parser Tab, click on Protocols and HTTP, you will see on the right panel those definitions. 
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image009_2.jpg" mce_href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image009_2.jpg" atomicselection="true"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; WIDTH: 1150px; HEIGHT: 545px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=HTTPNm3Fig3 border=0 alt=HTTPNm3Fig3 align=middle src="http://blogs.technet.com/photos/paulelong/images/2667246/original.aspx" width=1150 height=545 mce_src="http://blogs.technet.com/photos/paulelong/images/2667246/original.aspx"&gt;&lt;/A&gt; 
&lt;P&gt;Figure 6 – Netmon3 HTTP Parser. 
&lt;P&gt;You also can view this code on the Table object on the Parser tab, as showed below: 
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image011_2.jpg" mce_href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image011_2.jpg" atomicselection="true"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; WIDTH: 989px; HEIGHT: 635px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=clip_image011 border=0 alt=clip_image011 align=middle src="http://blogs.technet.com/photos/paulelong/images/2667275/original.aspx" width=989 height=635 mce_src="http://blogs.technet.com/photos/paulelong/images/2667275/original.aspx"&gt;&lt;/A&gt; 
&lt;P&gt;Figure 7 – Table View. 
&lt;P&gt;Since this is a redirection answer, the field “location” has the place where the page is now located. This is presented to the client (requester) that based on that will send another HTTP Request for this URL. 
&lt;P&gt;&lt;B&gt;4. HTTP with Netmon3 Conversation&lt;/B&gt; 
&lt;P&gt;The conversation feature on netmon3 allows you to view the frames aggregated on the same conversation. For this next example, let’s see the frames aggregated for the HTTP request for the URL &lt;A href="http://www.microsoft.com/" mce_href="http://www.microsoft.com"&gt;www.microsoft.com&lt;/A&gt;: 
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image013_2.jpg" mce_href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image013_2.jpg" atomicselection="true"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px" border=0 alt=clip_image013 src="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image013_thumb.jpg" width=603 height=260 mce_src="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/UnderstandingHTTPFlowwithNetmon3ByYuriDi_9540/clip_image013_thumb.jpg"&gt;&lt;/A&gt; 
&lt;P&gt;Figure 8 – Filtering by conversation. 
&lt;P&gt;Clicking on the conversation tree filters out packets based on the HTTP traffic automatically. This can help to understand the whole conversation that client and server are having during this access. Another way to customize this filter is right clicking on the conversation and chooses the option &lt;I&gt;Copy Conversation Filter to Clipboard” &lt;/I&gt;as showed in figure 8. Remember that all filters are applied in combination with the current node that is selected in the Conversation Tree. Be sure to click on the root of the tree if you don’t want the frames to be qualified further by the conversation tree. 
&lt;P&gt;Looking at this conversation we can see another status code that means there was an error on the client side:&lt;PRE class=csharpcode&gt;- Http: Response, HTTP/1.1, Status Code = 407
- Response: 
  ProtocolVersion: HTTP/1.1
  StatusCode: 407, Proxy authentication required
  Reason: Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. )
  Via: 1.1 SRVISA
  - ProxyAuthenticate: Negotiate
  WhiteSpace:
  AuthenticateData: Negotiate
  - ProxyAuthenticate: Kerberos
    WhiteSpace:
    AuthenticateData: Kerberos
  - ProxyAuthenticate: NTLM
    WhiteSpace:
    AuthenticateData: NTLM
  Connection: Keep-Alive
  Proxy-Connection: Keep-Alive
  Pragma: no-cache
  Cache-Control: no-cache
  ContentType: text/html
  ContentLength: 4106
  HeaderEnd: CRLF
  + payload: HttpContentType = text/html&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;P&gt;The reason why this request was considered an error on a client side is because the ISA requires authentication and the Internet Explorer on the first attempt to access the web site did not send the user credentials. After the response from the server, and depending on the browser and on the configuration, the client will use either NTLM or Kerberos to send another packet with the credentials. 
&lt;P&gt;&lt;B&gt;5. General Information&lt;/B&gt; 
&lt;P&gt;There are many commands that you can use to obtain more information about your HTTP traffic using netmon 3. Let’s see some of them:&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=594 unselectable="on"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=250&gt;&lt;B&gt;Filter&lt;/B&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=342&gt;&lt;B&gt;Explanation&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=253&gt;contains(Http.Response.StatusCode,"301")&lt;/TD&gt;
&lt;TD vAlign=top width=339&gt;Show all HTTP packets where the Status Code is 301&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=256&gt;Property.HttpIsRequest&lt;/TD&gt;
&lt;TD vAlign=top width=337&gt;Show all HTTP Request packets&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=258&gt;Property.HttpPragma&lt;/TD&gt;
&lt;TD vAlign=top width=336&gt;Show all HTTP messages that cannot be cached. More information about the Pragma Field, see the &lt;A href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32" mce_href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32"&gt;HTTP Field definition&lt;/A&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H2&gt;&lt;STRONG&gt;Yuri Diogenes&lt;/STRONG&gt;&lt;/H2&gt;
&lt;H2&gt;&lt;STRONG&gt;Security Support Engineer – ISA Server Team&lt;/STRONG&gt;&lt;/H2&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=2667183" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/netmon/archive/tags/Filtering/default.aspx">Filtering</category><category domain="http://blogs.technet.com/netmon/archive/tags/tshoot/default.aspx">tshoot</category></item><item><title>Color Filtering Error Messages</title><link>http://blogs.technet.com/netmon/archive/2007/06/28/color-filtering-error-messages.aspx</link><pubDate>Thu, 28 Jun 2007 23:32:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:1387953</guid><dc:creator>PaulELong</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/netmon/comments/1387953.aspx</comments><wfw:commentRss>http://blogs.technet.com/netmon/commentrss.aspx?PostID=1387953</wfw:commentRss><description>&lt;H1 style="MARGIN: 24pt 0in 0pt"&gt;&lt;FONT size=5&gt;&lt;FONT color=#365f91&gt;&lt;FONT face=Cambria&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/H1&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Calibri&gt;Color Filters in Network Monitor are a simple way to make frames stick out in a trace.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Dealing with large traces often makes it difficult to see important information.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The sea of data represented by network traffic becomes a difficult backdrop to catch errors that occur.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This blog will focus on creating color filters to make these types of errors stick out.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=4&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;The Protocols&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Calibri&gt;For this blog, I concentrate on the protocols above the transport layer: Kerberos, LDAP, SMB and HTTP. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;I could have dove into TCP or ICMP as well, but those types of errors are in a different class.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For instance TCP resets, don’t always indicate a problem.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But this should give you a good background to understand how to create color filters to flag errors for other protocols you work with.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=4&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;Kerberos&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Calibri&gt;We’ll start with the simplest filter.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;When we flag an error in Kerberos, we use a structure called “KrbError”.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;So we’ll simply filter on any frame which has this structure created.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;We can do this by using the name of the structure as our filter.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Calibri&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;KrbError&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=4&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;LDAP&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Calibri&gt;For LDAP, we need to look at frames where the LDAPResult is not zero.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But due to an engine quirk, we can’t just search for frames where the Result code is not zero.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Instead we’ll search for frames that have a ResultCode, and where the description string does not have success in it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;(!LDAPResult.ToString.contains("Success") &amp;amp;&amp;amp; LDAPResult.ResultCode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;I also want to flag Abandon Request for LDAP, since these may also be an indication that something went awry.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The following filter catches these.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;(LDAPAbandonRequest)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=4&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;HTTP&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;HTTP return’s&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;a status code that’s 400 or larger when an error occurs.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;But one problem is this value is a string.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For this filter, we will use the StringToNumber plug-in and convert to a number first so we can use our mathematical operators.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;http.Response.StatusCode.StringToNumber &amp;gt;= 400&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=4&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;SMB&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Calibri&gt;SMB has an NTStatus code that is set when an error occurs.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The only modification we are going to do here is ignore one specific error.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This is because SMB will return an error STATUS_MORE_PROCESSING_REQUIRED (22) when SMB expects more frames with the rest of the data. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;This isn’t exactly an error, so my filter ignores that specific value.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;smb.NTStatus.Code != 0 AND smb.NTStatus.Code != 22&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=4&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;Creating the Color Filter&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;Now that we’ve determined the various things we want to flag, now it’s time to create the color filter.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Just go to the Filter menu and open the Color Filter dialog.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Simply click on Add and paste the following.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 27pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;(KrbError )&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.75in"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;OR&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 27pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;(smb.NTStatus.Code != 0 AND smb.NTStatus.Code != 22)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.75in"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;OR&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 27pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;(!LDAPResult.ToString.contains("Success") &amp;amp;&amp;amp; LDAPResult.ResultCode)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.75in"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;OR&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 27pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;(LDAPAbandonRequest)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.75in"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;OR&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 27pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;(http.Response.StatusCode.StringToNumber &amp;gt;= 400)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;o:p&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;Then choose an appropriate color, I chose red, and exit.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Now any problem frames that match our filter will show up as red.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Color filters are global to NM3.1, so any new instance of NM3 or any new traces you open will use this new color filter automatically.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT size=4&gt;&lt;FONT color=#4f81bd&gt;&lt;FONT face=Cambria&gt;Expand to your favorite Protocols&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/H2&gt;
&lt;P style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#000000&gt;You could continue to do this for every protocol you work with.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Sometime trying to find the proper filter is the trick, so hopefully these examples will help you understand different ways of doing this. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=1387953" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/netmon/archive/tags/Filtering/default.aspx">Filtering</category><category domain="http://blogs.technet.com/netmon/archive/tags/tshoot/default.aspx">tshoot</category></item><item><title>Wireless Capturing With Network Monitor 3.1</title><link>http://blogs.technet.com/netmon/archive/2007/06/15/wireless-capturing-with-network-monitor-3-1.aspx</link><pubDate>Fri, 15 Jun 2007 17:22:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:1253041</guid><dc:creator>PaulELong</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.technet.com/netmon/comments/1253041.aspx</comments><wfw:commentRss>http://blogs.technet.com/netmon/commentrss.aspx?PostID=1253041</wfw:commentRss><description>&lt;p&gt;One of the exciting new features in NM3.1 is the ability to capture wireless network data and management packets on Vista. This new feature provides Network Monitor a useful tool for trouble shooting wireless problems.&lt;/p&gt; &lt;h4&gt;What do you mean, wireless Management packets?&lt;/h4&gt; &lt;p&gt;With the introduction of NDIS6, we now have the ability to query the OS in a standard way to receive information regarding data that is specific to wireless transmission. The first piece of info we see on wireless frames is stuff like signal strength and data rate. This is available for any wireless card that supports Native WiFi; more on that later. We now append a WiFi structure which contains the 802.11 MAC frame plus Metadata such as Signal strength.  &lt;p&gt;But even more exciting than that, (ok I’m a geek, but I’m guessing you may be one too! J), we can now sniff management packets. These are the cool packets that need to occur in order to find a WiFi Access Point (AP) and that the AP can send out in order to announce itself. Now you can find out what’s going on when your WiFi signal disappears. Or you can see what other AP’s are broadcasting in your area.  &lt;h4&gt;Supported Hardware&lt;/h4&gt; &lt;p&gt;In this section I will list the current hardware with MS drivers which support Native WiFi, and thus sniffing of management packets. This list is sure to change and be updated as drivers are updated, new adapters are added, or new hardware appears. There is more hardware out there that uses the same chipsets. (We do not have the time to test every single adapter on the market). I will attempt to keep this section up to date, though contacting your vendor may be the most reliable way to get accurate information.  &lt;p&gt;Warning: OEMs (Original Equipment Manufacturer) may change the chipset without modifying the product name or in some instances the version number.  &lt;div align="center"&gt; &lt;table class="" cellspacing="0" cellpadding="2" width="484" align="center" border="1" unselectable="on"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td class="" valign="top" width="136"&gt; &lt;p align="left"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Chipset&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="130"&gt; &lt;p align="left"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Driver&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="216"&gt; &lt;p align="left"&gt;&lt;strong&gt;&lt;font color="#000000"&gt;OEM Retail Model&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="" valign="top" width="135"&gt; &lt;p align="left"&gt;RTL8185&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="131"&gt; &lt;p align="left"&gt;6.1099.312.2007&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="216"&gt; &lt;p align="left"&gt;Xterasys2526g &lt;/p&gt; &lt;p align="left"&gt;Belkin F5D7010v7 &lt;/p&gt; &lt;p align="left"&gt;Belkin F5D7000v7 &lt;/p&gt; &lt;p align="left"&gt;Netgear JWAG511&lt;/p&gt; &lt;p align="left"&gt;CompUSA 54Mbps Wireless G PC Card&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="" valign="top" width="134"&gt; &lt;p align="left"&gt;Ralink RT73&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="132"&gt; &lt;p align="left"&gt;3.0.2.0&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="216"&gt; &lt;p align="left"&gt;Dlink WUA-1340&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="" valign="top" width="133"&gt; &lt;p align="left"&gt;Ralink RT61&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="133"&gt; &lt;p align="left"&gt;2.0.3.0&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="216"&gt; &lt;p align="left"&gt;Hawking HWPG1&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="" valign="top" width="133"&gt; &lt;p align="left"&gt;Marvell Libertas (USB)&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="133"&gt; &lt;p align="left"&gt;1.0.0.49&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="216"&gt; &lt;p align="left"&gt;Dlink DWL G122d1&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="" valign="top" width="133"&gt; &lt;p align="left"&gt;Marvell Libertas (PCCard)&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="133"&gt; &lt;p align="left"&gt;1.0.0.49&lt;br&gt;1.0.0.52&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="216"&gt; &lt;p align="left"&gt;Trendnet TEW-421PCH/W:B1&lt;br&gt;Netgear WG511v2&lt;br&gt;Netgear WG511U&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="" valign="top" width="133"&gt; &lt;p align="left"&gt;Atheros 5002..5005&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="134"&gt; &lt;p align="left"&gt;7.3.1.42&lt;/p&gt;&lt;/td&gt; &lt;td class="" valign="top" width="216"&gt; &lt;p align="left"&gt;Dlink DWL G650&lt;br&gt;Dlink DWI G520&lt;/p&gt; &lt;p align="left"&gt;Dlink DWA-642&lt;/p&gt; &lt;p align="left"&gt;Netgear WG511U&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 10pt" align="left"&gt;&lt;span style="font-size: 10pt; color: #ffc000; line-height: 115%"&gt;&lt;font face="Calibri"&gt;&lt;font color="#000000"&gt;D link DWA-556&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 10pt" align="left"&gt;&lt;span style="font-size: 10pt; color: #ffc000; line-height: 115%"&gt;&lt;font face="Calibri"&gt;&lt;font color="#000000"&gt;Dlink DWA-643&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 10pt" align="left"&gt;&lt;span style="font-size: 10pt; color: #ffc000; line-height: 115%"&gt;&lt;font face="Calibri"&gt;&lt;font color="#000000"&gt;Dlink DWA-552&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 10pt" align="left"&gt;&lt;span style="font-size: 10pt; color: #ffc000; line-height: 115%"&gt;&lt;font face="Calibri"&gt;&lt;font color="#000000"&gt;Dlink DWA-542&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 10pt" align="left"&gt;&lt;span style="font-size: 10pt; color: #ffc000; line-height: 115%"&gt;&lt;font face="Calibri"&gt;&lt;font color="#000000"&gt;Dlink DWA-645&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left" mce_keep="true"&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt; &lt;p align="center"&gt;&amp;nbsp; Last updated 6/28/2007 2:10 pm PST  &lt;p&gt;NOTE: That the Windows Logo Kit 1.0c has released.&amp;nbsp; Please verify with your manufacture that your NIC has passed this certification to determine if NM3.1 supports wireless sniffing.&amp;nbsp; The list above will no longer be updated now that the certification is complete. &lt;p&gt;Manufactures may provide their own drivers which may also support Monitor mode, but you’ll have to contact them directly to see if that is the case. Some information may be altered or omitted by the NIC upon reception of a data or management packet and thus not be correctly presented to NM3. An example is the CRC of packets.  &lt;p&gt;&lt;b&gt;Important Note: Switching into this mode with a driver that has not been verified, may cause your system to hang or blue screen. Be careful and save you data before using NM3.1 on a system with a wireless card.&lt;/b&gt;  &lt;h4&gt;Wireless Meta Data&lt;/h4&gt; &lt;p&gt;As I mentioned above, each wireless packet will have a header. Like Ethernet, this contains the hardware address info, but this may also contain information about the transmission. While this metadata may differ for each vendor, there are some common fields which we return from the driver and display in the frame details. Some of the more interesting fields are listed below:  &lt;p&gt;&lt;b&gt;PhyType&lt;/b&gt; – Shows you the physical media type for this packet, for example, 802.11b.  &lt;p&gt;&lt;b&gt;Channel &lt;/b&gt;– The physical WiFi channel for this packet. This is usually a number, but the range of which depends on the PhyType and manufacturer. Normally channels for 802.11b range from 1-11. Now you can see if you are using the same channel as your neighbor, and change your AP base channel to improve your connection.  &lt;p&gt;&lt;b&gt;lRSSI &lt;/b&gt;– Receive Signal Strength Indicator is a measurement of RF Energy as detected by the hardware. This value does not measure signal quality, only its strength. It is possible to have high strength but not high quality. But you can use this to get an idea of the power of the signal at a given location.  &lt;p&gt;&lt;b&gt;Rate&lt;/b&gt; – The current transfer rate. Wireless will change the transfer rate based on the quality of the signal. While you may think you are getting 11 Mbps or 54 Mbps, you may only be getting 1 Mbps!  &lt;h4&gt;Cool Wireless Tricks&lt;/h4&gt; &lt;p&gt;Now you can track down the dead spots at your location and see if there’s a way to affect your signal strength. For instance you could continually ping your router as you walk around the house. Then setup color filters to signal packets with low or marginal signal strength and/or data Rate. A sample color filter could be set as follows:  &lt;p&gt;WiFi.MetaData.lRSSI &amp;lt; 20 OR WiFi.MetaData.Rate &amp;lt; 10  &lt;p&gt;It’s important to note, that the RSSI value is based on your adapters definition of a max. For instance some cards return a value between 0 and 60, and others between 0 and 100. You’ll have to check with your manufacture for details, but you can probably get a good idea of the max by getting close to your Wireless AP, and using that to approximate your max.  &lt;p&gt;So with your continuous ping going, walk around to places where you normally sit with your laptop and look for any RED frames, or whatever color you chose. You can also experiment with the orientation of your wireless router. You may find you get a better signal strength when you face it a different direction, or even when you turn it on its side.  &lt;h4&gt;Working with WiFi Monitor Mode&lt;/h4&gt; &lt;p&gt;By default when you start a trace with a wireless adapter, you are normally already connected to a wireless AP. In this mode, you only see traffic to and from your machine and various types of broadcast traffic. But before you have already connected to an AP, the wireless NIC is sending network traffic in order to find an AP to connect to. NM3.1 can put your wireless NIC into monitor mode to see this type of traffic.  &lt;p&gt;&lt;b&gt;Important Note:&lt;/b&gt; &lt;b&gt;When you place you WiFi NIC in monitor mode, you will disconnect your current wireless network connection! You will not be able to access the internet or your local network in this mode.&lt;/b&gt;  &lt;p&gt;So with a NIC that supports the NWifi standard, NM3.1 can now place your NIC in monitor mode and do some interesting things. With NM3.1 you can perform two types of scanning modes. In the first mode, you select a specific PhyType and Channel to sniff on, and you’ll see all traffic only on that Channel.  &lt;p align="center"&gt;&lt;a href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/WirelessCapturingWithNetworkMonitor3.1_91E8/clip_image002_2.jpg" mce_href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/WirelessCapturingWithNetworkMonitor3.1_91E8/clip_image002_2.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="480" alt="clip_image002" src="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/WirelessCapturingWithNetworkMonitor3.1_91E8/clip_image002_thumb.jpg" width="488" border="0" mce_src="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/WirelessCapturingWithNetworkMonitor3.1_91E8/clip_image002_thumb.jpg"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;In the dialog above, we choose the radio button for “Select a layer and channel”, and then we have the ability to choose one of the PhyTypes (802.11a, 802.11b etc…). And with each PhyType, you get another drop down with all of the available channels for that PhyType.  &lt;p&gt;Once you hit the Apply button, your NIC will disconnect from the AP (you’ll lose your network connection), and set the NIC to monitor traffic on the selected channel. If NM3.1 is currently capturing, the traffic will start capturing this channel only. Also, while in this mode, you must keep this dialog box open. It is actually a separate EXE which will bring up the LUA dialog and ask for permissions when you click on the Properties for a Wireless NIC. Once you close this dialog box, the NIC will return to normal operation and reconnect to the AP as if the machine was trying to connect for the first time. If NM3.1 is capturing, you will see traffic that occurs after the AP negotiation is complete.  &lt;p&gt;You can also put the NIC in a scanning mode. This briefly scans each Channel in each PhyType you have checked and captures traffic. Once the timeout is reached, it moves on to the next selected channel.  &lt;p align="center"&gt;&lt;a href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/WirelessCapturingWithNetworkMonitor3.1_91E8/clip_image004_2.jpg" mce_href="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/WirelessCapturingWithNetworkMonitor3.1_91E8/clip_image004_2.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="480" alt="clip_image004" src="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/WirelessCapturingWithNetworkMonitor3.1_91E8/clip_image004_thumb.jpg" width="488" border="0" mce_src="http://blogs.technet.com/blogfiles/netmon/WindowsLiveWriter/WirelessCapturingWithNetworkMonitor3.1_91E8/clip_image004_thumb.jpg"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;If focus is on this dialog, you can see which channel is currently being scanned. This information is updated in the status bar at the bottom of the dialog.  &lt;p&gt;This gives you the ability to capture a swath of data from each channel and determine stuff like, how many APs are available in reach of my machine and what strengths? Or what channels are not being used at all? This could allow you to pick a channel that’s not so crowded and thus increase your wireless throughput. You can also use this to t-shoot why you can’t get connected at all, given you have two wireless NICs or two machines, one to capture and the other to attempt to connect.  &lt;h4&gt;A Brand New Sniffing Experience&lt;/h4&gt; &lt;p&gt;NM3.1’s new WiFi Features give you a new experience and present new ways to t-shoot problems that were not easy to figure out before. Determining wireless signal strengths and channel usages are just a few of the ways you can improve your wireless experience.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=1253041" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/netmon/archive/tags/Filtering/default.aspx">Filtering</category><category domain="http://blogs.technet.com/netmon/archive/tags/tshoot/default.aspx">tshoot</category></item><item><title>Follow the Stream</title><link>http://blogs.technet.com/netmon/archive/2007/04/05/follow-the-stream.aspx</link><pubDate>Thu, 05 Apr 2007 17:11:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:728556</guid><dc:creator>PaulELong</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/netmon/comments/728556.aspx</comments><wfw:commentRss>http://blogs.technet.com/netmon/commentrss.aspx?PostID=728556</wfw:commentRss><description>&lt;P&gt;This is not some existential trip or search for life's meaning. Rather this refers to a feature protocol analyzers use to narrow down traffic in a network trace. I mentioned this briefly in my Cable Talk Blog back on November 15&lt;SUP&gt;th&lt;/SUP&gt;, 2006. In fact you should refresh your memory as we'll refer to topics discussed in that article. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/netmon/archive/2006/11/15/conversations-in-network-monitor-3-0-cable-talk.aspx" mce_href="http://blogs.technet.com/netmon/archive/2006/11/15/conversations-in-network-monitor-3-0-cable-talk.aspx"&gt;http://blogs.technet.com/netmon/archive/2006/11/15/conversations-in-network-monitor-3-0-cable-talk.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;To follow a stream in a general sense means to narrow down the network traffic to a specific conversation. This could mean between two machines, between two specific TCP ports, or even two applications. You can also see how these conversations could be hierarchical; where a conversation between two machines could be further broken into conversations between specific TCP ports. &lt;/P&gt;
&lt;H2&gt;What's so good about that? &lt;/H2&gt;
&lt;P&gt;Why is this useful, you may ask? Given that a network trace could have thousands of connections occurring, you'll need a way to find that needle in the haystack. Also, you may be looking at a problem frame and want to look at the rest of the related traffic. Being able to quickly narrow down the packets for related network traffic can help speed up your analysis time on complex traces. &lt;/P&gt;
&lt;H2&gt;Turn On Conversations &lt;/H2&gt;
&lt;P&gt;By default we have disabled conversation tracking to save memory and provide better performance out of the box. But in order to benefit more fully from this protocol analyzer, conversations should be enabled before you start a new capture or open a preexisting capture. &lt;/P&gt;
&lt;H2&gt;Cat Skinning: Method 1 &lt;/H2&gt;
&lt;P&gt;Using the conversation tree is one way to skim through the various conversations that NM3 has exposed. Remember that the parsers define what a conversation is to NM3 and the conversation tree is simply a visual representation of this conversation data. By clicking on a node in the tree, you see the trace summary information reflect only those frames associated with this conversation as well as every conversation built below it. &lt;/P&gt;
&lt;P&gt;This is a really nice way to step through each conversation and get an overview of what's happening. In fact, by opening the tree for an IPv4 level conversation with sub-conversations, you can tell how many connections a server has and get some idea of the types of things that are happening on this machine. This is a fast way to differentiate a busy machine from an idle one. A virus that scans ports would be evident because it would create a series of TCP conversations. &lt;/P&gt;
&lt;H2&gt;Cat Skinning: Method 2 &lt;/H2&gt;
&lt;P&gt;Often, you'll already have a frame in focus and now you'd like to see the rest of the conversation for this frame. Now as hinted to before there may be multiple streams which include this same frame. So you must first decide what context you want to relate the data in. &lt;/P&gt;
&lt;P&gt;In NM3, all possible streams are described by the Conv Id Column. This lists each conversation with the protocol and a number which defines the unique number assigned for that conversation. NM3 simply increments a counter for each new conversation, but you can't guarantee the numbers will be the same on two different machines if the parsers are different. Here's an example of that column: &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;{HTTP:81, TCP:80, ESP:78, IPv4:77} &lt;/P&gt;
&lt;P&gt;So using this information you can create a filter to view any of the conversations that this frame is listed a part of. For TCP, a filter of "Conversation.TCP.ID==80" will return all frames that have the same port pair and IP address pairs as this particular frame. What makes this really flexible is that you can show two streams at the same time by combining two separate conversation filters. You might find this helpful when looking at a trace where the server acts as an intermediary (like a proxy server or front end for a SQL DB or Exchange Server). So for instance the following filter will show both TCP conversations 80 and 81. &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;Conversation.TCP.ID==80 OR Conversation.TCP.ID==81 &lt;/P&gt;
&lt;P&gt;One missing feature is the ability to track back to the conversation tree from the currently selected frame. While making it a click away would be more ideal, you can make some NPL changes as mentioned in the Cable Talk Blog. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/netmon/archive/2006/11/15/conversations-in-network-monitor-3-0-cable-talk.aspx" mce_href="http://blogs.technet.com/netmon/archive/2006/11/15/conversations-in-network-monitor-3-0-cable-talk.aspx"&gt;http://blogs.technet.com/netmon/archive/2006/11/15/conversations-in-network-monitor-3-0-cable-talk.aspx&lt;/A&gt; &lt;/P&gt;
&lt;H2&gt;So where's the Data? &lt;/H2&gt;
&lt;P&gt;While looking at your specific TCP stream, you may want to see the payload data to give you even a better idea of what is going on. For protocols we don't have parsers for, you could use the information in my "Using Columns and Properties" blog: &lt;/P&gt;
&lt;P&gt;(&lt;A href="http://blogs.technet.com/netmon/archive/2007/03/01/using-columns-and-properties.aspx" mce_href="http://blogs.technet.com/netmon/archive/2007/03/01/using-columns-and-properties.aspx"&gt;http://blogs.technet.com/netmon/archive/2007/03/01/using-columns-and-properties.aspx&lt;/A&gt;) &lt;/P&gt;
&lt;P&gt;We mention in this article that you can add the TCPPayload column. This payload data described as Text may help to discover what is going on. For other streams, you could use the techniques in the previously mentioned blog to create your own property to display info you need to see. More than likely, however, for any public parsers the summary information should be of great help already. &lt;/P&gt;
&lt;H2&gt;When you're lost in the jungle… &lt;/H2&gt;
&lt;P&gt;They often tell you to follow a stream as this will lead you to civilization. Somehow the analogy seems to have similar results in that you can derive some order from the chaos by following a conversation stream. Once you become more accustomed to look at data in this light, you can tame the most unruly of network traces.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=728556" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/netmon/archive/tags/Filtering/default.aspx">Filtering</category><category domain="http://blogs.technet.com/netmon/archive/tags/tshoot/default.aspx">tshoot</category></item><item><title>Part 2: TCP Performance Expert and General Trouble Shooting</title><link>http://blogs.technet.com/netmon/archive/2007/01/26/part-2-tcp-performance-expert-and-general-trouble-shooting.aspx</link><pubDate>Fri, 26 Jan 2007 21:58:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:610973</guid><dc:creator>PaulELong</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/netmon/comments/610973.aspx</comments><wfw:commentRss>http://blogs.technet.com/netmon/commentrss.aspx?PostID=610973</wfw:commentRss><description>&lt;P&gt;Performance issues are one of the more difficult problems to trouble shoot. Without a baseline, it's often hard to determine if something is really slower. But TCP does contain some built-in behavioral patterns that can be used as a signal to tell you something may be wrong with your network. &lt;/P&gt;
&lt;P&gt;So the purpose of this article is to provide some indicators in TCP you can look at to investigate and a way to provide a simple graph of TCP traffic that can help you determine if there is a problem and if so what kind. &lt;/P&gt;
&lt;H1&gt;TCP Clues &lt;/H1&gt;
&lt;P&gt;TCP is the layer that is in charge of making sure your packet gets delivered. It tags each packet with a sequence number and when something is missing, the client informs the sender. Below I've listed some general things you can filter on in NM3 to give you clues to see if your network is working properly. &lt;/P&gt;
&lt;H2&gt;TCP Retransmits: &lt;/H2&gt;
&lt;P&gt;When dissecting a TCP trace, one of the more obvious problems you can spot are TCP retransmits. A retransmit occurs when a client detects a missing packet. From the sender's perspective, he now has sent the packet twice, so the second packet is called a retransmit. While a certain number of retransmits may occur without causing problem, excessive retransmits may be an indication that your network is sick. In NM3, you can search for retransmitted frames by using the following filter. &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;STRONG&gt;Property.TCPRetransmit &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;One you apply the filter, all frames that have been retransmitted will be displayed. Also each displayed frame will tell you the original frame that it is a retransmit of in the TCP Frame Summary. Some level of retransmits may be acceptable, but varies based on your network topology. Here's an example of how it displays in NM3: &lt;/P&gt;
&lt;DIV&gt;
&lt;TABLE class="" style="BORDER-COLLAPSE: collapse" border=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="WIDTH: 52px"&gt;
&lt;COL style="WIDTH: 78px"&gt;
&lt;COL style="WIDTH: 55px"&gt;
&lt;COL style="WIDTH: 83px"&gt;
&lt;COL style="WIDTH: 370px"&gt;&lt;/COLGROUP&gt;
&lt;TBODY vAlign=top&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;Frame&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;Time Offs&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;Source&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;Destination&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: black 0.5pt solid; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;Description&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;457&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;16.375976&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;Sndr&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;Rcvr&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;TCP: [Continuation to #402]Flags=....A..., SrcPort=1236, DstPort=Microsoft-DS(445), Len=1460, Seq=658111387 - 658112847, Ack=2995420839, Win=65484 (scale factor 0) = 65484&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;464&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;16.577148&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;Sndr&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;Rcvr&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: black 0.5pt solid; PADDING-RIGHT: 7px; BORDER-TOP: medium none; PADDING-LEFT: 7px; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"&gt;
&lt;P&gt;TCP: [ReTransmit #457][Continuation to #402]Flags=....A..., SrcPort=1236, DstPort=Microsoft-DS(445), Len=1460, Seq=658111387 - 658112847, Ack=2995420839, Win=65484 (scale factor 0) = 65484&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;H2&gt;TCP Fast Retransmits &lt;/H2&gt;
&lt;P&gt;In some cases you may see multiple ACKs one after another in quick succession. The receiver can send these ACKs to the sender to indicate it is missing a TCP sequence range. Normally, a timeout would occur for the acknowledgement of a particular sequence before a retransmit occurs. However, if the TCP sender supports fast retransmit then it will occur after receiving these multiple ACKs. A retransmission generated by fast retransmit also changes the back-off algorithm used. If a retransmit occurs due to a timeout, then the sender reverts back to "slow start." However, if a retransmit occurs because of a fast retransmit then the sender goes into "congestion avoidance." [See RFC 2581 for more information on Congestion Avoidance and Slow Start.] &lt;/P&gt;
&lt;P&gt;The response is called a "Fast Retransmit". This can be the behavior you see from one side when packets get lost in another segment of your network. In NM3 you can search for Fast Retransmits with this filter. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Property.TCPFastRetransmits &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;An example of a Fast retransmit looks like this: &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;STRONG&gt;TCP: [Request Fast-Retransmits #370]Flags=....A..., SrcPort=1268, DstPort=LDAP(389), Len=0, Seq=2021124596, Ack=1458852541, Win=64240 (scale factor 0) = 0 &lt;/STRONG&gt;&lt;/P&gt;
&lt;H2&gt;TCP SACK option &lt;/H2&gt;
&lt;P&gt;The SACK option (selective acknowledgments) is like an ACK, but the difference is that it can keep track of multiple sections of missing data. A normal ACK acknowledges the last consecutive sequence number that it received. In contrast a SACK can keep track of multiple missing segments. The SACK option contains multiple segments relating which pieces it has acknowledged and which are now lost. The number of segments is constrained to the amount of space available for TCP options. You can filter on these as well to see if your network is losing packets. &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;STRONG&gt;tcp.TCPOptions.Option.SACK &lt;/STRONG&gt;&lt;/P&gt;
&lt;H2&gt;TCP Resets &lt;/H2&gt;
&lt;P&gt;Resets aren't always a sign that something is wrong. You should try to look at the traffic around a reset to determine if it looks normal or not. Resets can occur when an application shuts down, or if a router is configure to block a port. But they also occur when a problem occurs in a TCP session. So these can sometimes be an indication that something is wrong. The filter to find resets is: &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;STRONG&gt;tcp.Flags.Reset &lt;/STRONG&gt;&lt;/P&gt;
&lt;H1&gt;Where's Waldo – Spotting a bad TCP Connection &lt;/H1&gt;
&lt;P&gt;Being able to take a trace and visualize it can be a useful way to look for performance issues. Most humans are better at looking at a picture and finding differences than analyzing data. Especially the large sequence numbers involved with TCP traffic. &lt;/P&gt;
&lt;H2&gt;Limitations with this Expert &lt;/H2&gt;
&lt;P&gt;Unfortunately, there are limitations to that amount of data this expert can deal with. The specific limitations will be due to the memory/CPU power of the machine you are work on. Excel, which this expert relies on, isn't build to plot 1000's of points. So you may want to limit that amount of data you try to analyze. For the following examples, a 500 MB file was transferred from the client to the server. &lt;/P&gt;
&lt;H1&gt;Using the TCP Expert &lt;/H1&gt;
&lt;P&gt;If you are familiar with the Part 1, (http://blogs.technet.com/netmon/archive/2006/11/30/part-1-poor-man-s-expert-using-excel-top-users.aspx), expert that locates the Top Users, then the procedure is much the same. Once you have the Excel Sheet Ready and the NM3 columns aligned, it's just a matter of copying the data in to the clipboard and hitting a button which launches a macro in Excel and creates the graphs we will examine later on. &lt;/P&gt;
&lt;H2&gt;Setting Up Your Excel Spreadsheet &lt;/H2&gt;
&lt;P&gt;Basically you just create a new spreadsheet, create a new macro (TCPPerf) and edit it, then paste the code at the bottom of this article. Once you complete this step, you can then take one of the sheets, (I delete all but one of them), and give it a default name like TCPPerf. And finally, create a button on this sheet and attach the TCPPerf macro to it. &lt;/P&gt;
&lt;P style="TEXT-ALIGN: center" mce_keep="true"&gt;&lt;IMG style="WIDTH: 242px; HEIGHT: 157px" height=157 src="http://blogs.technet.com/photos/paulelong/images/610397/original.aspx" width=242 mce_src="http://blogs.technet.com/photos/paulelong/images/610397/original.aspx"&gt;&lt;/P&gt;
&lt;H2&gt;Grabbing the data to Analyze from Network Monitor &lt;/H2&gt;
&lt;P&gt;This section describes how to prepare NM3 so we get the necessary columns for our calculations to appear. In NM3 we can add columns for any property that is exposed by the parsers. Actually you can also add any properties you want as well, so basically any piece of data is fair game. In the case of TCP, we want to add in the Seq/Ack Numbers as well as the Window Size and Payload length. So specifically add in columns for TCP Seq Number, TCP Ack Number, Windows Size, and TCPPayload Length in that order. Place them right after Time Offset. The resulting layout should look as follows. &lt;/P&gt;
&lt;P style="TEXT-ALIGN: center" mce_keep="true"&gt;&lt;IMG style="WIDTH: 182px; HEIGHT: 234px" height=234 src="http://blogs.technet.com/photos/paulelong/images/610395/original.aspx" width=182 mce_src="http://blogs.technet.com/photos/paulelong/images/610395/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;After opening an existing trace or taking a new one, the next step is to filter down the specific data you want to analyze. In my case, I copied a file from my machine to a server. Since Window Size is negotiated in the TCP 3-way handshake, I made sure to disconnect to my client from the server so that may trace contains the entire conversation. I did this from the server in Computer Management under Shared Folders, Sessions. You can simply right click the session in question and select Close Session. Obviously you don't want to do this if you have something important occurring between this session and the server. &lt;/P&gt;
&lt;P&gt;In NM3 it's easy to filter the conversations down, by using the Conversation Tree on the left. [Note: This requires that conversations are enabled when the trace is opened or a capture is started. You can set this option from the Start Page.] &lt;/P&gt;
&lt;P style="TEXT-ALIGN: center" mce_keep="true"&gt;&lt;IMG style="WIDTH: 285px; HEIGHT: 124px" height=124 src="http://blogs.technet.com/photos/paulelong/images/610394/original.aspx" width=285 mce_src="http://blogs.technet.com/photos/paulelong/images/610394/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Once you find the IP address pair, you can select each TCP conversation below, and look for the traffic relating to your copy. This traffic will appear as a bunch of SMB Reads (or SMB Writes if you copy to the server), intermixed with a bunch of TCP Continuation traffic. &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;STRONG&gt;SMB: R; Write Andx, FID = 0x4004 (\t1_up.tst@#24), 61440 bytes &lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;STRONG&gt;SMB: C; Write Andx, FID = 0x4004 (\t1_up.tst@#24), 61440 bytes at Offset 184320 &lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;STRONG&gt;TCP: [Continuation to #256]Flags=....A..., SrcPort=1236, DstPort=Microsoft-DS(445), Len=1460, Seq=657940191 - 657941651, Ack=2995420737, Win=64118 (scale factor 0) = 64118 &lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;STRONG&gt;TCP: [Continuation to #256]Flags=....A..., SrcPort=1236, DstPort=Microsoft-DS(445), Len=1460, Seq=657941651 - 657943111, Ack=2995420737, Win=64118 (scale factor 0) = 64118 &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Once you have located and selected the appropriate TCP Conversation, highlight all the frames involved and copy them to the clipboard. I often use keystrokes, so I did this by selecting the first frame, hit Shift+Ctrl+End, and then right mouse click and copied them to the clipboard. &lt;/P&gt;
&lt;P&gt;Now you simply open the Excel Spread sheet you created earlier and click the button. This will results in 4 sheets. The first sheet, PerfData, is just a copy of the data from NM3, plus some new columns that are based off this data. The second sheet, TCPPerf_PerfData, is data copied from the first sheet so that we can sort based off the data we calculated. The final two sheets contain the charts for each side of the transfer. The chart is named based on the machine adress that is sending the data. &lt;/P&gt;
&lt;H1&gt;Interpreting the Data &lt;/H1&gt;
&lt;P&gt;Since the resulting data we'll examine is a graph, it's useful to examine different graphs that are a result of different issues so we can refer to these examples as an indicator to the type of problem we may have. In my tests, I have duplicated the following situations: Increased Round Trip Time, Packet Loss, Small Window Size, and Bandwidth Reduction. All traces are taken from the sender (client) which is sending data to the server. &lt;/P&gt;
&lt;P&gt;The data is graphed so that the left side axis contains the sequence numbers scaled for Length and UnACKed data. The right side axis is the scaled for the Window Size. Two different scales are used because often the Window size is much larger than the data being sent. UnACKed data is data which have been sent by the sender but has not been acknowledged by the receiver after the TCP timeout expires. &lt;/P&gt;
&lt;H1&gt;The Graphs &lt;/H1&gt;
&lt;P&gt;Each test was a copy of around a 500 Meg file from my machine to a server. I used the CMD prompt to do the copy to avoid unwanted Explorer traffic. So we'll start by looking at a base line capture. In this case the Round-Trip-Delay is less than a millisecond, and there are no packets lost. The bandwidth is around 100 MB. &lt;/P&gt;
&lt;H2&gt;Baseline - &amp;lt; 1 Millisecond RTT, 100 MB, No Packet Loss &lt;/H2&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 627px; HEIGHT: 423px" height=423 src="http://blogs.technet.com/photos/paulelong/images/610393/original.aspx" width=627 mce_src="http://blogs.technet.com/photos/paulelong/images/610393/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;In many of the examples I change the horizontal axis min/max so that the data isn't so compressed. You may find it useful to adjust both the max/min scales on the X-axis depending on how much extra trace traffic you took in your original trace. &lt;/P&gt;
&lt;P&gt;The pink line represents the length of the data we are sending. For the most part it's a full packet size of 1480. The only reason it dips any lower than that is because SMB sends 61440 bytes of info (0xF000), so the dip at the end is the remainder. &lt;/P&gt;
&lt;P&gt;Let's look at the UnACKed data (yellow line). The client continues to send data as fast as it can until it reaches the advertised window size (blue line). Note that since the scales for Window Size and Packet size can be vastly different, window size is put on the right vertical Axis. In this case, however, they happen to line up. This is helpful, because it shows that we keep sending data until the UnACKed data reaches the max advertised window size. Once we get to this point, we have to wait for an ACK from the server before we send more data. So we get in a state where we have to wait for an ACK before sending more data. Then once this particular SMB command completes, another delay occurs while waiting for the SMB response which for the next WRITE command. &lt;/P&gt;
&lt;P&gt;Since our RTT is very low, we tend to see little effect of this delay. But note that if we had a larger window size we would have been able to even send more data before waiting for an ACK and thus improve the transfer time. &lt;/P&gt;
&lt;H2&gt;100 Millisecond RTT, 100 MB &lt;/H2&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 623px; HEIGHT: 421px" height=421 src="http://blogs.technet.com/photos/paulelong/images/610389/original.aspx" width=623 mce_src="http://blogs.technet.com/photos/paulelong/images/610389/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;In this sample, I purposely set the Round Trip Time to 100 Milliseconds. The basic effect is that anything that requires a response before it can continue, will incur a 100 millisecond delay. So this will certainly affect the time required to transfer the 500 MB file. As you can see here, a total of about 4 seconds is needed now. Another side affect is that since it's slower, the server is able to keep up with the request so the amount of UnACKed data is generally lower. &lt;/P&gt;
&lt;H2&gt;100 Millisecond RTT DownStream, 100 MB, 5376 Window Size &lt;/H2&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 627px; HEIGHT: 424px" height=424 src="http://blogs.technet.com/photos/paulelong/images/610388/original.aspx" width=627 mce_src="http://blogs.technet.com/photos/paulelong/images/610388/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;In this example we've cut the Windows size down to 5376 bytes. I've zoomed into a small segment of the entire transfer to show the details. The main thing to note is that we cannot fill the pipe up more than two segments. This means the number of segments we have to wait for an ACK for goes up, thus the total time to transfer also goes up. You can see here, for instance that there are many times we have to wait the return ACK before we can send a new packet (about 20 as compared to 5 in the baseline capture). &lt;/P&gt;
&lt;H2&gt;Down Stream 100 Millisecond RTT, %5 Packet Loss &lt;/H2&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://blogs.technet.com/photos/paulelong/images/610390/original.aspx" mce_src="http://blogs.technet.com/photos/paulelong/images/610390/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Now we'll add in some packet loss. In this case the loss is on the Down Stream side, which means that responses from the server never make it to the client. Remember that the client is where the capture is being taken, so the resulting trace won't show any retransmits. Since the server's ACKs are being dropped, the client is affected because he cannot move his sliding window due to the fact that he thinks there is more unACKed data than there truly is. Thus the client has a difficult time sending data at a rate that fills the server's receive window. This is shown in the graph by the slow approach of the UnACKed data to the servers advertised window size. &lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;Down Stream 100 Millisecond RTT, Up Stream %5 Packet Loss &lt;/H2&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 623px; HEIGHT: 421px" height=421 src="http://blogs.technet.com/photos/paulelong/images/610392/original.aspx" width=623 mce_src="http://blogs.technet.com/photos/paulelong/images/610392/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;The difference between this graph and the one above it is that in this case the packet loss is on the Up Stream side. So now the client does have to send retransmits, because now the server is complaining that data is missing to the client, instead of the other way around. So now the graph shows up inverted because data to the client can never fill up the window. Instead the client has to resend old data that has been lost. So this resets the UnACKed data to something lower than it was before. &lt;/P&gt;
&lt;H2&gt;56K Bandwidth Up and Down Stream &lt;/H2&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 624px; HEIGHT: 420px" height=420 src="http://blogs.technet.com/photos/paulelong/images/610387/original.aspx" width=624 mce_src="http://blogs.technet.com/photos/paulelong/images/610387/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;The final example is to show the difference when bandwidth is reduced. This is similar to the baseline test, but the main difference is the time line below is much longer. For each SMB Write it takes around 10 seconds. Another difference is that since there is a RTT delay inherent in this connection, you don't see much overlap once we hit the window size. Basically every request has enough of a delay so the we see a acknowledgement before sending the next TCP segment. So we tend to stay right at the Window edge rather than fluctuating, like we do in the baseline test. &lt;/P&gt;
&lt;H1&gt;TCPPerf Macro Code &lt;/H1&gt;
&lt;P&gt;You should be able to copy this into Excel's Macro Editor. The one problem I can foresee is that if formatting in your browser causes the text to wrap, Excel will complain. So keep this in mind. &lt;/P&gt;
&lt;P&gt;A general overview of this code is that it copies the text from the clipboard and creates some columns to calculate UnACKed data and Advertised Window. We must also recalculate the Seq/Ack columns as there are not represented as numbers (they are numbers with hex in parens). Then we copy all the formulated data to another sheet so we can sort the resulting data. And finally we create a chart for the both sides of the conversation. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;Sub TCPPerf()&lt;BR&gt;&amp;nbsp; ' TCPPerf Macro&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Application.ScreenUpdating = False&lt;BR&gt;&amp;nbsp; Application.Calculation = xlManual&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' You can name your sheet different for multiple traces. The resulting&lt;BR&gt;&amp;nbsp; ' sheet is created based on this name.&lt;BR&gt;&amp;nbsp; CurSheet = ActiveSheet.Name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&amp;nbsp; ' Populate the column headers&lt;BR&gt;&amp;nbsp; [A1].Value = "Frame"&lt;BR&gt;&amp;nbsp; [B1].Value = "Time"&lt;BR&gt;&amp;nbsp; [C1].Value = "TCPSeqData"&lt;BR&gt;&amp;nbsp; [D1].Value = "TCPAckData"&lt;BR&gt;&amp;nbsp; [E1].Value = "Window"&lt;BR&gt;&amp;nbsp; [F1].Value = "Len"&lt;BR&gt;&amp;nbsp; [G1].Value = "ConvID"&lt;BR&gt;&amp;nbsp; [H1].Value = "Source"&lt;BR&gt;&amp;nbsp; [I1].Value = "Dest"&lt;BR&gt;&amp;nbsp; [J1].Value = "Prot"&lt;BR&gt;&amp;nbsp; [K1].Value = "Desc"&lt;BR&gt;&amp;nbsp; [L1].Value = "Seq"&lt;BR&gt;&amp;nbsp; [M1].Value = "Ack"&lt;BR&gt;&amp;nbsp; [N1].Value = "Unack"&lt;BR&gt;&amp;nbsp; [O1].Value = "SrcData"&lt;BR&gt;&amp;nbsp; [P1].Value = "DstData"&lt;BR&gt;&amp;nbsp;&amp;nbsp;[Q1].Value = "SrcWindow"&lt;BR&gt;&amp;nbsp; [R1].Value = "DstWindow"&lt;BR&gt;&amp;nbsp;&amp;nbsp;[S1].Value = "AdvertisedWindow"&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Paste In Data from clipboard&lt;BR&gt;&amp;nbsp; Range("A2").Select&lt;BR&gt;&amp;nbsp; ActiveSheet.Paste&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Find Last Row in Data and save in LastRow&lt;BR&gt;&amp;nbsp; Range("A2").Select&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Selection.End(xlDown).Select&lt;BR&gt;&amp;nbsp; Dim LastRow As Integer&lt;BR&gt;&amp;nbsp; LastRow = ActiveCell.Row&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Next take the text version of Seq/Ack from NM and convert to a number&lt;BR&gt;&amp;nbsp; Call SeqAckForm(LastRow)&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Create a column for UnAck'd data populate with calculation&lt;BR&gt;&amp;nbsp; Call UnAckData(LastRow)&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;' Create a column that gets the Src/Dest Seq and Advertised Window data&lt;BR&gt;&amp;nbsp;&amp;nbsp;' depending on the sender.&lt;BR&gt;&amp;nbsp; Call SrcDestData(LastRow)&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Since we diabled calculations, cause one to occur now before we&lt;BR&gt;&amp;nbsp; ' copy data around.&lt;BR&gt;&amp;nbsp; Calculate&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Define the name of the sheet we'll use to build our chart from&lt;BR&gt;&amp;nbsp; DataSheetName = "TCPPerf_" + CurSheet&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Transfer the data and calculated data to a new chart so we can sort.&lt;BR&gt;&amp;nbsp; Call TransferData(LastRow, CurSheet, DataSheetName)&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Build two charts, one for each client/server&lt;BR&gt;&amp;nbsp; Call BuildCharts(LastRow, DataSheetName)&lt;BR&gt;&amp;nbsp; Application.Calculation = xlAutomatic&lt;BR&gt;&amp;nbsp; Application.ScreenUpdating = True&lt;BR&gt;&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;Sub SeqAckForm(LastRow)&lt;BR&gt;'&lt;BR&gt;' SeqAckForm Macro&lt;BR&gt;'&lt;BR&gt;&amp;nbsp; ' Just cut off the number at the first space and convert to a Number.&lt;BR&gt;&amp;nbsp; [L2].Value = "=VALUE(MID(RC[-9], 1, FIND("" "", RC[-9])))"&lt;BR&gt;&amp;nbsp; Range("L2").Select&lt;BR&gt;&amp;nbsp; Selection.AutoFill Destination:=Range("L2:L" &amp;amp; LastRow), _&lt;BR&gt;&amp;nbsp; Type:=xlFillDefault&lt;BR&gt;&lt;BR&gt;&amp;nbsp; [M2].Value = "=VALUE(MID(RC[-9], 1, FIND("" "", RC[-9])))"&lt;BR&gt;&amp;nbsp; Range("M2").Select&lt;BR&gt;&amp;nbsp; Selection.AutoFill Destination:=Range("M2:M" &amp;amp; LastRow), _&lt;BR&gt;&amp;nbsp; Type:=xlFillDefault&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;Sub SrcDestData(LastRow)&lt;BR&gt;&amp;nbsp; ' If the Source matches the first source, then take this seq, otherwise&lt;BR&gt;&amp;nbsp; ' take the last value found.&lt;BR&gt;&amp;nbsp; [O2].Value = "=IF(H2=H$2, O1, M2)"&lt;BR&gt;&amp;nbsp; Range("O2").Select&lt;BR&gt;&amp;nbsp; Selection.AutoFill Destination:=Range("O2:O" &amp;amp; LastRow), _&lt;BR&gt;&amp;nbsp; &amp;nbsp; Type:=xlFillDefault&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' If the Source matches the first dest, then take this seq, otherwise&lt;BR&gt;&amp;nbsp; ' take the last value we found.&lt;BR&gt;&amp;nbsp; [P2].Value = "=IF(H2=I$2, IF(P1&amp;lt;&amp;gt;0, P1, L2), M2)"&lt;BR&gt;&amp;nbsp; Range("P2").Select&lt;BR&gt;&amp;nbsp; Selection.AutoFill Destination:=Range("P2:P" &amp;amp; LastRow), _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type:=xlFillDefault&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' If the Source matches the first source, then take window to be the&lt;BR&gt;&amp;nbsp; ' src window, otherwise take the last value we found.&lt;BR&gt;&amp;nbsp; [Q2].Value = "=IF(H2=H$2, Q1, E2)"&lt;BR&gt;&amp;nbsp; Range("Q2").Select&lt;BR&gt;&amp;nbsp; Selection.AutoFill Destination:=Range("Q2:Q" &amp;amp; LastRow), _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type:=xlFillDefault&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' If the Source matches the first dest, then take window to be the&lt;BR&gt;&amp;nbsp; ' src window, otherwise take the last value we found.&lt;BR&gt;&amp;nbsp; [R2].Value = "=IF(H2=I$2, R1, E2)"&lt;BR&gt;&amp;nbsp; Range("R2").Select&lt;BR&gt;&amp;nbsp; Selection.AutoFill Destination:=Range("R2:R" &amp;amp; LastRow), _&lt;BR&gt;&amp;nbsp; Type:=xlFillDefault&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Now get the advertised window size from the other side based on which&lt;BR&gt;&amp;nbsp; ' is the source address&lt;BR&gt;&amp;nbsp; [S2].Value = "=IF(H2=H$2, Q2, R2)"&lt;BR&gt;&amp;nbsp; Range("S2").Select&lt;BR&gt;&amp;nbsp; Selection.AutoFill Destination:=Range("S2:S" &amp;amp; LastRow), _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type:=xlFillDefault&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;Sub UnAckData(LastRow)&lt;BR&gt;&amp;nbsp; ' Calculate the Unack'd data by looking at the seq/ack columns we created&lt;BR&gt;&amp;nbsp; ' before and the len field.&lt;BR&gt;&amp;nbsp; [N2].Value = _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "=IF(IF(H2=H$2,L2+F2-O2,L2+F2-P2)&amp;lt;0,-1,IF(H2=H$2,L2+F2-O2,L2+F2-P2))"&lt;BR&gt;&amp;nbsp; Range("N2").Select&lt;BR&gt;&amp;nbsp; Selection.AutoFill Destination:=Range("N2:N" &amp;amp; LastRow), _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type:=xlFillDefault&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;Sub TransferData(LastRow, OriginalSheetName, DataSheetName)&lt;BR&gt;' TransferData Macro&lt;BR&gt;'&lt;BR&gt;&amp;nbsp; ' Add a new sheet for new data and charts.&lt;BR&gt;&amp;nbsp; Sheets.Add&lt;BR&gt;&amp;nbsp; ActiveSheet.Name = DataSheetName&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Copy all of the various columns we need from the original sheet.&lt;BR&gt;&amp;nbsp; ' This is done so that when we resort the data, we reference the&lt;BR&gt;&amp;nbsp; ' formula results.&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Sheets(OriginalSheetName).Select&lt;BR&gt;&amp;nbsp; Range("B1:B" &amp;amp; LastRow).Copy&lt;BR&gt;&amp;nbsp; Sheets(DataSheetName).Select&lt;BR&gt;&amp;nbsp; Range("A1").Select&lt;BR&gt;&amp;nbsp; ActiveSheet.Paste&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Sheets(OriginalSheetName).Select&lt;BR&gt;&amp;nbsp; Range("F1:F" &amp;amp; LastRow).Copy&lt;BR&gt;&amp;nbsp; Sheets(DataSheetName).Select&lt;BR&gt;&amp;nbsp; Range("C1").Select&lt;BR&gt;&amp;nbsp; ActiveSheet.Paste&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Sheets(OriginalSheetName).Select&lt;BR&gt;&amp;nbsp;&amp;nbsp;Range("N1:N" &amp;amp; LastRow).Copy&lt;BR&gt;&amp;nbsp; Sheets(DataSheetName).Select&lt;BR&gt;&amp;nbsp; Range("D1").Select&lt;BR&gt;&amp;nbsp; Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SkipBlanks:=False, Transpose:=False&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Sheets(OriginalSheetName).Select&lt;BR&gt;&amp;nbsp; Range("H1:H" &amp;amp; LastRow).Copy&lt;BR&gt;&amp;nbsp; Sheets(DataSheetName).Select&lt;BR&gt;&amp;nbsp; Range("E1").Select&lt;BR&gt;&amp;nbsp; ActiveSheet.Paste&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Sheets(OriginalSheetName).Select&lt;BR&gt;&amp;nbsp; Range("L1:M" &amp;amp; LastRow).Copy&lt;BR&gt;&amp;nbsp; Sheets(DataSheetName).Select&lt;BR&gt;&amp;nbsp; Range("F1").Select&lt;BR&gt;&amp;nbsp; Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SkipBlanks:=False, Transpose:=False&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Sheets(OriginalSheetName).Select&lt;BR&gt;&amp;nbsp; Range("A1:A" &amp;amp; LastRow).Copy&lt;BR&gt;&amp;nbsp; Sheets(DataSheetName).Select&lt;BR&gt;&amp;nbsp; Range("H1").Select&lt;BR&gt;&amp;nbsp; ActiveSheet.Paste&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Sheets(OriginalSheetName).Select&lt;BR&gt;&amp;nbsp; Range("S1:S" &amp;amp; LastRow).Copy&lt;BR&gt;&amp;nbsp; Sheets(DataSheetName).Select&lt;BR&gt;&amp;nbsp; Range("B1").Select&lt;BR&gt;&amp;nbsp; Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SkipBlanks:=False, Transpose:=False&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Now sort this data by Source so we can split and create 2 charts.&lt;BR&gt;&amp;nbsp; Range("A1:I" &amp;amp; LastRow).Select&lt;BR&gt;&amp;nbsp; Selection.Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlGuess, _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _&lt;BR&gt;&amp;nbsp; DataOption1:=xlSortNormal&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;Sub BuildCharts(LastRow, MainSheetName)&lt;BR&gt;&amp;nbsp; ' Find where the source changes to destination.&lt;BR&gt;&amp;nbsp; Range("A1:G1").Copy&lt;BR&gt;&lt;BR&gt;&amp;nbsp; For Each Cell In Range("E2:E" &amp;amp; LastRow)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Cell.Value &amp;lt;&amp;gt; [E2] Then&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exit For&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cell.Select&lt;BR&gt;&amp;nbsp; Next&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Paste in the original column headers&lt;BR&gt;&amp;nbsp; CurCellRow = Selection.Row + 1&lt;BR&gt;&amp;nbsp; Range(CurCellRow &amp;amp; ":" &amp;amp; CurCellRow).Insert Shift:=xlDown&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Create two names for each chart based on the the senders name.&lt;BR&gt;&amp;nbsp; ChartName1 = Range("E" &amp;amp; (CurCellRow - 1)).Value&lt;BR&gt;&amp;nbsp; ChartName2 = Range("E" &amp;amp; (CurCellRow + 2)).Value&lt;BR&gt;&amp;nbsp; Range("A1:D" &amp;amp; CurCellRow).Select&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Now create a chart for each address.&lt;BR&gt;&amp;nbsp; Call Chart(1, CurCellRow - 1, ChartName1, MainSheetName)&lt;BR&gt;&amp;nbsp; Call Chart(CurCellRow, LastRow + 1, ChartName2, MainSheetName)&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;Sub Chart(FirstRow, LastRow, Name, MainSheetName)&lt;BR&gt;&amp;nbsp; ' Set the range of the data we will use for our chart.&lt;BR&gt;&amp;nbsp; MinScale = Range(MainSheetName &amp;amp; "!A" &amp;amp; FirstRow + 1).Value&lt;BR&gt;&amp;nbsp; Sheets.Add&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Create a Name for this chart and set teh active sheet to that name.&lt;BR&gt;&amp;nbsp; TopUsersChart1Sheet = "Chart_" + Name + CurSheet&lt;BR&gt;&amp;nbsp; ActiveSheet.Name = TopUsersChart1Sheet&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Add in a new chart.&lt;BR&gt;&amp;nbsp; Charts.Add&lt;BR&gt;&amp;nbsp; ActiveChart.Location Where:=xlLocationAsObject, Name:=TopUsersChart1Sheet&lt;BR&gt;&amp;nbsp; ActiveChart.ChartType = xlXYScatterLines&lt;BR&gt;&amp;nbsp; ActiveChart.SetSourceData Source:= _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Range(MainSheetName &amp;amp; "!$A" &amp;amp; FirstRow &amp;amp; ":$D" &amp;amp; LastRow)&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Create a secondary access&lt;BR&gt;&amp;nbsp; ActiveChart.SeriesCollection(1).AxisGroup = 2&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Set the min/max scale based on the time in the first/last row.&lt;BR&gt;&amp;nbsp; ActiveChart.Axes(xlCategory).MinimumScale = _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Range(MainSheetName &amp;amp; "!A" &amp;amp; FirstRow + 1).Value&lt;BR&gt;&amp;nbsp; ActiveChart.Axes(xlCategory).MaximumScale = _&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Range(MainSheetName &amp;amp; "!A" &amp;amp; LastRow).Value&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Make the min Y scale -1&lt;BR&gt;&amp;nbsp; ActiveChart.Axes(xlValue).MinimumScale = -1&lt;BR&gt;&lt;BR&gt;&amp;nbsp; ' Make the long time lables slant a bit.&lt;BR&gt;&amp;nbsp; ActiveChart.Axes(xlCategory).TickLabels.Orientation = -25&lt;BR&gt;End Sub&lt;BR&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;BR&gt;
&lt;H1&gt;And Much More… &lt;/H1&gt;
&lt;P&gt;The general idea here is that you can take the TCP data and look at it in a graphic form to help you to see at a high level if there's a problem. There are so many other things that one could add. Resets could be added in to visually indicate those in the graph. You could also create other graphs to represent the seq/ack responses that would give you another view of the data. But hopefully this will give you a simple tool and some specific filters to spot check performance issues on your network. &lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=610973" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/netmon/archive/tags/Filtering/default.aspx">Filtering</category><category domain="http://blogs.technet.com/netmon/archive/tags/Experts/default.aspx">Experts</category><category domain="http://blogs.technet.com/netmon/archive/tags/tshoot/default.aspx">tshoot</category></item><item><title>Conversations in Network Monitor 3.0 – Cable Talk</title><link>http://blogs.technet.com/netmon/archive/2006/11/15/conversations-in-network-monitor-3-0-cable-talk.aspx</link><pubDate>Wed, 15 Nov 2006 20:48:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:517188</guid><dc:creator>PaulELong</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/netmon/comments/517188.aspx</comments><wfw:commentRss>http://blogs.technet.com/netmon/commentrss.aspx?PostID=517188</wfw:commentRss><description>&lt;P&gt;Conversations for network protocols have been around for ages. But protocol analyzers have not been built to take advantage of them in the way NM3 does. Using the conversation tree and filters that reference conversations, make NM3 a powerful ally when trying to narrow down traffic. &lt;/P&gt;
&lt;P&gt;It's important to note that conversations are disabled by default in NM3. This is because conversations tend to eat up memory and we wanted to be able to capture for long periods of time. You can turn on conversations from the start page or in options. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What is a Conversation with regards to networking? &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In layman terms, a conversation is simply a communication stream, normally between two machines. When you call and talk to your friend on the phone, the stuff you talk about is your conversation. With networking protocols, it is much the same thing, but as with everything else in computers there are more levels of complexity. &lt;/P&gt;
&lt;P&gt;When two machines talk to each other with a specific protocol, there is often a set of parameters that each frame has in common. Normally there is a value or values that are associated with that connection. When you look at that protocol in any frame, you should be able to determine what other frames are related by looking for the same values. &lt;/P&gt;
&lt;P&gt;The most familiar type of conversation is the one TCP sets up when it creates its communication stream. When you computer talks to another using TCP, the first thing it does is negotiate which ports to use. This source/destination port pair defines what the conversation is for these two machines. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Conversations are Hierarchical! &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Now one catch is that the source/dest port pair for TCP is specific to the pair of machines that are talking. So you may find other frames with the same source/dest port pairs, but these are not part of the same TCP Conversation. So it's important to understand that conversations can be hierarchical. The TCP source/dest pair is also dependant on the IP source/dest addresses. &lt;/P&gt;
&lt;P&gt;So for a pair of machines, defined by their source/dest IP address, there may be many TCP conversations. And then on top of TCP, there may be multiple NBT, SMB, HTTP or other types of conversations. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Conversations not limited to connection oriented protocols &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Certain protocols like UDP or ARP are called connectionless. They don't guarantee delivery of a packet and have no sense of sequence numbers. But this doesn't mean that they can't be associated in a conversation. For UDP we can use the port numbers to group those frames together. For ARP we associated the sender/target address and combine those frames into a single conversation. The only thing we need for a conversation is some basic set of parameters that we can match to say one frame is related to another. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Mommy, where do conversations come from? &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When a parser is written, you have the option to define conversations for that parser. In fact you could define multiple conversations for the same parser. I won't go into all the details, but basically you tell the engine what parameters to use to correlate like packets. You can build the conversation based on the parent, or base them solely on parameters in the current frame. When you build them on the parent, you get the hierarchical nature I'm talking about above. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;How can I use conversations to troubleshoot problems? &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In Network Monitor 3.0, when you click on a node in the conversation tree, it automatically filters and shows you only traffic pertaining to that conversation. So for instance, if you click on an IPv4 node that is equivalent to Conversation ID 5, a filter of "Conversation.IPv4.Id == 5" is enabled. This doesn't change the display filter physically, but implicitly applies this filter so you only see that traffic displayed. &lt;/P&gt;
&lt;P&gt;You are of course free to filter further by applying a display filter. If you right click the node in the tree and select "Copy Conversation Filter to Clipboard", you can see what filter is being applied. This will require you paste the clipboard text somewhere so you can see it. This is an easy way to add this permanently to your display filter. &lt;/P&gt;
&lt;P&gt;This is basically part of the same kind of functionality Wireshark users know as "follow the stream". The difference though is that you can follow TCP, IPv4 and many other types of streams. &lt;/P&gt;
&lt;P&gt;Since the conversation tree is hierarchical you can quickly see the traffic flowing between two IPv4 nodes. So if you know the machine you are interested in, you can see all traffic by clicking on the node. Further more you can drill down into each TCP conversation below it. &lt;/P&gt;
&lt;P style="TEXT-ALIGN: center" mce_keep="true"&gt;&lt;IMG style="WIDTH: 386px; HEIGHT: 205px" height=205 src="http://blogs.technet.com/photos/paulelong/images/517197/original.aspx" width=386 mce_src="http://blogs.technet.com/photos/paulelong/images/517197/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;By the way, you'll notice the ConvID in my display that you may not have in yours. I'll explain more on this later. &lt;/P&gt;
&lt;P&gt;So you can continue to drill down until you find the traffic you'd like to example more closely. Different protocols have different levels of information. For example you can see SMB broken down by file name followed by the SMB File ID. &lt;/P&gt;
&lt;P style="TEXT-ALIGN: center" mce_keep="true"&gt;&lt;IMG style="WIDTH: 441px; HEIGHT: 176px" height=176 src="http://blogs.technet.com/photos/paulelong/images/517200/original.aspx" width=441 mce_src="http://blogs.technet.com/photos/paulelong/images/517200/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;In this example, you can see that HTTP traffic will list the initial HTTP command and URL. This makes it easy to find web traffic in question. &lt;/P&gt;
&lt;P style="TEXT-ALIGN: center" mce_keep="true"&gt;&lt;IMG style="WIDTH: 398px; HEIGHT: 270px" height=270 src="http://blogs.technet.com/photos/paulelong/images/517201/original.aspx" width=398 mce_src="http://blogs.technet.com/photos/paulelong/images/517201/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Certain parser features depend on conversations &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Conversations have a purpose other than grouping frames. Today they are also used to hold state information that may be useful to other frames in the conversation. For instance, TCP keeps track of sequence numbers so it can detect retransmits and lost segments. This is done in the conversation so that you don't get collisions with duplicate sequence numbers on different ports. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Info on the ConvID = lines in My Display &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Until we get some easy way to associate displayed frames with the conversation tree, I added some NPL code to display this info. This is fairly simple to add if you want the same functionality. Here's an example of how I did it for IPv4.NPL. The same thing applies to any conversation. &lt;/P&gt;
&lt;P&gt;In NPL we create the description by calling ConversationDescription. So below you can see I simple add in the property ConvID when the conversation description for IPv4 is created. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Post.Conversation.ConversationDescription = FormatString("(%s - %s) ConvID = %d", Source, Destination,ConvID) &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Future of Conversations &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Conversations are new and over time will evolve and change. There are already requests to associate the current frame with the node in the tree. Others have suggested we provide a way to filter the tree to only show relevant information. We are also hoping to someday to show specific processes and break out the traffic specific to each process.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=517188" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/netmon/archive/tags/Filtering/default.aspx">Filtering</category><category domain="http://blogs.technet.com/netmon/archive/tags/tshoot/default.aspx">tshoot</category></item><item><title>Into to Filtering with Network Monitor 3.0</title><link>http://blogs.technet.com/netmon/archive/2006/10/17/into-to-filtering-with-network-monitor-3-0.aspx</link><pubDate>Tue, 17 Oct 2006 19:22:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:471033</guid><dc:creator>PaulELong</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.technet.com/netmon/comments/471033.aspx</comments><wfw:commentRss>http://blogs.technet.com/netmon/commentrss.aspx?PostID=471033</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Challenges of Filtering &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;One of the biggest changes between NM2.x and NM3.0 is the way you do filtering. Old NM2.x hacks may be challenged by the loss of the UI wizard to build filters. On the other hand, Ethereal users may be pleased and further encouraged by the built in intellisense, but more on this later. Hopefully I'll be able to ease the transition and provide some tips and tricks for filtering with NM3.0. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;What exactly does filtering do? &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;When you type in a filter and hit apply, each frame is evaluated against the filter. If the result of the filter is TRUE, then the frame is displayed (or captured in the case of a capture filter). So to start simple, if you want to see every frame where the TCP source port is 80, you could type: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Tcp.SrcPort == 80 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;In this example, the parser engine looks at each frame and evaluates this expression. If the current frames port is set to 80, then it includes that frame in your view. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Where do I start? &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Intellisense is technology in many MS products that shows you a list of possibilities given some starting place. In the context of filtering, it allows you to see the available data items for a given protocol or structure. So if you type "TCP." in any of the filter windows you will see a list of available data fields. If you further type in "TCP.Flags." you then see a list of the names for each of the TCP flags. Now unfortunately in the Beta2 version of NM3.0 we only show you two levels deep. So when you type "TCP.Flags." you won't actually see anything more. But in the released version of NM3.0, we should have this implemented fully. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;So one little known trick is that you can start off with a "." (period) and you will see intellisense for all the top level items. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;IMG style="WIDTH: 156px; HEIGHT: 257px" height=257 src="http://blogs.technet.com/photos/paulelong/images/471163/original.aspx" width=156 mce_src="http://blogs.technet.com/photos/paulelong/images/471163/original.aspx"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: center"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;In this list you can see stuff like Protocol, which will show you a list of all protocols underneath. So when you are not sure where to start, this is as good a place as any. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Built-in Filters (Standard Filters) &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;We've actually included a bunch of built in filters with the product. These are common filters that do mostly general things, like target a specific protocol, or narrow traffic down to a specific machine. Once you choose a filter the filter text box is populated with the filter, and you can then apply it. You may have to change some part of the filter, as often they reference placeholder for IP Addresses or Ports. These filters provide a bunch of examples that may help you understand how filters work. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;IMG style="WIDTH: 429px; HEIGHT: 104px" height=104 src="http://blogs.technet.com/photos/paulelong/images/471164/original.aspx" width=429 mce_src="http://blogs.technet.com/photos/paulelong/images/471164/original.aspx"&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: center"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;You can also save your own filters and bring them up in other sessions. This lets you access your most used filters easily. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Applying a filter &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;In order to apply a filter in NM3.0, you can either press the button (paper with a pin on it), or you can hit Ctrl+Enter. One advantage to using the key stroke, Ctrl+Enter, is that it always applies the current filter. When you use the button, you may have to turn off the current filter if you have one applied already. This UI glitch will probably be something we address in the future. Note that we use Ctrl+Enter because our filters can be multiple lines. Having multiple lines helps readability and allows you to add comments as well. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;What do I want to filter on? &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;I suppose it depends on what you are looking for. In general you have some problem you are investigating, or perhaps you simply want to get rid of all uninteresting traffic. Filters allow you to narrow down the traffic and see only the data you want to focus on. You'll often start with something and then further narrow down what you are looking for by adding expressions separated by ORs and ANDs. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Filters can reference anything in the NPL. So this includes protocol data fields like we mentioned above. But this also includes Properties, which are derived by NPL and usually based on the data. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;For example, the value of the TCP Window size is a combination of the Windows Scale and the TCP Window Size. So we could create a property to hold the real window size. Each column, with a few exceptions, is also just property value. So this means you can search any column for data in a filter as well. We'll show some examples of this. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Show me all frames where X exists… &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;So let's start with a simple filter to find all the ARP packets. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;ARP &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;OK, almost too easy. A simple principle to remember is that by simply typing a protocol, structure or property you filter for the existence. So when you type ARP, you are looking for any frame which parses as an ARP protocol. Similarly if you wanted to get rid of all ARP frames, you just say &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;NOT ARP &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Also if you like C like terminology you can type &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;!ARP &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;So let's apply this same principle to a structure. Say we want to find all TCP traffic where SACKs are used (Selective Acknowledgments). You don't care what the values of the SACK are, you just want to show only those frames where they exist. So your filter would be: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Tcp.TCPOptions.Option.SACK &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;And finally, let's apply this to a property. In TCP we have a property called "TCPRetransmit" that gets set whenever a retransmit is found. By the way, this property requires that conversations are enabled, which isn't the default in NM3. So to find all retransmit frames, just type: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Property.TCPRetransmit &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Actually the Property portion is only needed if the term was defined as something other than a property as well. Preceding it with the Property suffix makes sure you are referencing it correctly in case it is defined as a structure or protocol too. It never hurts to begin you terms with Property, Struct, or Protocol as called for. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Using equivalence and comparative operators &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Another type of filtering that is often required is to look for a specific value in a trace or a value within a certain range. For example, say you wanted to look for traffic on a certain port. In this case you would type a filter like: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Tcp.Port == 5555 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;This would return any frame with a port (either source or destination) is 5555. What's interesting here is that Port is defined as a "pair". This simply means that we pair up the source and destination port so you don't have to. If you were to explicitly type this out using source and destination ports you would have to type: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Tcp.SrcPort == 5555 OR Tcp.DstPort == 5555 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;But the Port "Pair" property takes care of this for you. This makes creating filters with paired properties much easier. Since NPL defines these pairs, this could be established for any pair of terms that act this way. Pairs have also been created for Ethernet and IP addresses. So to filter on frames that involve at least one IP address containing 192.168.1.1, you would type: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;IPv4.Address == 192.168.1.1 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;And similarly for Ethernet addresses: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Ethernet.Address==0x1185AE4E95 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;It's also important to note that when you use this in the negative case, != (not equals), the expansion is different. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Tcp.Port != 5555 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Expands to: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Tcp.SrcPort != 5555&amp;nbsp;AND Tcp.DstPort != 5555 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;This should be no surprise to you Boolean math heads, but for the commoner this may seem incorrect at first. The typical reaction is to use OR instead of AND.&amp;nbsp; But this&amp;nbsp;will show you only frames where either port is not 5555. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;You can also use all the comparative operators like &amp;gt;, &amp;lt;, &amp;gt;=, &amp;lt;=. So if you wanted to search for instances where the window size started getting small, you could so something like. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Tcp.Window &amp;lt; 1200 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Now as I mentioned before, if windows scaling is enabled, this may not be the real size. So a better way to do this in NM3.0 is to use the property that calculates the real window size. So this filter would be: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Property.WindowSize &amp;lt; 100 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Using Contains to search strings &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;A common task is to be able to search ASCII and Unicode strings. You can use the Contains plug-in to do this. It searches the associated string and ignores case. This can be used in two different ways, with the same results. Use which ever method you feel more comfortable with. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Contains(property.Description, "error") &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;You can also use as an operator on a string object. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Property.Description.Contains("error") &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;As I mentioned before, you can search any property. And remember that most columns are just properties. The exceptions are FrameNumber, TimeOffset, TimeDelta, TimeOfDay, and ConvID. But the rest are fair game. So in this case we can search the description property text using the Contains plug in. Note that using this to search binary data doesn't work. This is something that will probably be addressed in future versions, as it is useful to search binary data. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Generating compound statements by using AND's and OR's&lt;/STRONG&gt;: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;When narrowing down frames, you'll often start by using one expression to filter the frames down and then you'll want to add other expressions to further restrict your search. So let's say I wanted to look for all frames on port 5555 that also have a window size less than 100 bytes. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Tcp.Port == 5555 AND Property.WindowSize &amp;lt; 100 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;You can also use the C like shorthand: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Tcp.Port == 5555 &amp;amp;&amp;amp; Property.WindowSize &amp;lt; 100 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Or to search for traffic between two machines, you could type &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;IPv4.Address == 192.168.1.1 &amp;amp;&amp;amp; IPv4.Address == 10.0.0.1 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;You have to be careful when using AND's and OR's. The English language tends be more ambiguous when using these terms. Asking a car dealer to see all the Red and Green cars may make sense to both you and him, but the same query to NM3.0 would result in a potentially ugly car that maybe only Santa would appreciate. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;Here's another example for filtering on subnets. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;(IPv4.Address &amp;gt;= 10.53.0.0) &amp;amp;&amp;amp; (IPv4.Address &amp;lt;= 10.53.255.255) &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;In this example, it's important to understand that the address is really just 32 bits of data. So checking if an address is between the lower and upper bounds of the networks range, is really the same thing as checking if it's in the same subnet. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Using math operators in filters &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;It's also possible to use math operators, like +, -,*, /,&amp;amp;, and | in filters. The last two being "bitwise and" (&amp;amp;) and "bitwise or" (|). As an example, we can use this to filter out on a subnet, but this time using the "bitwise and". This simulates what subnet mask does. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;((ipv4.SourceAddress &amp;amp; 255.255.0.0) == 10.53.0.0) &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;|| &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;((ipv4.DestinationAddress &amp;amp; 255.255.0.0) == 10.53.0.0) &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Comments in the filter window &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;It's also possible to add comments in the filter window. This helpful if you want to document how a filter works. This also allows you to comment out a section temporarily so you don't have to remove that portion of the filter completely. Comments can be used with either // for a single line comment and /* */ if you want to comment more than one line. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;Extra Credit, modifying NPL to filter on a new property IPTTL &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;We talked before about searching on properties. There may be special cases where you want to create a property yourself so that you can search on it. For this example, we'll create an IPTTL property that can reference both the IPv4 and IPv6 hop count values. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;So the first step is to modify both IPv4.NPL and IPv6.NPL to add our property. For IPv4, we'll add the property to the TimeToLive data field and for IPv6 the HopLimit data field. In NPL properties are placed in square brackets "[ ]" before the data field definition. The bracket section can contain multiple lines separated by commas but we won't have to worry about this for our example. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;In IPv4.NPL, we see that the TTL parameter is defined as follows. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;… &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;}; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;STRONG&gt;&lt;EM&gt;UINT8 TimeToLive; &lt;/EM&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;[NextProtocol] &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;UINT8 NextProtocol = FormatString("%s, %d(%#x)", &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 180pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;ProtocolTypeTable(this), this, this); &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;So what we do is add in property called IPTTL as follows: &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;[IPTTL] &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;UINT8 TimeToLive&lt;STRONG&gt;; &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The property automatically attaches itself to the data that follows it. So now let's modify the IPv6 parser. Here's how it looks in its original form. &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;[NextHeader] &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;UINT8 NextProtocol = FormatString("%s, %d(%#x)", &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 144pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;ProtocolTypeTable(this), this, this); &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;STRONG&gt;&lt;EM&gt;UINT8 HopLimit; &lt;/EM&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;So we'll make the same change here: &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;[IPTTL] &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;UINT8 HopLimit; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;The properties are named the exact same, so we now can reference the same property name. If IPv4 exists it references TimeToLive, and if IPv6 exists we reference HopLimit. &lt;/P&gt;
&lt;P&gt;You must now reload the parsers. This is similar to a recompile as we want to save time each time you run NM3.0. This can be done from the parsers tab. You can hit the button from the tool bar, select Tools Reload Parsers, or type Ctrl+Alt+B. &lt;/P&gt;
&lt;P&gt;Once the parsers are reloaded, you can then use this in a filter as follows: &lt;/P&gt;
&lt;P style="MARGIN-LEFT: 36pt"&gt;Property.IPTTL == 0 &lt;/P&gt;
&lt;P&gt;This will return all frames where the TimeToLive or HopLimit is set to zero. &lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;STRONG&gt;And that's your filtering introduction &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;While it takes a while to get good at filtering the discussion above should give you a good premier. Hopefully this will help you understand the basics of how to use filtering to find the data you want with Network Monitor 3.0.&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=471033" width="1" height="1"&gt;</description><enclosure url="C:\Documents and Settings\paullo\My Documents\Netmon project\Blog\IntelliExample.bmp" length="-1" type="image/bmp" /><category domain="http://blogs.technet.com/netmon/archive/tags/Filtering/default.aspx">Filtering</category><category domain="http://blogs.technet.com/netmon/archive/tags/tshoot/default.aspx">tshoot</category></item></channel></rss>