tag:blogger.com,1999:blog-58953012682804800992024-03-14T08:02:59.695+00:00WifiNigelWifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comBlogger109125tag:blogger.com,1999:blog-5895301268280480099.post-29837550259034473372020-06-07T11:44:00.004+01:002020-06-07T12:34:36.282+01:00My Scripts To Try Out The Mist API<p>I recently spent some time looking at the Mist API after completing some of their online training to learn more about their service offering. I experimented with a few Python scripts I created to understand how I could retrieve information about my mini "free AP" network.</p><p>I dumped the scripts in to a GitHub repository so that others could take a look at them and either use them or analyze them and perhaps write scripts of their own.</p><p>I started writing a "ReadMe" page about the scripts and how to use them. The page soon grew to be a lot more detailed than I originally indended, but ended up containing many of the lessions I had learned when trying to figure out how to use the API with Python scripts.</p><p>You can see the full GitHub repository and the ReadMe at on my Git Hub site at : <a href="https://github.com/wifinigel/mist-utils">https://github.com/wifinigel/mist-utils</a></p><p>I've copy and pasted much of the content from the ReadMe below, as I thought it makes a pretty good blog article in its own right and there are probably many people who would never find it over on GitHub.</p><p>Checkout the full <a href="https://github.com/wifinigel/mist-utils/blob/master/README.md">ReadMe </a>page for more useful resources about Mist API information.</p><p><br /></p>
<h1 style="-webkit-text-stroke-width: 0px; background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 2em; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 600; letter-spacing: normal; line-height: 1.25; margin: 24px 0px 16px; padding-bottom: 0.3em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Usage</h1><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">To use these scripts, you'll need to get your environment set up to run the scripts against your Mist network API.</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">You'll need to do the following steps (which are all detailed in this document):</p><ol style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;">Get an API token</li><li style="box-sizing: border-box; margin-top: 0.25em;">Set you environment to use the token</li><li style="box-sizing: border-box; margin-top: 0.25em;">Install Python 3 (if you don't already have it)</li><li style="box-sizing: border-box; margin-top: 0.25em;">Download the scripts</li><li style="box-sizing: border-box; margin-top: 0.25em;">Test your environment works with the API</li><li style="box-sizing: border-box; margin-top: 0.25em;">Run the scripts</li></ol><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">I'm assuming you have a Mist cloud dashboard account and an online AP or two to be able to perform the steps detailed in this document.</p><h1 style="-webkit-text-stroke-width: 0px; background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 2em; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 600; letter-spacing: normal; line-height: 1.25; margin: 24px 0px 16px; padding-bottom: 0.3em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a aria-hidden="true" class="anchor" href="https://github.com/wifinigel/mist-utils#mist-api-overview" id="user-content-mist-api-overview" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration: none;"></a>Mist API Overview</h1><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">The Mist API allows you to perform a whole variety of operations on your organisation's Mist network instead of using their cloud dashboard.</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">This allows incredible flexibility if you would like to perform automation on your network.</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">The examples provided in this repository demonstrate how to pull data from the network to provide status and reporting information. The target audience I had in mind when writing these scripts is very much network engineers who would like to pull off infrastructure data to include in reports and documentation.</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">The scripts are written in Python as everyone tells me a I need to be able to code and Python is the flavour of the moment.</p><h2 style="-webkit-text-stroke-width: 0px; background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 1.5em; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 600; letter-spacing: normal; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a aria-hidden="true" class="anchor" href="https://github.com/wifinigel/mist-utils#how-do-we-pull-data-via-an-api-" id="user-content-how-do-we-pull-data-via-an-api-" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration: none;"></a>How Do We Pull Data Via An API ?</h2><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">The API allows us to read, write, update and delete data on our network. We'll be primarily reading data, as that is the safest option when we're sending API requests in to our network. I'll leave you to explore writing, updating and deleting stuff yourself...I don't fancy being responsible for giving you tools that may damage your network (...yes I'm a coward like that).</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">To perform any sort of API operations, we need to send a http request to the API URL of the Mist cloud. You can think of this as being very similar to the operation we perform with a web browser when we pull pages from a web site. But, instead of using a browser, we use a Python script to send a https request, and, we get data back rather than a web page. The operations of a browser talking to a web page and a Python script pulling data from the Mist API site are outlined in the image below:</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a href="https://github.com/wifinigel/mist-utils/blob/master/images/http_get.png" rel="noopener noreferrer" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration: none;" target="_blank"><img alt="http_get_image" src="https://github.com/wifinigel/mist-utils/raw/master/images/http_get.png" style="background-color: white; border-style: none; box-sizing: initial; max-width: 100%;" /></a></p><h2 style="-webkit-text-stroke-width: 0px; background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 1.5em; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 600; letter-spacing: normal; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a aria-hidden="true" class="anchor" href="https://github.com/wifinigel/mist-utils#authentication-token" id="user-content-authentication-token" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration: none;"></a>Authentication Token</h2><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">When we use http to pull data with a Python script, we need to ensure that only authorized people can send requests to the API and retrieve our network data or potentially make configuration changes.</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">One way of authenticating any requests we send to the Mist API is to send our username and password with each request to verify our identity and that we are authorized to perform the request operation (such as getting a list of all APs on one of our network sites). However this is programmatically challenging and if the credentials are inadvertently revealed (e.g. they are seen by a third party), the may be easily recorded and used to provide unauthorized access.</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">A preferred method is to use an authentication token string. This is a very long randomised string of characters that cannot be remembered if seen and can be easily revoked and replace with a new token created if required. The token is used in place of username/password credentials when making requests to the API.</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">A token looks something like this:</p><pre style="-webkit-text-stroke-width: 0px; background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.45; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; word-spacing: 0px;"><code style="background: initial; border-radius: 3px; border: 0px none; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; white-space: pre; word-break: normal;"> Nm3A2LkqTlgm8eDhnsZUjeJjdeuw6EAzvsoTgCYxtnkv51A2bcfjiGkAZB8QSgD3LCWeSzaHyeeyLFjouG6Ek7YroOcW1h
</code></pre><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">When a http request is set to a web server or API, a number of "headers" are sent with the request. These can contain a variety of data such as cookies and information about the web client (e.g. the browser type). When we are making an API call to the Mist cloud, we have to include the token as header in the format of :</p><pre style="-webkit-text-stroke-width: 0px; background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.45; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; word-spacing: 0px;"><code style="background: initial; border-radius: 3px; border: 0px none; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; white-space: pre; word-break: normal;"> Authorization: Token Nm3A2LkqTlgm8eDhnsZUjeJjdeuw6EAzvsoTgCYxtnkv51A2bcfjiGkAZB8QSgD3LCWeSzaHyeeyLFjouG6Ek7YroOcW1h
</code></pre><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">(Note the handling of the token in headers is taken care of automatically in the scripts in this repo once you have created your own token, so don't worry too much about this detail.)</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">When the request is received by the mist API (at api.mist.com), it checks the token to see if it is valid and will then provide the appropriate access policy for that token. It will allow permissions such as read or write access, and will determine which organisations and sites may be accessed by the API call.</p><h3 style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 1.25em; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 600; letter-spacing: normal; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a aria-hidden="true" class="anchor" href="https://github.com/wifinigel/mist-utils#getting-an-authentication-token" id="user-content-getting-an-authentication-token" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration: none;"></a>Getting an Authentication Token</h3><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">To create a token to use with scripts that perform operations via the Mist API, we need to login to the Mist dashboard with our username and password.</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Next, perform the following steps:</p><ol style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;"><p style="box-sizing: border-box; margin-bottom: 16px; margin-top: 16px;">Login to the Mist dashboard with a browser</p></li><li style="box-sizing: border-box; margin-top: 0.25em;"><p style="box-sizing: border-box; margin-bottom: 16px; margin-top: 16px;">Open a new tab in your browser</p></li><li style="box-sizing: border-box; margin-top: 0.25em;"><p style="box-sizing: border-box; margin-bottom: 16px; margin-top: 16px;">Enter the following URL in your browser:<span> </span><a href="https://api.mist.com/api/v1/self/apitokens" rel="nofollow" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration: none;">https://api.mist.com/api/v1/self/apitokens</a></p></li><li style="box-sizing: border-box; margin-top: 0.25em;"><p style="box-sizing: border-box; margin-bottom: 16px; margin-top: 16px;">Assuming you are correctly logged in to your Mist site, you will see a page similar to this:</p></li></ol><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a href="https://github.com/wifinigel/mist-utils/blob/master/images/no_tokens.png" rel="noopener noreferrer" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration: none;" target="_blank"><img alt="no_tokens_image" src="https://github.com/wifinigel/mist-utils/raw/master/images/no_tokens.png" style="background-color: white; border-style: none; box-sizing: initial; max-width: 100%;" /></a></p><ol start="5" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;"><p style="box-sizing: border-box; margin-bottom: 16px; margin-top: 16px;">This page shows us the token we have associated with our account. It should look like the image above (with an empty pair of square brackets in the upper highlighted area), assuming you have not created any token previously.</p></li><li style="box-sizing: border-box; margin-top: 0.25em;"><p style="box-sizing: border-box; margin-bottom: 16px; margin-top: 16px;">Next we need to create a token by hitting the "Post" button highlighted in the image above. This will create a token for us.</p></li><li style="box-sizing: border-box; margin-top: 0.25em;"><p style="box-sizing: border-box; margin-bottom: 16px; margin-top: 16px;">Now, we will see the token that as been generated for us. NOTE: You will only see this token once, so make sure you copy and paste it to somewhere safe. There is no way of retrieving a token later, the only option will to be generate a new token if you lose this one. The token field is shown in the image below. The value you need to save is the long string beginning 'CYbLfqGt' highlighted in the blue rectangle in the image below:</p></li></ol><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a href="https://github.com/wifinigel/mist-utils/blob/master/images/token.png" rel="noopener noreferrer" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration: none;" target="_blank"><img alt="no_tokens_image" src="https://github.com/wifinigel/mist-utils/raw/master/images/token.png" style="background-color: white; border-style: none; box-sizing: initial; max-width: 100%;" /></a></p><h3 style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 1.25em; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 600; letter-spacing: normal; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a aria-hidden="true" class="anchor" href="https://github.com/wifinigel/mist-utils#using-the-authentication-token" id="user-content-using-the-authentication-token" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration: none;"></a>Using The Authentication Token</h3><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Now that we have an authentication token we can use it to provide authentication to the Mist cloud for our script operations.</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">The token created will be subject to the same access restrictions as our Mist dashboard account. For instance, if you do not have rights to delete APs with your dashboard login, your API token will also not be able to delete APs.</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">As the API token is a valuable set of credentials that could allow anyone who gets hold of it to access your network, it needs to be protected in the same way as any other credentials. Embedding the credentials in your script is probably not a great idea, as if you share it or it is accessed in some other way then your security is compromised.</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">A method that I like to use is to configure the token as an user-level environmental variable on the machine I am working on. This allows all of my scripts to access the token value, but it is only available to me. All of the scripts in this repo use this method. Therefore, you must set an environmental variable on your machine called MIST_TOKEN that contains the value of your token. All scripts will look for this value when they run - if it is not present, they will not run.</p><h4 style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 600; letter-spacing: normal; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a aria-hidden="true" class="anchor" href="https://github.com/wifinigel/mist-utils#setting-the-env-var-token-value-on-a-mac" id="user-content-setting-the-env-var-token-value-on-a-mac" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration: none;"></a>Setting the Env Var Token Value On A Mac</h4><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Temporarily setting the value in a terminal window:</p><ol style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;">Open a terminal window</li><li style="box-sizing: border-box; margin-top: 0.25em;">Enter the command:</li></ol><pre style="-webkit-text-stroke-width: 0px; background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.45; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; word-spacing: 0px;"><code style="background: initial; border-radius: 3px; border: 0px none; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; white-space: pre; word-break: normal;">MIST_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
(where the xxxxx is replaced with your token string)
</code></pre><ol start="3" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;">Test it is set by executing the command (the configured token string should be shown):</li></ol><pre style="-webkit-text-stroke-width: 0px; background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.45; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; word-spacing: 0px;"><code style="background: initial; border-radius: 3px; border: 0px none; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; white-space: pre; word-break: normal;">echo $MIST_TOKEN
</code></pre><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">(Note, each time you close your terminal window, this will need to be repeated)</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Permanently set the env var for all terminal windows you open:</p><ol style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;">Open a terminal window</li><li style="box-sizing: border-box; margin-top: 0.25em;">Edit the file .profile using the Nano text editor:</li></ol><pre style="-webkit-text-stroke-width: 0px; background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.45; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; word-spacing: 0px;"><code style="background: initial; border-radius: 3px; border: 0px none; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; white-space: pre; word-break: normal;">nano .profile
</code></pre><ol start="3" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;">Add the following line at the bottom of the file</li></ol><pre style="-webkit-text-stroke-width: 0px; background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.45; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; word-spacing: 0px;"><code style="background: initial; border-radius: 3px; border: 0px none; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; white-space: pre; word-break: normal;">MIST_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
(where the xxxxx is replaced with your token string)
</code></pre><ol start="4" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;">Save the file using ctrl-x</li><li style="box-sizing: border-box; margin-top: 0.25em;">Close the terminal window and open a new one. Enter the following command to verify that the env var is set:</li></ol><pre style="-webkit-text-stroke-width: 0px; background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.45; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; word-spacing: 0px;"><code style="background: initial; border-radius: 3px; border: 0px none; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; white-space: pre; word-break: normal;">echo $MIST_TOKEN
</code></pre><h4 style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 600; letter-spacing: normal; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a aria-hidden="true" class="anchor" href="https://github.com/wifinigel/mist-utils#setting-the-env-var-token-value-on-a-windows-machine" id="user-content-setting-the-env-var-token-value-on-a-windows-machine" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration: none;"></a>Setting the Env Var Token Value On A Windows Machine</h4><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Temporarily setting the value in a command window:</p><ol style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;">Open a command window (i.e. CMD)</li><li style="box-sizing: border-box; margin-top: 0.25em;">Enter the command:</li></ol><pre style="-webkit-text-stroke-width: 0px; background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.45; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; word-spacing: 0px;"><code style="background: initial; border-radius: 3px; border: 0px none; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; white-space: pre; word-break: normal;">set MIST_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
(where the xxxxx is replaced with your token string)
</code></pre><ol start="3" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;">Test it is set by executing the command (the configured token string should be shown):</li></ol><pre style="-webkit-text-stroke-width: 0px; background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.45; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; word-spacing: 0px;"><code style="background: initial; border-radius: 3px; border: 0px none; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; white-space: pre; word-break: normal;">echo %MIST_TOKEN%
</code></pre><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">(Note, each time you close your command window, this will need to be repeated)</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Permanently set the env var for all command windows you open:</p><ol style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;">Click on the Windows start button</li><li style="box-sizing: border-box; margin-top: 0.25em;">Type the word "environment"</li><li style="box-sizing: border-box; margin-top: 0.25em;">The option "Edit environment variables for your account" should appear in the search results - click on it</li><li style="box-sizing: border-box; margin-top: 0.25em;">In the "Environment Variables" panel that appears, we need to create an entry in the upper part of the panel in the user variables section.</li><li style="box-sizing: border-box; margin-top: 0.25em;">Hit the 'New' button and enter the env var details are shown below:</li></ol><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a href="https://github.com/wifinigel/mist-utils/blob/master/images/new_var.png" rel="noopener noreferrer" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration: none;" target="_blank"><img alt="new_var_image" src="https://github.com/wifinigel/mist-utils/raw/master/images/new_var.png" style="background-color: white; border-style: none; box-sizing: initial; max-width: 100%;" /></a></p><ol start="6" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;">Once this has been created, the MIST_TOKEN variable should be shown as in the image below:</li></ol><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a href="https://github.com/wifinigel/mist-utils/blob/master/images/env_vars.png" rel="noopener noreferrer" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration: none;" target="_blank"><img alt="env_vars_image" src="https://github.com/wifinigel/mist-utils/raw/master/images/env_vars.png" style="background-color: white; border-style: none; box-sizing: initial; max-width: 100%;" /></a></p><ol start="7" style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;">Open a new command window (i.e. CMD)</li><li style="box-sizing: border-box; margin-top: 0.25em;">Check that the env var is available by typing the command:</li></ol><pre style="-webkit-text-stroke-width: 0px; background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.45; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; word-spacing: 0px;"><code style="background: initial; border-radius: 3px; border: 0px none; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; white-space: pre; word-break: normal;">echo %MIST_TOKEN%
</code></pre><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">(Note: this env var will always be available in every command window you open until you remove it from the environment variables panel)</p><h2 style="-webkit-text-stroke-width: 0px; background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 1.5em; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 600; letter-spacing: normal; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a aria-hidden="true" class="anchor" href="https://github.com/wifinigel/mist-utils#getting-python" id="user-content-getting-python" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration: none;"></a>Getting Python</h2><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">You will need to have Python 3 installed on your machine to run the scripts in this repo. I cannot go through all of the steps required to do this, but you can get the Python software and installation instructions from :<span> </span><a href="https://www.python.org/downloads/" rel="nofollow" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration: none;">https://www.python.org/downloads/</a><span> </span>(get the latest version of 3.x.x).</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Once you have installed Python, open a terminal and command window and type the command "python -V" (that's capital 'V') to ensure it is correctly installed (note some platforms may require you to type "python3 -V"). This is a good confidence check that your good to go:</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a href="https://github.com/wifinigel/mist-utils/blob/master/images/python_version.png" rel="noopener noreferrer" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration: none;" target="_blank"><img alt="python_version_image" src="https://github.com/wifinigel/mist-utils/raw/master/images/python_version.png" style="background-color: white; border-style: none; box-sizing: initial; max-width: 100%;" /></a></p><h2 style="-webkit-text-stroke-width: 0px; background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 1.5em; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 600; letter-spacing: normal; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a aria-hidden="true" class="anchor" href="https://github.com/wifinigel/mist-utils#getting-the-scripts" id="user-content-getting-the-scripts" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration: none;"></a>Getting The Scripts</h2><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">There are 2 methods of getting the scripts in this repo:</p><ol style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; padding-left: 2em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><li style="box-sizing: border-box;"><p style="box-sizing: border-box; margin-bottom: 16px; margin-top: 16px;">Use git (if you have it installed) using the command 'git clone<span> </span><a href="https://github.com/wifinigel/mist-utils.git" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration: none;">https://github.com/wifinigel/mist-utils.git</a>'</p></li><li style="box-sizing: border-box; margin-top: 0.25em;"><p style="box-sizing: border-box; margin-bottom: 16px; margin-top: 16px;">Download a zip file of all the repo files and unzip them on your machine:<span> </span><a href="https://github.com/wifinigel/mist-utils/archive/master.zip" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration: none;">https://github.com/wifinigel/mist-utils/archive/master.zip</a></p></li></ol><h2 style="-webkit-text-stroke-width: 0px; background-color: white; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 1.5em; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 600; letter-spacing: normal; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a aria-hidden="true" class="anchor" href="https://github.com/wifinigel/mist-utils#running-the-scripts" id="user-content-running-the-scripts" style="background-color: initial; box-sizing: border-box; color: #0366d6; float: left; line-height: 1; margin-left: -20px; padding-right: 4px; text-decoration: none;"></a>Running The Scripts</h2><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Once you have downloaded the scripts, open a terminal or command windows and change directory to the folder you have created that contains the scripts.</p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Next, try running the 'check_env.py' script. This will check your environment and connectivity to the Mist cloud:</p><pre style="-webkit-text-stroke-width: 0px; background-color: #f6f8fa; border-radius: 3px; box-sizing: border-box; color: #24292e; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.45; margin-bottom: 16px; margin-top: 0px; overflow-wrap: normal; overflow: auto; padding: 16px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; word-spacing: 0px;"><code style="background: initial; border-radius: 3px; border: 0px none; box-sizing: border-box; display: inline; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace; font-size: 13.6px; line-height: inherit; margin: 0px; overflow-wrap: normal; overflow: visible; padding: 0px; white-space: pre; word-break: normal;">python check_env.py
</code></pre><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a href="https://github.com/wifinigel/mist-utils/blob/master/images/check_env.png" rel="noopener noreferrer" style="background-color: initial; box-sizing: border-box; color: #0366d6; text-decoration: none;" target="_blank"><img alt="check_env_image" src="https://github.com/wifinigel/mist-utils/raw/master/images/check_env.png" style="background-color: white; border-style: none; box-sizing: initial; max-width: 100%;" /></a></p><p style="-webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 16px; margin-top: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">If this passes all tests, you're good to go! I'll leave you to explore the other scripts yourself and hopefully create your own over time. Enjoy!!!</p>WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-44491494980623029312020-06-01T19:17:00.002+01:002020-06-01T19:20:52.193+01:00Wi-Fi For Beginners Podcast<div>I was recently invited to take part in the <a href="https://wlanprofessionals.com/wi-fi-for-beginners-with-nigel-bowden/" target="_blank">WLAN Pros Podcast</a> for a short interview about my <a href="http://wififorbeginners.com/" target="_blank">Wi-Fi For Beginners podcast series</a> that I did a few years ago. <br /></div><div><br /></div><div>Keith Parsons is looking at a number of resources for newcomers to the Wi-Fi industry and thought that my series might be a useful place for people to dip their toes in to the world of Wi-Fi.</div><div><br /></div><div>You can hear the podcast interview I did here:</div><div><br /></div><div><iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/5FhKMy1WrgE" width="560"></iframe></div><div><br /></div><div>Don't forget, you can check out my podcast series via the following links:</div><div><ul style="text-align: left;"><li><a href="http://wififorbeginners.com/" target="_blank">Wi-Fi For Beginners Site</a></li><li><a href="https://www.youtube.com/playlist?list=PL7tWrMZ3Gxl4cvKLG1ch0ietGkWd_ewzd" target="_blank">Wi-Fi For Beginners YouTube playlist</a><br /></li></ul></div>WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-62553989034571026782020-05-21T10:37:00.003+01:002020-05-21T10:41:39.661+01:00Wi-Fi For Beginners Podcast on Youtube<div><br /></div><div>A few years back, I created a podcast series called "Wi-Fi For Beginners". It was aimed at networking profesisonals who already have general networking skills, but were looking to expand their Wireless LAN knowledge.</div><div><br /></div><div>The series was very popular and has had many tens of thousands of downloads to date. After speaking recently with Keith Parsons about the series, I thought it might be useful to post the 21 episodes of the series on <a href="https://www.youtube.com/playlist?list=PL7tWrMZ3Gxl4cvKLG1ch0ietGkWd_ewzd" target="_blank">YouTube</a> to make it accessible to a whole new audience who aren't perhaps so familiar with subscribing to podcasts etc.</div><div><br /></div><div>Although created between 2015-2017, the majority of the content is still applicable to current wireless networking practices. In fact, many of the fundamentals of wireless and networking theory never change. <br /></div><div><br /></div><div>Knowledge of wireless LAN networking requires an understanding of all of the legacy 802.11 ammendments that have gone before and still need to be understood today. The main area missing from this series when considering wireless networking today is the 802.11ax amendment, which is still awaiting final ratification at the time of writing.<br /></div><div><br /></div><div>I have posted the podcast episodes in a <a href="https://www.youtube.com/playlist?list=PL7tWrMZ3Gxl4cvKLG1ch0ietGkWd_ewzd" target="_blank">playlist </a>as a series of audiograms on <a href="https://www.youtube.com/playlist?list=PL7tWrMZ3Gxl4cvKLG1ch0ietGkWd_ewzd" target="_blank">Youtube</a>. If you've not heard them before, you can work through them by playing the list, which will walk you through them in sequential order. There are also a set of slides avaiable to view with this audio series which you can obtain <a href="http://wififorbeginners.com/slides/" target="_blank">from my website</a>.</div><div><br /></div><div>I hope you enjoy listening to the series if you missed it first time around!</div><div><br /></div>
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/videoseries?list=PL7tWrMZ3Gxl4cvKLG1ch0ietGkWd_ewzd" width="560"></iframe>
<div><font size="4"><br /></font></div><div><font size="4">References</font></div><div><ul style="text-align: left;"><li><a href="http://wififorbeginners.com/slides/" target="_blank">Podcast series slides</a></li><li><a href="https://www.youtube.com/playlist?list=PL7tWrMZ3Gxl4cvKLG1ch0ietGkWd_ewzd" target="_blank">Youtube playlist</a></li><li><a href="http://wififorbeginners.com/" target="_blank">Podcast website</a></li><li><a href="https://itunes.apple.com/gb/podcast/wifi-for-beginners-podcast/id1042584708?mt=2&ls=1#episodeGuid=http%3A%2F%2Fwififorbeginners.com%2F%3Fp%3D43" target="_blank">Podcast on iTunes</a><br /></li></ul></div>WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-25228758813053058612020-05-07T11:52:00.002+01:002020-05-07T11:55:53.439+01:00The WLAN Pi: How Do I Get In To This Thing?<div>I thought it would be worth recording a video showing how to get on to the CLI of the WLAN Pi. I've been asked a few times how people can get in to the WLAN Pi that they've just purchased, so thought that a demonstration of a few different ways of gaining access to it would be a worthwhile exercise. You can access the <a href="https://youtu.be/DjghfW7g1_Y" target="_blank">video here</a> or using the embedded video widget below:<br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/DjghfW7g1_Y" width="320" youtube-src-id="DjghfW7g1_Y"></iframe></div><div class="separator" style="clear: both; text-align: left;">In the video, I discuss how to access the WLAN Pi using:</div><div class="separator" style="clear: both; text-align: left;"><ul style="text-align: left;"><li> USB/OTG from a local laptop</li><li>Via a network connection using the WLAN Pi Ethernet port</li><li>By configuring the WLAN Pi as a wireless client to join a Wi-Fi network</li><li>Using the WLAN Pi's Hostpot feature</li></ul><div>I hope you enjoy the video!<br /></div><div><br /></div></div><div><br /></div>WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-31721322993265819382020-05-04T21:03:00.002+01:002020-05-04T21:03:39.985+01:0010 Easy Things To Do With a WLAN Pi<b>The <a href="http://wlanpi.com/" target="_blank">WLAN Pi</a> is a community project that has created and pulled together a number of networking tools in a single, small-form-factor Linux-based device. It contains many industry-standard tools such as iperf, includes open source networking toolsets such as Kismet and has a small number of home-grown utilities.</b><br />
<br />
The tools available may accessed via a variety of methods. Services such as iperf are always available, as they are activated at boot time. Others are activated via the front panel menu system that is operated via the 3 buttons on the front panel of the unit. Others require a little more of a deep dive in to the world of Linux and are accessed via the command line of the WLAN Pi's OS.<br />
<br />
This variety of tools is both a benefit and a curse to those trying to use the WLAN Pi for the first time. While the range of tools is very interesting, it can be overwhelming. For those less familiar with Linux, it can be difficult to access some of the CLI-based tools or configuration requirements. Coupled with the rough and ready nature of open source-type projects, this can be quite frustrating to the newcomer.<br />
<br />
I thought it might be useful to put together an quick(ish) overview of the some of the eaiser-to-use features of the WLAN Pi. The video below runs through 10 features of the WLAN Pi that can help with various network tasks, but can be completed with no additional configuration of the WLAN Pi beyond its out-of-the-box defaults. Neither does it require access to the CLI of the WLAN Pi or any of that Linux nonsense.<br />
<br />
I hope you'll enjoy following along with the brief demostrations in the video. Hopefully they'll be fun and interesting exercises for you to try out.<br />
<br />
<br />
<br />
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/Ua2d4ajR0pk" width="560"></iframe>
<br />
<h3>
References: </h3>
<ul>
<li><a href="http://wlanpi.com/">WLANPi.com</a> </li>
<li><a href="https://wlan-pi.github.io/wlanpi-documentation/" target="_blank">WLAN Pi documentation project</a></li>
</ul>
WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-65855348723399961822020-02-15T17:38:00.001+00:002020-02-15T20:24:57.307+00:00Client Offsets: The Six Inch Square Challenge<br />
<b>Designing WLAN's is a pretty tricky business at the best of times, but trying to design a WLAN that works well for all clients is hard as they vary so wildly in terms of form-factor, wireless chip-sets, antenna counts and a plethora of other factors that mean they all see the wireless world in their own annoyingly unique way.</b><br />
<br />
The upshot of this is that when designing a WLAN we have to spend time trying to figure out how well (or badly) each client-type we need to support in our design sees our proposed wireless network. In simple terms, some will "hear" it more clearly than others due to their better antennas, build and sensitivity. A <a href="http://divdyn.com/wifi-design-deployment-methodology/" target="_blank">wise man</a> once said that we should design our networks for our "most important, least capable" devices (...don't let him hug you, he WILL squish you). Once we've figured this device out, we have to work out the offset between our client of choice and our survey equipment or RF modelling software.<br />
<br />
To get this "offset" to attempt to account for the signal level difference between our client and preferred design method/tool, we usually take a few comparative signal measurements. This allows us to apply an offset, in dB, to our survey/design report so that coverage heat-maps will be more representative of how the world will look to our important client.<br />
<br />
The snag is that, as <a href="https://www.wlanpros.com/resources/wlpc-client-sensitivity-testing-results/" target="_blank">Keith Parsons</a> and <a href="https://rssicompared.com/home" target="_blank">others</a> have noted, even the same model of client can vary due to manufacturing tolerances when you test their reported signal levels under the same conditions. For example, if you get hold of ten Samsung S10's and test them all in the same way, the tolerances of their internal RF components mean that the signal level results can vary by a few dB.<br />
<br />
As you can see, getting this offset figure is not an exact science.<br />
<br />
<h3>
Six Inch Square Challenge</h3>
<br />
A colleague recently challenged me to undertake an exercise to look at how wireless clients see the world based on yet another aspect I hadn't really considered too deeply before: its spatial orientation and position. I was aware that things would vary a little depending on how the device was oriented in terms of vertical of horizontal positioning, but had not really looked in to it in any real depth.<br />
<br />
The exercise (which I've termed the "Six Inch Square Challenge" as people love a meme) investigates how the RSSI level reported by a client will vary with small
positional and rotational changes (hint: it may be more surprising than you
expect).<br />
<br />
It starts by taking a 6 inch square of paper and fixing it to a surface (e.g. a table top). A test AP is then set up at some distance (I'd recommend at least 5 metres away) in line of sight of the paper square location. A wireless client is then placed on one corner of the square and the test AP RSSI measured using a wireless app on the client. The client is then rotated through 360 degrees in 45 degree increments, with the RSSI at each point being recorded. It's best to allow a reasonable period (e.g. 30 secs) for the RSSI reading to settle at each point.<br />
<br />
Once one corner of the square is completed for the 360 degree rotation, the client is moved to the other 3 corners of the square in turn and the whole measuring process repeated.<br />
<br />
The entire measuring exercise is repeated 3 times to verify that consistency of measurements is being achieved. The picture below shows the rudimentary setup I used (a spice rack turntable and a butchered cardboard box with some packing tape). I designated the four corners of the paper square as north-west, north-east, south-west and south-east for obvious reasons.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitLKKwAX2MySBAzHJqqATPGmzM11L2wWB5CHiZsj4cD7BRMjX2DCjfuSwmAKUfpMF0lG0OsGtRWd-RQEPK0wngL44HeUIJkKjYS8yYEKruMw_63k2isvxAPKo0O-Dvtz7ZRJiS56FT9Zy6/s1600/Phone+Rotation+Test+Angled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="914" data-original-width="966" height="603" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitLKKwAX2MySBAzHJqqATPGmzM11L2wWB5CHiZsj4cD7BRMjX2DCjfuSwmAKUfpMF0lG0OsGtRWd-RQEPK0wngL44HeUIJkKjYS8yYEKruMw_63k2isvxAPKo0O-Dvtz7ZRJiS56FT9Zy6/s640/Phone+Rotation+Test+Angled.png" width="640" /></a></div>
<br />
<br />
<br />
My test client was a Samsung S7 running the Ubiquiti WiFiman app (as it just happened to be on my phone). As you can see in the picture, the phone is angled at around 45 degrees from horizontal.<br />
<br />
At each test point, I found that the app needed around 30 seconds before it would settle on a relatively consistent RSSI level (give or take one dB). I found that it was best to keep at least 3 feet away from the client to avoid some variations that my proximity seemed to cause at times.<br />
<br />
The results of the tests are show below (and available for download from <a href="https://www.dropbox.com/s/o3cjzy4acjxkec3/Device%20Measurements%20at%20home.xlsx?dl=0">here</a>):<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtNxopF8fyVfllJEjGi1HIJeTSFEL_3-J3FNt5SKfsC-2obz3uEpaxqGmQvWdFqilLaU_YJBdGPajcGcDXjTzlsmfMb8gZgBhi3WfzEQNSfiVsUXrBaxXksdO45jgahkcCrVkCqj9x8UAk/s1600/Angled_Test.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="675" data-original-width="728" height="592" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtNxopF8fyVfllJEjGi1HIJeTSFEL_3-J3FNt5SKfsC-2obz3uEpaxqGmQvWdFqilLaU_YJBdGPajcGcDXjTzlsmfMb8gZgBhi3WfzEQNSfiVsUXrBaxXksdO45jgahkcCrVkCqj9x8UAk/s640/Angled_Test.JPG" width="640" /></a></div>
At first glance, it's just a whole pile of numbers swimming before your eyes. But, once you zoom in on a few specific areas, there are some interesting details in there:<br />
<br />
<ul>
<li>I found the range of RSSI readings in a 360 degree rotation very surprising. In the south-east location there was a 7.3dB variation just by rotating the phone through 360 degrees</li>
<li>The variation in RSSI just by turning through 45 degrees in some instances was surprisingly high. For example, take a look at 135 to 180 degrees in the south-east position: a 6.7dB difference</li>
<li>The variation in position of just a few inches for corresponding rotational positions was very surprising. For instance, take a look at 315 degrees for the north-east and south-east positions: a difference of 4.3 dB for a distance of just 6 inches across the table.</li>
</ul>
If you dig through the figures, I'm sure you can find your own insights.<br />
<br />
I also repeated the same test run with the phone in a horizontal position and received a completely different set of results:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjenaGwOyxG88TVsCp7dlVKwGwXhOxrmXBSKNDkn11oypxXcjBi-VY2vDOSKfjEaIXL6mrnsQxoPqxQsDmchRUKIk06xKDE7MFliPwpbwx7ASfT4zsQxNtajEZdAYj0fymH-cT6VrPoqrj-/s1600/Flat_Test.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="674" data-original-width="719" height="598" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjenaGwOyxG88TVsCp7dlVKwGwXhOxrmXBSKNDkn11oypxXcjBi-VY2vDOSKfjEaIXL6mrnsQxoPqxQsDmchRUKIk06xKDE7MFliPwpbwx7ASfT4zsQxNtajEZdAYj0fymH-cT6VrPoqrj-/s640/Flat_Test.JPG" width="640" /></a></div>
<br />
I'm sure you can take a look for yourself and pick out some interesting nuggets. It was quite an eye-opener for me (e.g. 10dB variation in the south-east position!)<br />
<br />
<h3>
Conclusion</h3>
<h3>
</h3>
<h3>
</h3>
As with everything else in Wi-Fi, getting hard and fast rules to apply when grappling with the data shown by these tests are challenging.<br />
<br />
For me, the key takeaway is to be more aware of the possible variations and causes of those variations I might incur by even small changes in measuring technique when trying to determine survey/design offsets. Repetition of measurements would seem prudent to ensure you haven't hit a particular location or orientation that has a particularly unusual RSSI reading and is not "typical" - even just a few inches or varying the orientation by a few degrees may vary things.<br />
<br />
It could be argued that perhaps you should use the lowest achieved RSSI measurements to cater for the worst case scenario, but this can turn in to a downward spiral of "what-ifs" when you start to consider things like hands around handsets, bodies between the phone and AP...the list goes on.<br />
<br />
The best you can do with this information is to be aware that small positional variations can really skew things if you're not aware of them. I'd advise being sensible and pragmatic, and make sure a few consistent readings can be achieved in your measurement location when trying to determine an useful offset.<br />
<br />
<h3>
References</h3>
<br />
<ul>
<li><a href="http://divdyn.com/wifi-design-deployment-methodology/" target="_blank">WiFi Design and Deployment Methodology</a> </li>
<li><a href="https://www.wlanpros.com/resources/wlpc-client-sensitivity-testing-results/" target="_blank">WLPC Client Sensitivity Testing Results</a></li>
<li><a href="https://rssicompared.com/home" target="_blank">RSSI Compared</a> </li>
<li><a href="https://www.dropbox.com/s/o3cjzy4acjxkec3/Device%20Measurements%20at%20home.xlsx?dl=0" target="_blank">Blog post data</a> </li>
</ul>
<br />
<br />
<br />WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-57798965561842587812020-02-07T20:43:00.001+00:002020-02-09T13:56:30.044+00:00Wiperf: A wireless client performance probe mode on the WLAN PiI've had a number of occasions when it would have been really useful to deploy a wireless client device on a WLAN to monitor performance over time from a client perspective. Too often, when troubleshooting a wireless network, everything looks fine from the data provided by your infrastructure kit, but the user experience is a whole different story. Unfortunately, when this requirement has arisen, persuading anyone in the organization in which I was working to invest in a wireless probe-type solution has been an uphill battle.<br />
<br />
Around 18 months ago I got to the point when working on an issue that I could not progress and had no choice but to roll my own rudimentary client probe solution. It was a Python script installed on a Raspberry Pi acting as a client on a particular SSID that was having issues. It reported wireless connectivity data and a few client tests (e.g. speedtest & ping) to a Google spreadsheet. The same code also ran on a WLAN Pi, so that I could have two probes running! The data they provided was invaluable in giving me an insight into what was going on over time on the network that was suffering issues.<br />
<br />
After that particular “gig” was complete, I moth-balled my probes, but was hugely impressed with the insights they had provided.<br />
<br />
Around 4 months ago, my friend <a href="https://uk.linkedin.com/in/krisalexroberts">Kristian Roberts</a> dropped me a note on Slack asking about using the WLAN Pi as a client probe to gather connectivity data and forward it in to Splunk for reporting. In his day-job, he already used Splunk to do some pretty fancy reporting based on various inputs from his wireless network kit.<br />
<br />
I pulled out my old Python scripts and started looking at how I could quickly modify them to send data in to Splunk. Unfortunately, when you look at code you did a few months ago, you start to see how you could have written it better and start to come up with new ideas.<br />
<br />
Anyhow, here we are, four months later and I’ve got to the point of having a package that I’m relatively happy to share. There have many evenings of testing, tweaking and brainstorming but we finally have the newly named “wiperf” package ready to go.<br />
<br />
<h3>
Wiperf Overview </h3>
<br />
In brief, wiperf is a series of Python modules that are included in the WLAN Pi image that will flip the WLAN Pi in to a wireless client mode, join an SSID and run a series of configured network tests. The tests include Ookla Speedtest, iperf3, ping, DNS, DHCP and http. Once the tests have been run, the results are returned to a Splunk server which stores the data and allows the creation of some very nice historical reports (see the example below).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://github.com/wifinigel/wiperf/blob/master/docs/images/probe_summary.JPG?raw=true" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="364" data-original-width="800" height="290" src="https://github.com/wifinigel/wiperf/blob/master/docs/images/probe_summary.JPG?raw=true" width="640" /></a></div>
<br />
<br />
Setting up the WLAN Pi to run in wiperf mode is very easy. There are just a couple of configuration files to edit for the wireless connection details and the test configurations. Then, it’s just a case of flipping the WLAN Pi into wiperf mode via the front panel buttons. To find out the full details of setting up the WLAN Pi, <a href="https://github.com/wifinigel/wiperf" target="_blank">start here</a>.<br />
<br />
Building a Splunk server platform is not as bad as you might expect. You can install it on a Windows, Mac or Linux platform and it’s pretty much the usual executable download and next..next...next install wizard you expect for many applications. Although Splunk is a paid-for package generally, we can run on the free tier as our data volumes are so low.<br />
<br />
Once Splunk is installed, a few reporting dashboards need to be configured in Splunk and then you’re good to go. Thanks to the fantastic help I got from Kristian, there are a series of pre-canned report files we’ve built that can easily be used to create your dashboards.<br />
<br />
You can find the full details of how to set up Splunk and create your reporting dashboards in the following document I created: <a href="https://github.com/wifinigel/wiperf/raw/master/docs/WLANPi%20Wiperf%20Probe%20-%20Splunk%20Build.pdf" target="_blank">Splunk Install and Config Guide</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://github.com/wifinigel/wiperf/blob/master/docs/images/speedtest_summary.JPG?raw=true" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="363" data-original-width="800" height="290" src="https://github.com/wifinigel/wiperf/blob/master/docs/images/speedtest_summary.JPG?raw=true" width="640" /></a></div>
<br />
<h3>
Conclusion </h3>
<br />
Wiperf is a great tactical tool for setting up a wireless client probe when you’re looking at issues on a network or maybe want to do a little performance trending.<br />
<br />
It is a little bit clunky to set up compared to the full-blown paid-for options available out there, but it’s a useful tool to have in your bag. It’s not a scalable performance monitoring solution, but I think it probably has quite a lot of value in demonstrating the value of the additional client-level insights a commercial offering provides. This will hopefully encourage decision makers to invest in a more scalable, fit-for-purpose commercial solution that will no-doubt provide an excellent return on investment.<br />
<br />
I hope you have fun tinkering with wiperf and it provides some useful insights for you. Please take the time to consult the various documents I have created below to help you on your journey with exploring wiperf.<br />
<br />
<h3>
References </h3>
<ul>
<li><a href="https://github.com/wifinigel/wiperf" target="_blank">Main wiperf project page (lots of great background info)</a></li>
<li><a href="https://github.com/wifinigel/wiperf/blob/master/docs/README_WLANPi_Config.md" target="_blank">WLAN Pi Configuration guide for wiperf</a></li>
<li><a href="https://github.com/wifinigel/wiperf/raw/master/docs/WLANPi%20Wiperf%20Probe%20-%20Splunk%20Build.pdf">Splunk server build & configuration guide</a></li>
<li><a href="https://github.com/wifinigel/wiperf/blob/master/docs/README_Config.ini.md" target="_blank">Wiperf configuration reference guide</a></li>
</ul>
WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-25847076566316492882020-01-18T21:29:00.002+00:002020-01-19T07:58:32.006+00:00How to Burn a New Image on Your WLAN Pi<div style="text-align: left;">
<b>I'm often asked how to burn a new image on to the WLAN Pi, so thought a video might be useful for anyone who wants to update their WLAN Pi image.</b></div>
<br />
When we release new code for the WLAN Pi, it's released as a single image file that needs to be burned on to the micro-SD card of the WLAN Pi. This video provides a practical demonstration of the process.<br />
<br />
Here are the links for the web sites shown in the video:<br />
<br />
<ul>
<li>Direct link to Youtube video: <a href="https://youtu.be/sD4WlNyyWDs">https://youtu.be/sD4WlNyyWDs</a> </li>
<li>WLAN Pi image repo: <a href="https://github.com/WLAN-Pi/wlanpi/releases">https://github.com/WLAN-Pi/wlanpi/releases</a></li>
<li>balena Etcher web site: <a href="https://www.balena.io/etcher/">https://www.balena.io/etcher/</a></li>
<li>Get the micro-SD to USB adapter: <a href="https://amzn.to/30BO4cx">https://amzn.to/30BO4cx</a> </li>
</ul>
<br />
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/sD4WlNyyWDs" width="560"></iframe>
</div>
WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-17838441808552062352020-01-08T19:00:00.001+00:002020-01-08T19:00:08.166+00:00How to blog, win friends and influence people...<!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
DefSemiHidden="false" DefQFormat="false" DefPriority="99"
LatentStyleCount="375">
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index 9"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" Name="toc 9"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="header"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footer"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="index heading"/>
<w:LsdException Locked="false" Priority="35" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of figures"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="envelope return"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="footnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="line number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="page number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote reference"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="endnote text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="table of authorities"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="macro"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="toa heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Bullet 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Number 5"/>
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Closing"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Signature"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="true"
UnhideWhenUsed="true" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="List Continue 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Message Header"/>
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Salutation"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Date"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text First Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Note Heading"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Body Text Indent 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Block Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="FollowedHyperlink"/>
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Document Map"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Plain Text"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="E-mail Signature"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Top of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Bottom of Form"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal (Web)"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Acronym"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Address"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Cite"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Code"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Definition"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Keyboard"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Preformatted"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Sample"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Typewriter"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="HTML Variable"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Normal Table"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="annotation subject"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="No List"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Outline List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Simple 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Classic 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Colorful 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Columns 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Grid 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 4"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 5"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 7"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table List 8"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table 3D effects 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Contemporary"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Elegant"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Professional"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Subtle 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 1"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 2"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Web 3"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Balloon Text"/>
<w:LsdException Locked="false" Priority="39" Name="Table Grid"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Table Theme"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" QFormat="true"
Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" QFormat="true"
Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" QFormat="true"
Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" QFormat="true"
Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" QFormat="true"
Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" QFormat="true"
Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" SemiHidden="true"
UnhideWhenUsed="true" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" SemiHidden="true"
UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="Grid Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="Grid Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="Grid Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 1"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 1"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 2"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 2"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 3"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 3"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 4"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 4"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 5"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 5"/>
<w:LsdException Locked="false" Priority="46"
Name="List Table 1 Light Accent 6"/>
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
<w:LsdException Locked="false" Priority="51"
Name="List Table 6 Colorful Accent 6"/>
<w:LsdException Locked="false" Priority="52"
Name="List Table 7 Colorful Accent 6"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Mention"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Smart Hyperlink"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Hashtag"/>
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
Name="Unresolved Mention"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-ansi-language:EN-US;
mso-fareast-language:EN-US;}
</style>
<![endif]-->
<br />
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US"><b>I was very fortunate to receive an award for my blog recently from the <a href="https://www.cisco.com/c/en/us/training-events/events-webinars/influencer-hub/blog-awards.html" target="_blank">Cisco-sponsored IT Blog Awards</a>. I also recently remembered an article I wrote quite some time ago for publication elsewhere that never made it to the presses. I thought it would be kind of appropriate to publish it myself to share what I've learned over the past 9 years or so of blogging. It will hopefully encourage others to sharpen their virtual pencils, helping them to learn, get their name "out there" and contribute to the wider community. Apologies for the length of the article, but I can't help myself when it comes to detail...sorry!</b></span></span></span></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US"> </span></span></span></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">I
was originally motivated to set up my own blog in 2011 after reading the articles of
people like Andrew Von Nagy, Devin Akin and Keith Parsons. I was in awe of
their depth of knowledge, and the fact they were performing such a valuable
altruistic act, freely sharing their valuable knowledge and content.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">I
was also starting to gain more real-world experience in wireless networking and acquiring more knowledge as I moved through my CWNP studies. While I didn’t
imagine I could ever demonstrate their level of knowledge, I was coming across
a few useful pieces of information from the solutions I was working on <span> </span>that I thought might be useful to others in
the wireless industry. I thought I’d try my hand at a few blog articles and
follow their example of sharing useful information that I might come across.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">I
was amazed by the reception that I received when I tentativley published my first blog article! I got emails and tweets from many
people congratulating me and thanking me for my efforts. The real icing on the
cake though was the messages I received from my “industry heroes”: Keith, Devin
and Andrew. Receiving praise and support from those I held in such high esteem
and whose opinion I valued so much was a massive boost for me to carry on and
develop my blogging activities.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">I
have continued to blog for around 9 years now. My frequency of creating
articles has varied significantly over that time, but I have found it to be
rewarding, challenging and incredibly useful. </span></span></span></div>
<div class="MsoNormal">
<br /></div>
<h2>
<span lang="EN-US">Why Blog?</span></h2>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">There
are some really good reasons to blog and share your knowledge expertise. We’ll
explore a few here.</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<h3>
<span class="Heading3Char"><span lang="EN-US">Community engagement</span></span><span lang="EN-US"></span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">One
of the biggest surprises for me was how blogging massively stimulated my
initial engagement with the general online wireless community. As a newcomer,
it can be quite daunting to make in-roads to an existing community. Putting
together a few blog articles and putting them “out there” is a great ice
breaker. </span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">Creating
content such as blog articles stimulates interactions with other in the
community. Conversations around your content will stimulate unexpected levels
of engagement. Articles will often prompt others to share their similar
experiences and perhaps share additional information that they may have found
from their own experiences. Others may ask for further information to help with
a challenge they may be facing that is related to the content you have created.
These conversations are an inevitable consequence of publicly sharing your
knowledge and can become valuable sources of new professional relationships and
friendships.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">One
pleasant side effect of having written a few useful blog articles is that the
first time you have cause to visit an industry conference, you’ll almost
certainly meet someone who has read one or more of your articles. It’s amazing
how often someone will approach you and say: “hey, didn’t you write that
article about a <insert subject> a few months back !?”. These comments
generally turn in to longer conversations, often ending in a few beers or some
food with a new acquaintance.</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<h3>
<span lang="EN-US">Overcoming “Imposter Syndrome”</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">One
of the challenges of becoming part of a community of knowledgeable
professionals is overcoming the barrier of not being “good enough” to offer up
your thoughts and opinions in the presence of so many others who may have a
proven track record and significant experience. This leads to a feeling of
perhaps not really having the expertise to be part of such a group and the fear
that you may get found out as lacking in your own level of expertise…you may
suffer from: “imposter syndrome”.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">Putting
together a blog post is great way to build your confidence. You will generally
get people providing positive feedback or, at worst, constructive criticism of
your content. Putting your content out there and receiving feedback from your
peers is an excellent way of getting over that feeling of being the “new kid in
town’ and will generally solicit thanks or positive feedback from someone who
finds your content useful. It I worth remembering that although there may be
plenty of gurus and experts in the community who may already know the subject
you are discussing, there are many thousands of people out there who are just
starting out or perhaps only dip in to the world of Wi-Fi occasionally, perhaps
when they have an issue to investigate. I guarantee that someone, somewhere
will find your content useful and be grateful to have discovered it.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">After
a few articles, your confidence will grow as you feel you have something of
worth to share with the world so that you no longer feel like the “newbie
imposter” </span><span lang="EN-US">😊</span></span></span><span lang="EN-US" style="font-family: "Avenir Next",sans-serif; font-size: 11.0pt;"></span></div>
<div class="MsoNormal">
<br /></div>
<h3>
<span lang="EN-US">A Useful Journal For Yourself</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">One
very interesting side-effect of creating blog articles is that they become a very
useful resource for you. Instead of keeping a set of private notes about a subject,
posting them up in a blog article means that the information is always
available via a quick Google search from just about anywhere. Posting an
article also ensures that you explain the concepts and context of a subject in
a clear and useful way. When you refer to that same article in a couple of years’
time, you’ll certainly thank yourself for having taken the time to properly
record your thoughts.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">The
biggest surprise around creating blog articles is when your own article turns up
in a set of Google search results! This may sound far-fetched, but (as Keith
Parsons is fond of reminding us at many of the conferences he organizes), it’s
incredible how many times you may find an article you may have forgotten about
from a few years ago, or perhaps some part of a previous article is relevant to
your current area of interest.</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<h3>
<span lang="EN-US">Demonstration of Knowledge</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">Creating
blog content is also a great way of demonstrating the knowledge and expertise
that you have acquired. This can be very useful in situations when people are
“looking you up” online.</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US"><span></span>If you are applying for a new role
at work, perhaps a new job or are bidding for some freelance work,
demonstrating your knowledge and establishing yourself as subject matter expert
through your blog articles can be incredibly valuable.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">A
good example of this for me personally is a series of blog articles that
I created about the 5GHz band in the UK. As information was difficult to find, I
decided to blog about it. Over time, I developed the articles in to a
comprehensive white paper about the subject, as I saw that the articles
received many hits in my blog traffic stats. Now, many people I meet within the
WLAN industry in the UK know me as they have read my white paper or found my
articles about the 5GHz band. It has become a great “virtual business card’
that sets expectations around my capabilities before I meet people and has
opened many doors of opportunity.</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<h2>
<span lang="EN-US">Creating Content</span></h2>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">Hopefully,
by now you’ll be convinced of the many benefits of blogging as part of your
professional development and as a useful tool on your journey towards attaining industry certifications such as CWNE. If you don’t already have a blog you may be wondering how you might
go about creating your own content. (Don’t worry about having a web site or
blog site at this stage…we’ll come to that later. Remember: <u>content is king</u>
and should be your main priority).</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">Here
is the process I use to create content. Feel free to borrow as much as you like
from this advice, but you’ll likely develop your own methodology over time that
suits how you work.</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<h3>
<span lang="EN-US">What Should I Blog about?</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">Creating
blog articles can be quite demanding, depending on the subject matter that is
being covered. Personally, I have found that the subjects that are easiest to
write about are techniques, nuggets of information or discoveries that make me give
myself a mental “high-5” as I’m so pleased to have come across the
information. Writing about something that has given you a “buzz” and that you
feel really enthused about is so much easier to write about, as it’s almost a
pleasure to commit it to (virtual) paper.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">If
you try to write about something that is quite dry and provides little personal
interest, the whole process will feel quite forced, will likely be boring and
is a project that is unlikely to get completed.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">My
own personal technique is to write down ideas as soon as I think of them. I
will usually start a new note in Evernote or start a new Google doc. Starting a
new document gives the article some initial momentum to get started. I’ll
usually include the title, a few words about the subject itself and maybe a few
bullets about the main points I’ve thought about. I like to use cloud-based
note services so that I can pick them up from anywhere I happen to be when I
decide to add more content. The key is to get the idea written down as soon as
possible and capture that initial buzz of enthusiasm and the rush of
ideas. Once I have this down, I may return to it hours, days or even weeks
later, when time allows for me to craft it in to fully fledged article. I have
LOTS of the ideas sitting waiting to be picked up and turned in to fully formed
articles…now all I need is time to write them </span><span lang="EN-US">😊</span><span lang="EN-US">. </span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">Once
you get in to the habit, you’ll be surprised how many times you’ll think: “<i>This would make a great blog article</i>”,
or: “<i>I bet not many people know about
this</i>”, or “<i>If I shared this, it would
save other people the many hours it just took me to figure out</i>”. <u>Write
those ideas down</u>.</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<h3>
<span lang="EN-US">When Am I Going to get Time to Write!?</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">Getting
the time to write is definitely one of the biggest challenges to creating blog
articles.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">I
personally find that writing needs a dedicated block of time without
interruption, which is quite hard to find for many working in our industry. I
would say that a useful block of time for turning ideas in to articles is at
least half an hour. This can obviously extend to whatever period you have available…or
whenever you get bored of writing. For me, the best times to write content are
on train or plane journeys; times when there aren’t too many other things you
can do. If writing at home I find that locking myself away (with no phone) for
an hour is the best way to get something done. I’ve also found driving to my
local coffee shop and spending an hour there quite useful too.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">Trying
to write when being constantly interrupted is very challenging and will likely
make the task at hand difficult to complete and seem more trouble than it's worth.
Getting time to focus is going to make the process easier and very likely ensure
your content is of higher quality.</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">I
personally have a couple of rules when writing an article:</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><ul>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US"><span><span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-style: normal; font-variant: normal; font-variation-settings: normal; font-weight: normal; line-height: normal;"></span></span></span><span lang="EN-US">Stop as soon as I get bored of writing it
– put it down and come back to it when you’re in a better frame of mind</span></span></span></li>
</ul>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><ul>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US"><span><span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-style: normal; font-variant: normal; font-variation-settings: normal; font-weight: normal; line-height: normal;"></span></span></span><span lang="EN-US">When you think it’s finished, file it
away and look at it again in a week. You’ll be surprised how many “<i>what was I thinking!?</i>” moments you’ll
have when reviewing an article a week later with fresh eyes </span><span lang="EN-US">😊</span></span></span><span lang="EN-US" style="font-family: "Avenir Next",sans-serif; font-size: 11.0pt;"></span></li>
</ul>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">I’m
a great believer in not forcing the process and putting things to one side and
returning to the task when you are ready. The time-frames involved may be days,
weeks or months later. Remember: there’s no deadline, you’re not getting paid
for this; take your time. Enjoy the whole process of
crafting something that is going to provide significant value and benefit to yourself
and others. Writing can turn in to a laborious chore if viewed as simply a task
of being compelled to commit a few facts to paper. I personally get a real buzz
from the fact that I’ve started with a blank sheet of paper and taken the time
to turn it in to something of real value in which I can take pride. You
should take the same pride in the process and your creative output.</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<h3>
<span lang="EN-US">OK, I’m Sold – How Do I Publish My Content!?</span></h3>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span lang="EN-US">Brilliant, you’re fired up and ready to go!
You’ve written your first article and you're ready to share your wisdom with the
world. How do you get it “out there”?</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span lang="EN-US">My advice, assuming this is your first
foray into blogging is to keep it as simple as possible. I would definitely
start by publishing on a super-simple free site such as Blogger.com (owned by
Google) or Wordpress.com (their free tier). It is very easy to get hung up on
trying to build fancy web sites, experiment with templating systems and try to
pepper your site with ads to try to generate revenue. At least initially,
forget all of that. Keep it uber simple and see if blogging is for you. Later,
once you have ten articles up and you are in to your blogging “flow’ maybe you
can get a little more fancy and branch out into a more refined home for your
content.</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span lang="EN-US">Trust me, CONTENT IS KING. The vast
majority of your visitors will hit your site from a Google search and will
spend just a few seconds to decide if your content is what they are after.
They’ll maybe hang around for a few minutes longer if the content looks
promising is helping answer their question. The color scheme and aesthetics are
very much a secondary consideration, as long at the content is readable.</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span lang="EN-US">Although there are considerations about the
type of device your audience may be using (e.g. a laptop browser, a smartphone
screen), most blog sites will take care of this and render articles in some
sort of readable format for the device being used.</span></span></span><br />
<br />
<div class="MsoNormal">
<span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span lang="EN-US">I’d also consider sticking with a “big
player” for your blog site. I once went with a smaller, niche-player blog service who
subsequently decided to stop offering services and I had my site shut
down. The content wasn’t lost, as I was able to migrate to another site, but it
was nonetheless very annoying.</span><span lang="EN-US"> </span></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span style="font-size: small;"><span lang="EN-US">Longer term, you will probably want to host
your own web site if you get bitten by the blogging bug. But, my aim here is to
get you started…so, keep it simple and focus on the content, not worrying about making it look
pretty when starting out.</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<h3>
<span lang="EN-US">Bumps In The Road</span></h3>
<h3>
<span lang="EN-US"> </span></h3>
<h3>
<span lang="EN-US"></span></h3>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">By putting your content out there you are
performing a noble service to your fellow professionals and the many people out
there who are eager to learn. You are doing a very good thing that is to be
celebrated and congratulated.</span></span></span><span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">However…</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">There <u>will</u> be a few bumps in the
road. Some may be caused by yourself, and others are the result of some people
out there who obsessively have to nit-pick and find fault with everything they
read online (especially if they consider themselves some type of self-appointed
“expert”).</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">But, forewarned is forearmed. Be ready,
and look at ways to proactively mitigate some of the more common issues:</span></span></span></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><ul>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span><span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-style: normal; font-variant: normal; font-variation-settings: normal; font-weight: normal; line-height: normal;"></span></span><span lang="EN-US">Getting it wrong: we’re all
human…despite our best efforts, we sometimes get things wrong. I’ve certainly
had people provide feedback that some aspect of something I have written may be
factually incorrect. This is actually a <u>good</u> <u>thing</u>. My approach
is to verify the feedback for myself, thank the person and update my blog
article accordingly. When I’m in this situation, I will often give the person a
credit at the end of the article for their useful feedback. OK, it’s a dent in
your pride and can feel quite upsetting when you’ve spent all that time
lovingly crafting an article, but your post is now even better and has even
more value to the community. Be happy about that </span>😊</span></span></li>
</ul>
<ul>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">Check and check again: Its very
tempting to hit that “publish’ button as soon as you possibly can once you’ve
completed your latest masterpiece. But, take a breath and take your finger away
from that mouse. Have you <u>really</u> read that content through checking for
typos, grammatical errors and made sure you definitely took out that section
you weren’t initially too sure about? I am a firm believer in letting content
“rest”. Leave it a few days, and then come back and re-read it with fresh eyes
– you’ll be amazed how many mistakes you’ll pick up that you skimmed over the first
time around. This is a great technique if, like me, you don’t have anyone to
proof read your content. If you do happen to have a friend who offers to proof
read your articles, take them up on their offer! </span>😊<span lang="EN-US"><span> </span></span></span></span></li>
</ul>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><ul>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span><span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-style: normal; font-variant: normal; font-variation-settings: normal; font-weight: normal; line-height: normal;"></span></span><span lang="EN-US">Suggestions: You’ll often get
suggestions of how to improve or extend the content of an article you’ve
created. This may include some features or concepts of which you were unaware
when creating the article. Again, this can feel quite annoying when you’ve spent
many hours or days working on your content, only to be told that you’ve maybe
missed out some key information. I treat this very much like the “Getting it
wrong” scenario outlined above. Again, when you have the time, embrace the
feedback and improve your article with the additional material (assuming it is
correct, has merit and will embellish your article) </span></span></span></li>
</ul>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><ul>
<li><span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span><span style="font-feature-settings: normal; font-kerning: auto; font-language-override: normal; font-optical-sizing: auto; font-size-adjust: none; font-stretch: normal; font-style: normal; font-variant: normal; font-variation-settings: normal; font-weight: normal; line-height: normal;"></span></span><span lang="EN-US">Negative feedback: This is the
one most people dread, but to be honest it is incredibly rare in my experience.
You will get some people who will criticize everything from your grammar,
spelling, opinions, (supposed) incorrect use of acronyms and terms, article
length, article depth….the list goes on. This will often be abrupt, possibly
rude or wrapped in passive aggressive verbiage of some type. My advice is
simple: ignore and move on (easy to say…hard to do). <span> </span></span></span></span></li>
</ul>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<br /></div>
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;">
</span></span><div class="MsoNormal">
<span style="font-size: small;"><span style="font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;"><span lang="EN-US">Well, that’s all I’ve got for now on
blogging. I hope it’s been useful and will inspire you to try your hand at
sharing your experience and knowledge with the community.</span></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-3969294198835645992019-11-19T06:43:00.000+00:002019-11-22T08:33:41.241+00:00My favourite WinFi featuresEalier this year myself and a few other Wi-Fi pros were lucky enough to be asked to provide some input to a new Wi-Fi scanner application being created by <a href="https://twitter.com/helgekeck" target="_blank">Helge Keck</a>. He called the tool "WinFi" and has now released as a free tool for Windows 10.<br />
<br />
WinFi is a feature-packed application that has many pro-level functions that have quickly made it the Wi-Fi scanner of choice on Windows for many wireless LAN pros.<br />
<br />
I thought I'd take a few minutes to run through the operation of WinFi and highlight some of my favourite advanced features that you may not have seen yet within the application by creating the video below:<br />
<br />
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/n0iX5xzVuw8" width="560"></iframe>
<br />
<h3>
</h3>
<h3>
References</h3>
<ul>
<li><a href="https://www.helge-keck.com/" target="_blank">Application home page</a></li>
<li><a href="https://youtu.be/n0iX5xzVuw8" target="_blank">Video Link</a></li>
<li><a href="https://twitter.com/helgekeck" target="_blank">Helge Keck on Twitter</a> </li>
</ul>
WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-12833024202211494402019-11-16T06:32:00.000+00:002019-11-22T06:34:26.046+00:00Using the WLANPi as a wireless serial console<b>One lesser-known feature we added to the WLANPi image in v1.7 is Wi-Fi console that provides a wireless serial console. As this isn't too widely known, I thought I'd put a video together about it. </b><br />
<br />
The Wi-Fi console feature allows you to hook up a serial cable to the serial port of a piece of nework equipment, then get your WLANPi to broadcast out an SSID you can join from a nearby location.<br />
<br />
You can then fire up terminal emulation software on your laptop and access the serial port on the nework equipment from a more comfortable location.
Note this is a standard part of the WLANPi image since v1.7 - you do not need to install any additional packages, just follow the instructions in this video to flip your WLANPi in to Wi-Fi console mode.<br />
<br />
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/YwbL3D92LMw" width="560"></iframe>
<br />
<h3>
References </h3>
<ul>
<li><a href="https://www.blogger.com/%3Ciframe%20width=%22560%22%20height=%22315%22%20src=%22https://www.youtube.com/embed/YwbL3D92LMw%22%20frameborder=%220%22%20allow=%22accelerometer;%20autoplay;%20encrypted-media;%20gyroscope;%20picture-in-picture%22%20allowfullscreen%3E%3C/iframe%3E" target="_blank">YouTube Video</a></li>
<li><a href="https://github.com/WLAN-Pi/wconsole" target="_blank">GitHub repo & further information</a> </li>
</ul>
WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-39570842789246689482019-11-15T06:23:00.000+00:002019-11-22T06:23:41.582+00:00Understanding Wireless Client Throughput From a Wireshark CaptureI recently created a video to look at how we understand the data throughput of a wireless client from an over the air Wireshark capture. We take a look at using the I/O Graph feature in Wireshark to achieve this. <br />
<br />
You can view the video below:<br />
<br />
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/5X7i4Ci6aqE" width="560"></iframe>
<br />
References:<br />
<ul>
<li><a href="https://youtu.be/5X7i4Ci6aqE" target="_blank">YouTube video link</a></li>
<li><a href="https://www.youtube.com/redirect?q=https%3A%2F%2Fsupport.metageek.com%2Fhc%2Fen-us%2Farticles%2F115013527388-Wireshark-Configuration-Profile&v=5X7i4Ci6aqE&event=video_description&redir_token=Naey10YEmIl-H_e8BP5TUKX_X4V8MTU3NDQ4OTY0OEAxNTc0NDAzMjQ4" target="_blank">Metageek Wireshark profile </a></li>
</ul>
WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-25293618351179028582019-11-14T15:03:00.000+00:002019-11-14T15:12:07.159+00:00Wireshark Showing FCS Fields as "Unverified" in CapturesIn a recent Wireshark 3.0.6 capture I noticed that FCS values for captured wireless frames were showing as "Unverified". I wasn't sure why this was the case, as I'm sure that Wireshark usually shows a "good" or "bad" FCS indication. The image below demonstrates what I saw:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_AMzPt5Qx2MctK1h-gkBIv1asrjtAE3Jd5Xf5TtIWkuhoWJj95MedDbXV6DQe_zFymvCa4eC08MSijEq8jLYGCR9nyRuf6lv8cz4BHftLOwvVOEcudaBmghECUBzWBR4zmuX_F4ohOy2-/s1600/Capture1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1027" data-original-width="1258" height="522" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_AMzPt5Qx2MctK1h-gkBIv1asrjtAE3Jd5Xf5TtIWkuhoWJj95MedDbXV6DQe_zFymvCa4eC08MSijEq8jLYGCR9nyRuf6lv8cz4BHftLOwvVOEcudaBmghECUBzWBR4zmuX_F4ohOy2-/s640/Capture1.JPG" width="640" /> </a></div>
<div class="separator" style="clear: both; text-align: left;">
After some googling, I found a note that the FCS check was disabled by defaut in Wireshark 3.0.x as some NICs report the FCS check incorrectly. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The following process details how to re-enable the check: </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<ul>
<li>Go to Edit -> Preferences -> Advanced in Wireshark. Enter "wlan.check" in the search bar:</li>
</ul>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKGubk1MY0os2s_-3GAguo_0cRYwqK_bvQGgxyL9nqV1WKExhDyFtD8a2v1alfX2lG3BuXHVsosPUuAAm-9DEZy9MXgborn6ziSCXvu_uK0tRs19DZixR9Zy9hD0IccDf9wS3oGUCY00NF/s1600/Preferences.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1000" data-original-width="1357" height="470" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKGubk1MY0os2s_-3GAguo_0cRYwqK_bvQGgxyL9nqV1WKExhDyFtD8a2v1alfX2lG3BuXHVsosPUuAAm-9DEZy9MXgborn6ziSCXvu_uK0tRs19DZixR9Zy9hD0IccDf9wS3oGUCY00NF/s640/Preferences.JPG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Double click on the "False" word for the attribute "wlan.check_checksum". This will toggle it to "True" (make sure you click on the "False" word, not anywhere else on the line). </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYyB3wOAGYOAq0R8HbLK8wpHZJ5oCDuEkxcWYZ8nZs559S8XAuDOUvMOYY4anKLFad-I5zPxK99wTwSLiHVV6bsygnCw5GvbvOaJoVdwUfMuyYewYSM_gdk-uTJSqgqQ4nxRgTRP3zsEmk/s1600/Preferences2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1003" data-original-width="1359" height="472" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYyB3wOAGYOAq0R8HbLK8wpHZJ5oCDuEkxcWYZ8nZs559S8XAuDOUvMOYY4anKLFad-I5zPxK99wTwSLiHVV6bsygnCw5GvbvOaJoVdwUfMuyYewYSM_gdk-uTJSqgqQ4nxRgTRP3zsEmk/s640/Preferences2.JPG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Hit OK and see the change immediately in your capture decode:</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUYJuA3IQjNCOV6b58ViuZfliwg98XXGcQLFVl7jNCHaBLgdfd-8h5qCbTIpZ-3uvzqxhx3L5IusKZB0ZvsEYHWARfOaLbZMwMLnhLcp6kuXOYoBQq8YqWlRGttlkg5yI0kj2HwbeWUJdu/s1600/Capture2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1014" data-original-width="1228" height="528" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUYJuA3IQjNCOV6b58ViuZfliwg98XXGcQLFVl7jNCHaBLgdfd-8h5qCbTIpZ-3uvzqxhx3L5IusKZB0ZvsEYHWARfOaLbZMwMLnhLcp6kuXOYoBQq8YqWlRGttlkg5yI0kj2HwbeWUJdu/s640/Capture2.JPG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Hope this quick note may help someone in the future (...probably me when I've forgotten how I fixed this!)</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<h3 class="separator" style="clear: both; text-align: left;">
References:</h3>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li><a href="https://code.wireshark.org/review/#/c/28485/">https://code.wireshark.org/review/#/c/28485/</a></li>
<li><a href="https://ask.wireshark.org/question/12857/i-am-not-able-to-find-the-correctwrong-frame-check-sequence-in-wireshark-v302-all-it-show-is-unverified-how-do-i-find-the-wlanfcsstatus1-in-this/?comment=12872#post-id-12872">https://ask.wireshark.org/question/12857/i-am-not-able-to-find-the-correctwrong-frame-check-sequence-in-wireshark-v302-all-it-show-is-unverified-how-do-i-find-the-wlanfcsstatus1-in-this/?comment=12872#post-id-12872</a> </li>
</ul>
<br />WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-89643961855175460402019-11-03T18:54:00.000+00:002019-11-14T18:58:43.624+00:00Wireshark Plugin To Capture Wireless Frames Using a WLANPi (Windows 10)<div>
<b>Want to be able to capture wireless frames via a WLANPi using just Wireshark on your Windows 10 machine? ...And be able to configure the capture configuration on the WLANPi using just Wireshark too? Read on... (or checkout the video <a href="https://www.youtube.com/watch?v=VQx38OfPrKI" target="_blank">here</a>)</b></div>
<div>
<b><br /></b></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm8VOtTeOX_rmVtJUzfxuPuaLi6gslKN0Kes_C-ik12vhxb0AS61DFxwfUugOw5oVTewtjiUfhEeHM6xuLJQ1cnfd9mjmv1GxJj8KZVJW6RY1E3fHn37jAoT4khsG05vLDpUCtnDARVByM/s1600/wireshark_capture_tab.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="268" data-original-width="623" height="273" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm8VOtTeOX_rmVtJUzfxuPuaLi6gslKN0Kes_C-ik12vhxb0AS61DFxwfUugOw5oVTewtjiUfhEeHM6xuLJQ1cnfd9mjmv1GxJj8KZVJW6RY1E3fHn37jAoT4khsG05vLDpUCtnDARVByM/s640/wireshark_capture_tab.JPG" width="640" /></a></div>
<div>
<b><br /></b></div>
<div>
<br /></div>
Earlier this year, I put out a command-line script called <a href="https://github.com/WLAN-Pi/WLANPiShark2" target="_blank">WLANPiShark</a> that allowed Windows 10 users to configure a WLANPi and initiate a frame capture stream in to Wireshark. Though a little clunky, it worked quite reliably for most of the time and, judging by feedback I received, was quite popular.<br />
<div>
<br /></div>
<div>
As Windows users, we've always been the poor cousins to our Apple brethren who are able to use their Macbook to capture over the air using the internal NIC card of their Mac in monitor mode. Getting a low cost adapter that could be put in to monitor mode on a Windows machine was as rare as hen's teeth.</div>
<div>
<br /></div>
<div>
Having access to the WLANPi and being able to fire up WLANPiShark opened up wireless capturing to many folks who have to use Windows machines, but were unable to easily get a wireless capture (without investing in some quite expensive tools).</div>
<div>
<br /></div>
<div>
With the arrival of Wireshark 3.0.x, new options became available that allow us even better ways to capture in Windows using a WLANPi. <a href="https://www.wireshark.org/docs/man-pages/sshdump.html" target="_blank">SSHDump</a> was a newly introduced package that allows a easy method of initiating an SSH session in to a remote device and firing up commands to initiate a tcpdump capture stream (in a far less clunky way that we did in WLANPiShark).</div>
<div>
<br /></div>
<div>
<a href="https://www.adriangranados.com/" target="_blank">Adrian Granados</a> kicked off a project called <a href="https://github.com/adriangranados/wlan-extcap" target="_blank">wlan-extcap</a> on GitHub, based on a Python script, that leveraged the new SSHDump Wireshark package via a plugin that he created. It also added new functions directly it to the Wireshark GUI to allow configuration of a WLANPi (...yes, the guy's a genius coder!). The project was primarily aimed at Mac users, but could potentially be used by Windows users if they installed Python on their Windows machine.</div>
<div>
<br /></div>
<div>
Inspired by his amazing work on his project, I decided to take the principles of his project and write a similar utility written in native Windows batch-file format. This would allow Windows users to simply copy a batch file in to their Wireshark directory to obtain the same functions as Adrian's plugin and not have to worry about adding any supporting software packages.</div>
<div>
<br /></div>
<div>
The result is my own project called: <a href="https://github.com/wifinigel/wlan-extcap-win" target="_blank">wlan-extcap-win</a></div>
<div>
<br /></div>
<div>
Rather than documenting the plugin on my blog, I have created a fairly lengthy <a href="https://github.com/wifinigel/wlan-extcap-win/blob/master/README.md" target="_blank">ReadMe</a> on the GitHub site where the script has been developed so that you can download the script and give it a try.</div>
<div>
<br /></div>
<div>
I hope you find this just as much fun as WLANPiShark and even easier and more convenient to use.<br />
<br /></div>
<h3>
References</h3>
<div>
<ul>
<li>*** <a href="https://github.com/wifinigel/wlan-extcap-win" target="_blank">Plugin GitHub site</a> *** (this is what you're probably looking for)</li>
<li>Adrian's original <a href="https://github.com/adriangranados/wlan-extcap" target="_blank">wlan-extcap (Mac) project</a></li>
<li>Adrian Granados; web site: <a href="https://www.adriangranados.com/">https://www.adriangranados.com/</a></li>
<li><a href="https://www.wireshark.org/download.html" target="_blank">Wireshark 3.x.x</a></li>
<li><a href="https://www.wireshark.org/docs/man-pages/sshdump.html" target="_blank">SSHDump Man page</a></li>
</ul>
<div>
<br /></div>
</div>
<div>
<br /></div>
<div>
<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/VQx38OfPrKI" width="560"></iframe></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-36050783020789347432019-08-23T07:04:00.001+01:002019-11-22T06:24:55.420+00:00Wireless Analysis Resources<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI1Q7ezob4SFKr4Izfbz97LRV6RvG6nhrhicJXJ7xNgekYCGhWpYCxGTx81g6_1XcP2isXBUNnbKLVSEVkYZI8w-gQcva9N8Rl_D7YtT3R_-Y3wd0Cb7CAVlFzbrVW29yTxtwG0yVfXiYP/s1600/wireshark.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="729" data-original-width="1600" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI1Q7ezob4SFKr4Izfbz97LRV6RvG6nhrhicJXJ7xNgekYCGhWpYCxGTx81g6_1XcP2isXBUNnbKLVSEVkYZI8w-gQcva9N8Rl_D7YtT3R_-Y3wd0Cb7CAVlFzbrVW29yTxtwG0yVfXiYP/s640/wireshark.png" width="640" /></a></div>
Wireless traffic capture and analysis can be a tricky business and is often seen as something of a dark art to newcomers to the world of Wi-Fi. There are a huge variety of options when considering how to capture wireless traffic over the air, with many of the solutions being paid-for options that may be out of reach for many individuals.<br />
<br />
Many people approaching wireless analysis may already be familiar with Wireshark, based on their previous experience on wired networks, where they may have used it for troubleshooting and analysis purposes. They may wonder if they can use Wireshark for their initial foray into wireless analysis. Using Wireshark for wireless capture and analysis on Wi-Fi networks can be a little tricky and presents the newcomer with a whole new slew of frame types to learn.<br />
<br />
There are many good articles, videos and podcasts out there looking at wireless analysis, particularly if Wireshark is your tool of choice. I thought it would be good to pull them together in one place to make it easier for the newcomer to find the resources they may need. I've grouped together various resources below that will hopefully help those on their Wireshark/wireless analysis journey.<br />
<br />
Please let me know if you have other resources that you find or have found useful yourself (wifinigel@gmail.com)<br />
<br />
<h3>
Wireless Capture:</h3>
<ul>
<li>WiFiNigel - (Blog/Video) - <a href="https://wifinigel.blogspot.com/2019/11/understanding-wireless-client.html" target="_blank">Understanding Wireless Client Throughput From a Wireshark Capture </a></li>
<li>Eddie Forero - (Video) - <a href="https://youtu.be/7_-Xyd60j2s" target="_blank">Ep. 004: PCAP'n with Eddie! Multi Channel Wireless Packet Capture on the LINUX!</a></li>
<li>Eddie Forero - (Video) - <a href="https://www.youtube.com/watch?v=kDDjSsENTmA" target="_blank">Ep. 003: PCAP'n with Eddie! - Multi-channel Captures in Windows</a></li>
<li>WiFiNigel - (Blog) <a href="https://wifinigel.blogspot.com/2019/11/wireshark-plugin-to-capture-wireless.html" target="_blank">Wireshark Plugin To Capture Wireless Frames Using a WLANPi (Windows 10)</a></li>
<li>Adrian Granado - (GitHub) - <a href="https://github.com/adriangranados/wlan-extcap" target="_blank">Cross platform Wireshark plugin for Wireless Capture using a WLANPi (wlan-extcap)</a></li>
<li>Eddie Forero - (Video) <a href="https://www.youtube.com/watch?v=4ZBm37Bw3q8" target="_blank">Ep 001: PCAP'n with Eddie!: How to do a Wireless Packet Capture on the Mac</a></li>
<li>Eddie Forero - (Video) <a href="https://youtu.be/j4qozl-6jQk" target="_blank">Ep. 002: PCAP'n w/ Eddie! - Wireless packet capture on the Windows!</a> </li>
<li>Eddie Forero: (Blog) <a href="https://badfi.com/blog/2018/6/14/options-for-wireless-packet-capture-in-windows" target="_blank">Options for Wireless Packet Capture in Windows</a></li>
<li>WiFiHax: <a href="https://www.wifihax.com/blog/wireshark-30-raw-wireless-capture-in-windows" target="_blank">(Blog) Wireshark 3.0 - Raw Wireless Capture in Windows </a></li>
<li>WifiNigel: (Blog) <a href="https://wifinigel.blogspot.com/2013/11/what-are-radiotap-headers.html" target="_blank">What are Radio Tap Headers?</a> </li>
<li>WiFiNigel:(Blog) <a href="https://wifinigel.blogspot.com/2019/01/wlanpishark-wireless-capture-with.html" target="_blank">WLANPiShark: Wireless Capture With a WLANPi on Windows</a></li>
<li>WiFiNigel: (Blog): <a href="https://wifinigel.blogspot.com/2018/04/wireshark-capture-filters-for-80211.html" target="_blank">Wireshark Capture Filters for 802.11 </a></li>
<li>Revolution Wi-Fi: <a href="http://www.revolutionwifi.net/revolutionwifi/2011/05/wireshark-wlan-traffic-statistics-and.html" target="_blank">Wireshark WLAN Traffic Statistics and IO Graphs</a></li>
<li>SemFio Networks: (Blog): <a href="https://www.semfionetworks.com/blog/wireshark-most-common-80211-filters" target="_blank">Wireshark - Most Common 802.11 Display Filters</a></li>
<li>WLAN Pros: (Blog) <a href="https://www.wlanpros.com/resources/802-11-wireshark-filters-chart/" target="_blank">802.11 Wireshark Filters Chart</a> </li>
<li>Zeeshan Haider: (Blog) <a href="http://www.wifi-professionals.com/2019/03/wireshark-display-filters" target="_blank">Wireshark Display Filters</a> </li>
<li>WiFiNinjas: (Blog) <a href="https://wifininjas.net/index.php/2019/05/29/wn-blog-002-wireshark-filters/" target="_blank">Wireshark Filters</a></li>
<li>Packet-Foo: (Blog): <a href="https://blog.packet-foo.com/2019/04/wireless-capture-on-windows/" target="_blank">Wireless Capture on Windows</a> </li>
<li>Andrew McHale (Video): <a href="https://www.wlanpros.com/resources/voice-traffic-protocol-analysis-andrew-mchale-wlpc-prague-2018/" target="_blank">Voice Traffic Protocol Analysis</a> </li>
<li>Revolution Wi-Fi (Blog): <a href="https://www.revolutionwifi.net/revolutionwifi/2011/04/using-wireshark-coloring-rules-to.html" target="_blank">Using Wireshark Coloring Rules to Enhance Wi-Fi Protocol Analysis</a></li>
<li>Revolution Wi-Fi (Blog): <a href="https://www.revolutionwifi.net/revolutionwifi/2013/01/wi-fi-roaming-analysis-with-wireshark.html" target="_blank">Wi-Fi roaming analysis using Wireshark</a></li>
<li>Jim Vajda (Blog): <a href="https://framebyframewifi.net/2018/08/04/roaming-analysis-using-only-a-mac-and-wireshark/" target="_blank">Roaming Analysis using only a Mac and Wireshark</a> </li>
</ul>
<h3>
Wireshark Customization:</h3>
<ul>
<li>Eddie Forero:<a href="https://badfi.com/blog/2017/5/16/sharktip-1" target="_blank">(Video) SharkTIPS! My Favorite Wireshark Customizations (Part 1)</a></li>
<li>Eddie Forero: <a href="https://www.wlanpros.com/resources/wifishark-fu-eddie-forero-wlpc-phoenix-2019/" target="_blank">(Video) WiFiShark Fu | Eddie Forero | WLPC Phoenix 2019</a> </li>
<li>WiFiNigel: <a href="https://wifinigel.blogspot.com/2014/02/wlan-packet-capture-frame-colorization.html" target="_blank">(Blog) WLAN Packet Capture - Frame Colorization in Wireshark</a></li>
<li>WiFiNigel:<a href="https://wifinigel.blogspot.com/2017/05/wireshark-custom-columns-for-wireless.html" target="_blank">(Blog) Wireshark Custom Columns For Wireless Captures </a></li>
<li>Metageek/Joel Crane (Blog): <a href="https://support.metageek.com/hc/en-us/articles/204425074-Import-Eye-P-A-Coloring-Rules-for-Wireshark" target="_blank">Import Eye P.A. Coloring Rules for Wireshark</a></li>
<li>Metageek/Joel Crane (Blog): <a href="https://support.metageek.com/hc/en-us/articles/115013527388-Wireshark-Configuration-Profile" target="_blank">Wireshark Configuration Profile</a></li>
</ul>
<h3>
Wireless Analysis Podcasts:</h3>
<ul>
<li><a href="https://wifininjas.net/index.php/2019/08/04/wn-podcast-017-protocol-analysis-talk-with-peter-mackenzie-part-1/" target="_blank">WN Podcast 017 – Protocol Analysis Talk with Peter MacKenzie – Part 1 </a></li>
<li><a href="https://wifininjas.net/index.php/2019/08/18/wn-podcast-018-protocol-analysis-talk-with-peter-mackenzie-part-2/" target="_blank">WN Podcast 018 – Protocol Analysis Talk with Peter MacKenzie – Part 2</a></li>
<li> <a href="https://www.cleartosend.net/cts-047-troubleshooting-wifi-wireshark/" target="_blank">CTS 047: Troubleshooting WiFi With Wireshark</a></li>
</ul>
<h3>
CWAP Study Notes:</h3>
<ul>
<li>MRN-CCIEW: (Blogs): <a href="https://mrncciew.com/2014/10/04/my-cwap-study-notes/" target="_blank">My CWAP Study Notes </a></li>
<li>WiFiNigel: (Blog): <a href="http://wifinigel.blogspot.com/2017/02/cwap-study-notes-files.html" target="_blank">CWAP Study Notes Files</a> </li>
</ul>
<h3>
Books:</h3>
<ul>
<li><a href="https://www.amazon.co.uk/Certified-Wireless-Analysis-Professional-Official/dp/0470769033" target="_blank">CWAP Study Guide (Classic edition)</a> </li>
<li><a href="https://www.amazon.co.uk/CWAP-403-Certified-Wireless-Analysis-Professional/dp/172945948X" target="_blank">CWAP Study Guide (Current)</a> </li>
</ul>
<h3>
Paid-for Online Training:</h3>
<ul>
<li>(InformIT) <a href="http://www.informit.com/store/wireshark-for-wireless-lans-livelessons-9780134767536" target="_blank">Wireshark for Wireless LANs LiveLessons</a></li>
</ul>
<h3>
Online (Cloud) Capture Analysis Tools:</h3>
<ul>
<li>Arista Packets : <a href="https://packets.arista.com/">https://packets.arista.com</a></li>
</ul>
<ul>
</ul>
<ul>
</ul>
<ul>
</ul>
<br />
<br />
<br />WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-58171587419229916002019-06-11T14:35:00.000+01:002019-06-11T14:35:10.754+01:00Metageek Wi-Spy Air Review<b>In this article, I take a look at the recently released Metageek “Wi-Spy Air” wireless analysis module and its accompanying “Air Viewer” smartphone application. Metageek supplied me with a beta unit a couple of months ago to help with some initial testing of the product. I’ll take a look at some of the features of the product, together with some observations of my testing of the product to date.
</b><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH_EcQ5m-9FklsqSvQ0H1rgtNkfhO-nXiOPvEyi8d2lJQbpOlkYI9fRLDI-oKihQywsPQNgmo5jRn9ma5ghstbzOW8lGY1xTXxRImCkqSgQHGeP353POugeWauTDORUNkUOgPPsfqIveVV/s1600/image1.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="337" data-original-width="600" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH_EcQ5m-9FklsqSvQ0H1rgtNkfhO-nXiOPvEyi8d2lJQbpOlkYI9fRLDI-oKihQywsPQNgmo5jRn9ma5ghstbzOW8lGY1xTXxRImCkqSgQHGeP353POugeWauTDORUNkUOgPPsfqIveVV/s640/image1.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 1: Spectrum Analysis in Air Viewer (Smartphone (Landscape) Screenshot)</td></tr>
</tbody></table>
<h2>
Background</h2>
Having the right tool for the job when supporting Wi-Fi networks is essential. Those tools may come in many shapes and sizes, with each having its place depending on the task at hand.<br />
<br />
Whichever tool is chosen, it needs to be “professional” grade to ensure it can provide the depth and quality of data required to support the mission critical infrastructures that Wi-Fi networks have become. To date, professional wireless tools for both IOS and Android smartphones have been thin on the ground (in my experience), with many being few low-grade applications that offer rudimentary Wi-Fi scanning capabilities. This is, in part, due to the lack of access to Wi-Fi related data being available to software developers on both platforms.<br />
<br />
Given the fact that the majority of IT support staff will be equipped with a smartphone of some type, it makes a lot of sense to have an option that allows them to perform Wi-Fi network diagnostics using the smartphone in their pocket. Metageek have stepped in to this area of the market with their new Metageek “Wi-Spy Air” module and its accompanying “Air Viewer” smartphone application. The solution allows the Wi-Spy Air module to be plugged in to the smartphone lightning (Apple) connector or micro-USB (Android) connector and gather Wi-Fi “over-the-air” data, presenting it in the AirView smartphone app. And, by Wi-Fi data, we’re not talking just lightweight lists of SSIDs and signal level you might get off a freebie app store wireless scanner, this thing is pulling packets out of the air for analysis, as well as providing RF spectrum analysis data!<br />
<br />
<h2>
What Does The Wi-Spy Air Look Like?</h2>
Here’s a quick overview of the hardware: the Wi-Spy Air unit is a plastic moulded case with an external (detachable) antenna and a mini-USB connector to attach the cable that hooks up to the smartphone. A mini-USB to micro-USB cable is provided for Android phones/tablets, and a mini-USB to Lightning connector for Apple phones/tablets.<br />
<br />
The unit is self-powered by 4 x AA batteries, so that it won’t drain your phone battery. They probably account for around 50% of the unit’s size.<br />
<br />
The images below provide an overview of the physical aspects of the Wi-Spy unit:<br />
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9unW1WSJivkRvjMOjXFHheO9Eov35AImu8Ou84MfLNR8EhCo34npApMW3dZEswDqKrqAGkbHyjYIUP6qdgjD3w4Em7It7fFCET0zX1bKWn1w3qpsW9P5aydHd5sOB0YuGiFDJ9DUWdEqm/s1600/image2.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="300" data-original-width="500" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9unW1WSJivkRvjMOjXFHheO9Eov35AImu8Ou84MfLNR8EhCo34npApMW3dZEswDqKrqAGkbHyjYIUP6qdgjD3w4Em7It7fFCET0zX1bKWn1w3qpsW9P5aydHd5sOB0YuGiFDJ9DUWdEqm/s400/image2.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 2: Wi-Spy Air Component Parts</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh09hLLPCgFT7_HrOTSCYXorrPM3_2P9tOsvwTpTYvnA63W_caHsTsuRplq4nnVw2EytJ35a-rEGjkzy8ZFHg0V4lGldSRG0HpqT19PskGUkyEoqIYcBtfavA2XK7l9U7IsSe8SH63K3iQ1/s1600/image3.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="275" data-original-width="500" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh09hLLPCgFT7_HrOTSCYXorrPM3_2P9tOsvwTpTYvnA63W_caHsTsuRplq4nnVw2EytJ35a-rEGjkzy8ZFHg0V4lGldSRG0HpqT19PskGUkyEoqIYcBtfavA2XK7l9U7IsSe8SH63K3iQ1/s400/image3.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 3: Wi-Spy Air Battery Compartment</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBdZhTjSIJg9Qb0W-ff8cNegxowVUGht7IVWd2cZYi_R5y6x5fxd2faWqzP0zU8XgWq1EWb7hTv7mbmahBml7H9Aou3YPBxHzSUQUydmloTd7SYsAe-peIow164ed7XnQ-n92yRX6Q7qep/s1600/image4.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="306" data-original-width="500" height="243" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBdZhTjSIJg9Qb0W-ff8cNegxowVUGht7IVWd2cZYi_R5y6x5fxd2faWqzP0zU8XgWq1EWb7hTv7mbmahBml7H9Aou3YPBxHzSUQUydmloTd7SYsAe-peIow164ed7XnQ-n92yRX6Q7qep/s400/image4.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 4: Wi-Spy Air Hooked Up To Android Phone (Samsung S7)</td></tr>
</tbody></table>
<br />
The Wi-Spy Air unit has no on/off switch, it simply needs to be connected to the smartphone to activate it. There is a red LED that illuminates on the unit to indicate it is active. On my Android phone, the Air Viewer app automatically launches as the Wi-Spy Air is plugged in to the phone (I have not tested the Apple version of the app).<br />
<br />
<h2>
What Does The Air Viewer App Look Like?</h2>
Once the Wi-Spy Air is connected to a smartphone the Air Viewer App provides visibility of the data it collects. The interface is simple to use and initially looks pretty much like your average Wi-Fi scanner app. But, don’t be fooled, it actually gives access to very detailed information about both wireless networks and clients. Due to the limited real-estate of the smartphone or tablet screen, it relies on scrolling and drilling down from screen to screen to reveal the true depths of detailed network data it collects. It took me some time to get used to using it as I’m so used to laptop-based apps, but I was impressed with the detailed data available once I started digging around and became familiar with the app navigation.<br />
<br />
At the bottom of each screen is a navigation bar to access the 3 main app areas:<br />
<br />
<ul>
<li>Networks : the Wi-Fi scanner (on steroids) showing SSID details</li>
<li>Channels: the spectrum analysis area (with network a details overlay if required)</li>
<li>Setup: stop/start, channel selection & scan rates</li>
</ul>
<br />
We’ll take a quick look at each of these areas below:<br />
<br />
<h3>
Networks</h3>
On the face of it, the “Networks” area is a simple Wi-Fi scanner application. It scans the bands configured in the “Settings” section (both 2.4 & 5GHz are supported) and shows the familiar channel occupancy of various SSIDs overlaid on each channel. However, thanks to the Wi-Spy Air module, this is far more sophisticated than a simple Wi-Fi scanning app. The Wi-Spy Air module performs the channel scanning, rather than relying on the Wi-Fi chipset of the phone. It has the capability to capture and decode 802.11 frames, which provides far deeper analysis capabilities than a simple smartphone scanner.<br />
<br />
Scrolling down, an information panel for each SSID is shown, showing summary details for each one. By tapping the panel, all instances of the selected SSID are highlighted in the spectrum display - the example below shows my home SSID highlighted, with 3 BSSIDs shown:<br />
<div>
<br /></div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqaQGsZ_hXT-FHhn77c9lEI_vnvLCsEVtmmb1C9tfq-N1nPmwaRuQVJ2gcQgI3ctE9pQSxgyxCcawFF5k4oHKnEdb8aZLCedjwLqx4p5vf2bIqLyib0sXmFN_ze3H1jh6-wsvScU5nI_7y/s1600/Image5.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="711" data-original-width="400" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqaQGsZ_hXT-FHhn77c9lEI_vnvLCsEVtmmb1C9tfq-N1nPmwaRuQVJ2gcQgI3ctE9pQSxgyxCcawFF5k4oHKnEdb8aZLCedjwLqx4p5vf2bIqLyib0sXmFN_ze3H1jh6-wsvScU5nI_7y/s400/Image5.jpg" width="225" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 5: Air Viewer > Networks tab with my home network selected</td></tr>
</tbody></table>
<br />
Each SSID allows a drill-down to reveal more detail about the underlying BSSIDs and clients. Drilling down into the SSID shown above reveals a wealth of information, including security methods, client counts, PHY types and BSSID summary information:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8qveliNBsOt_RmZhPlSgDwlZ3EX8_Mu7QJRZ-ppLBbeAiBzIxW6dBAjNYz34uWAM_ITwzkEGtDk8gd1DZlgQn1RdBWUDj5WLHYXCNftrukRdTWz3odN2Ft5D1fbNQupf9rLOHpumbNFXx/s1600/Image6.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="711" data-original-width="400" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8qveliNBsOt_RmZhPlSgDwlZ3EX8_Mu7QJRZ-ppLBbeAiBzIxW6dBAjNYz34uWAM_ITwzkEGtDk8gd1DZlgQn1RdBWUDj5WLHYXCNftrukRdTWz3odN2Ft5D1fbNQupf9rLOHpumbNFXx/s400/Image6.jpg" width="225" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 6: Air Viewer > Networks tab > drill down in to my home network</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR-0YgAG2JP9sDI4twljKG3KHsgOPRmhrt3CSRxCzKymu-z0NlP8XT6shA46C7XAanmxChQuXkW4GoPlJ_aTJFmMyOtrDcB5aU_gJ1rp9PDTxYBM7ZJYV_AsypeedUGbZM6zpkJHb9H9hD/s1600/Image7.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="711" data-original-width="400" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR-0YgAG2JP9sDI4twljKG3KHsgOPRmhrt3CSRxCzKymu-z0NlP8XT6shA46C7XAanmxChQuXkW4GoPlJ_aTJFmMyOtrDcB5aU_gJ1rp9PDTxYBM7ZJYV_AsypeedUGbZM6zpkJHb9H9hD/s400/Image7.jpg" width="225" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 7: Air Viewer > Networks tab > scroll down to BSSID summary of home network</td></tr>
</tbody></table>
<br />
Drilling down in to one of the BSSIDs starts to show the real power of the app and the depth of the collected data.<br />
<br />
In addition to the usual suspects of BSSID MAC, security method, channel details, PHY type etc., we also get access to data that relies on frame analysis. Details such as retry rates, channel utilization, client counts and even AP names are made available if present in the 802.11 beacon frames. The screenshot below shows the BSSID data available. It’s also good to see an SNR value shown - another value you won’t see in a standard scanner app:<br />
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis6hut0Mrd0MyXAzzVAGS2134WYQAm1N5TqGEEY7PDvdrAUoejvDTBRylo5RTJaklB1oo5zu9GGLJGuOHFaFm6PxFicdGhsFU27017Yy5BPB8TJGog-h5f3VuBzW57advCTxfGGArg1m9k/s1600/Image8.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="711" data-original-width="400" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis6hut0Mrd0MyXAzzVAGS2134WYQAm1N5TqGEEY7PDvdrAUoejvDTBRylo5RTJaklB1oo5zu9GGLJGuOHFaFm6PxFicdGhsFU27017Yy5BPB8TJGog-h5f3VuBzW57advCTxfGGArg1m9k/s400/Image8.jpg" width="225" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 8: Air Viewer > Networks tab > drill down in to BSSID</td></tr>
</tbody></table>
<br />
Once you’ve looked through the BSSID data, you can scroll down to see the clients that have been detected as associated with the BSSID. This is an amazing level of detail for a smartphone app, which, again, relies on the 802.11 frame decode capabilities that the Wi-Spy Air provides. A high level summary of the clients is initially shown, with the option to drill down. Note that this summary includes client utilization and retry information to highlight potential problem clients:<br />
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5uft0RcDwTVkMhaJM3j___mXzGRvwzB2C5a3pPqSp3rMVTLiZ90CiKJzybAxZHLzW3mE2pQ5vDvmWPZ-K0g6jIg9qAk9LNY1iB892m-5DFc4nwKGnF3nJQ18Nf3npfBC04HCtTUPzbDQw/s1600/Image9.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="711" data-original-width="400" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5uft0RcDwTVkMhaJM3j___mXzGRvwzB2C5a3pPqSp3rMVTLiZ90CiKJzybAxZHLzW3mE2pQ5vDvmWPZ-K0g6jIg9qAk9LNY1iB892m-5DFc4nwKGnF3nJQ18Nf3npfBC04HCtTUPzbDQw/s400/Image9.jpg" width="225" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 9: Air Viewer > Networks tab > drill down in to BSSID, scroll down to clients</td></tr>
</tbody></table>
<br />
Each client has the option to drill down even further to reveal client-specific detail including the AP it is connected to (if its name is broadcast by the AP), its signal level (observed from the Wi-SPy Air), manufacturer, phy type, retry rate and utilization. A summary of the client’s roaming history is also shown by the Air Viewer app:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKHW9MGNeZ573nkLl0PAln20dwelavQzW4BJRoyDqQWO8dNQ78nnF9jNRuUY0e8UHTW7fgKGKhzaBPByCvf_M0KR0pI8KUQc3KlJdYo7TovUVyjhjusn4wfCRWTdUfe55V06RJ0FTDCVKS/s1600/Image10.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="711" data-original-width="400" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKHW9MGNeZ573nkLl0PAln20dwelavQzW4BJRoyDqQWO8dNQ78nnF9jNRuUY0e8UHTW7fgKGKhzaBPByCvf_M0KR0pI8KUQc3KlJdYo7TovUVyjhjusn4wfCRWTdUfe55V06RJ0FTDCVKS/s400/Image10.jpg" width="225" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 10: Air Viewer > Networks tab > drill down in to BSSID, drill down to specific client</td></tr>
</tbody></table>
<h3>
<br /></h3>
<h3>
Channels </h3>
The “Channels” area of the app is where we see the spectrum analysis capabilities provided by the Wi-Spy Air. For those less familiar with spectrum analyser tools, the role of this tool is to report the levels of RF energy detected across the Wi-Fi bands. It’s job is not to collect and decode Wi-Fi (802.11 frames), but to detect raw RFenergy. This is the only way to detect if your Wi-Fi network is suffering interference from non-Wi-Fi RF sources, which can be very disruptive to Wi-Fi network performance.<br />
<br />
A spectrum analyser is an essential tool for maintaining Wi-FI networks and definitely falls into the “professional level tool” category. This functionality is only provided by specialist wireless tools - the existing Metageek Chanalyzer/DB3 solution for Windows provides similar functionality.<br />
<br />
When the “Channels” area is selected, the Wi-Spy Air scans the band selected to show the RF energy levels across that band. Wi-Fi networks detected by Wi-Spy Air can be turned on or off as an overlay via the “Networks On” button. This can provide some context for the RF energy levels observed by the spectrum analysis scanning. The spectrum plot itself is shown as a spectrum density graph, with the colouration of the plot indicating the relative utilization level across each part of the band. As the level of RF airtime occupancy rises, the colours change from a “background/low ” level of purple through to green, yellow and red to indicate increasing density (and possibly interference for non-Wi-Fi sources).<br />
<br />
The screenshot below shows the 2.4Ghz band with low levels of spectral activity and channel 6 highlighted in the networks overlay:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv0UfwLcXqSSSz7ALPpZxioa3-Dat_zQ4UkZCRYySF5F_z7HSReobj8PD12tVk2qXU3OSfH9VLhEK1jwGIbShrVeq3tkFGLpI-D_Fk1yrZIpw61IVsFlNO9MWeMlIUrQ16FC9EsX6xz1V0/s1600/Image11.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="711" data-original-width="400" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv0UfwLcXqSSSz7ALPpZxioa3-Dat_zQ4UkZCRYySF5F_z7HSReobj8PD12tVk2qXU3OSfH9VLhEK1jwGIbShrVeq3tkFGLpI-D_Fk1yrZIpw61IVsFlNO9MWeMlIUrQ16FC9EsX6xz1V0/s640/Image11.jpg" width="360" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 11: Air Viewer > Channels tab > select a specific channel (6)</td></tr>
</tbody></table>
<br />
To show the impact of an interfering device, I fired up a cheap 2.4Ghz video camera near to my laptop and the Wi-Spy Air. The resulting spectrum plot is shown in the screenshot below. Note the waveform with 3 peaks that indicates the area of 2.4Ghz affected by this interferer. Also, note the red colouration due to the high duty cycle of the interfering device. For anyone investigating wireless network issues, this would be invaluable information:<br />
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWEF65sSo0mIS__GBse3IbgHoVEYxWa2FSpTNe28fusiGFsej8YQSCZYTt7iMekFOjwVENDpdqz0nVMCHkSaVQwXD60GoLJoJoUvC47s51cYyNIjmo8olCzegeMSPJKIwFBSAzWbfCr3Wg/s1600/Image12.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="450" data-original-width="800" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWEF65sSo0mIS__GBse3IbgHoVEYxWa2FSpTNe28fusiGFsej8YQSCZYTt7iMekFOjwVENDpdqz0nVMCHkSaVQwXD60GoLJoJoUvC47s51cYyNIjmo8olCzegeMSPJKIwFBSAzWbfCr3Wg/s640/Image12.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 12: Air Viewer > Channels tab > video camera interferer</td></tr>
</tbody></table>
<br />
In addition to detecting interferers, a spectrum analyser may be used to indicate areas where Wi-Fi networks may be causing higher levels of spectrum utilization (which may be an indicator of capacity issues). In the next example, I associated my laptop with an AP on channel 11. The SSIDs on channel 11 are highlighted below by selecting the channel in Air Viewer:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM14YRIHZUSGuEELbh_GOYOiwszURZXKCY_biKJ5aZx8XUVbNn9L-6zXdUY6PBpVW4vlD9hZhyphenhyphenNlBcKHo5l6YMDNiMPbe3WcssyaSLo-e1Xm9i-S_1I5zX4raxXVBqwtv5E7LmfSLfroJr/s1600/Image13.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="450" data-original-width="800" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM14YRIHZUSGuEELbh_GOYOiwszURZXKCY_biKJ5aZx8XUVbNn9L-6zXdUY6PBpVW4vlD9hZhyphenhyphenNlBcKHo5l6YMDNiMPbe3WcssyaSLo-e1Xm9i-S_1I5zX4raxXVBqwtv5E7LmfSLfroJr/s640/Image13.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 13: Air Viewer > Channels tab > channel 11 selected to show SSIDs</td></tr>
</tbody></table>
<br />
Next, I fired up a speed test on my laptop to generate some Wi-Fi traffic on channel 11 and observed the change in spectral density on Air Viewer that was reported by the Wi-Spy Air. You can see the green and yellow colouration that resulted from the increase in traffic (and hence airtime/spectral density) on channel 11:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqYGcd7st8gyqDWJDWkYiGW78uu1VStYZyfhOQXAG67dieG5-2_Agjz8Ud-T8BnzrUWxTvLi2UJZ-6qCO1Cdb2Q45yzOtbldXidoRX8SsYczN7o0eG4YOmT3fem2WkAnVam_gCdibelFxt/s1600/Image14.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="450" data-original-width="800" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqYGcd7st8gyqDWJDWkYiGW78uu1VStYZyfhOQXAG67dieG5-2_Agjz8Ud-T8BnzrUWxTvLi2UJZ-6qCO1Cdb2Q45yzOtbldXidoRX8SsYczN7o0eG4YOmT3fem2WkAnVam_gCdibelFxt/s640/Image14.jpg" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 14: Air Viewer > Channels tab > client running a speedtest on channel 11</td></tr>
</tbody></table>
<br />
As well as the spectrum plots discussed above, it is also possible to observe much of the SSID/BSSID/Client information that is presented in the Networks section of the app. This is achieved by scrolling down to the channel summaries below the spectrum plots shown above.<br />
<br />
<h3>
Settings</h3>
The settings areas provides simple controls to allow control of channel scanning of Wi-Spy Air and adjustment of scan rates. A sample screenshot is shown below.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibEdSWifrmml_5Z6uw8RyXwAYIFfAeei7bfK3Br8fq4Fas-2tSexUZzWNs6q_VQ2qq0yfLCIBq8sKRMsA0KtztDNmIXsBEZy-f8hUYXc8Zh_g0Kq23jz9gXxiPpzaBZwDnEVWxJViOqpf1/s1600/Image15.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="711" data-original-width="400" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibEdSWifrmml_5Z6uw8RyXwAYIFfAeei7bfK3Br8fq4Fas-2tSexUZzWNs6q_VQ2qq0yfLCIBq8sKRMsA0KtztDNmIXsBEZy-f8hUYXc8Zh_g0Kq23jz9gXxiPpzaBZwDnEVWxJViOqpf1/s400/Image15.jpg" width="225" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Fig 15: Air Viewer > Settings tab</td></tr>
</tbody></table>
<h2>
Conclusion</h2>
I think I have been guilty of initially underestimating this product. My initial impressions were based on the (incorrect) assumption that it was similar to a basic Wi-Fi scanner app with maybe a little spectrum analysis thrown in for good measure. I’m also guilty of looking at this through the eyes of someone who has been a long-time user of a variety of laptop spectrum analyser tools, with their larger screen real-estate and a variety of supporting hardware platforms.<br />
<br />
As I said at the beginning of this article, maintaining Wi-Fi networks requires professional level tools. This is a professional level tool. Metageek have succeeded in packing a lot of functionality in to a small package that provides the convenience of both detailed Wi-Fi network analysis, together with spectrum analysis, and making it available via a smartphone app.<br />
<br />
In my opinion, the obvious sweet spot for this product is going to be for organizations who have technicians who need a device that can provide detailed diagnostic information in a small, convenient form factor. Obvious sectors would be service providers and large Enterprises who may have teams of technicians covering a number of technology areas who need to convenience of whipping out a small device from their toolbox and hooking it up to their phone to perform detailed wireless diagnostics.<br />
<br />
I can also see the smaller form factor of the Wi-Spy Air being useful in some instances for Wi-Fi pros too. Occasionally, we all hit those instances where we have to travel uber-light, enter areas where laptops may not be allowed or just want to have a device to give to a colleague to “go get some data”. On those occasions, the Wi-Spy Air could be very useful.<br />
<br />
Apart from the features I’ve seen and tested to date, I know that this is an evolving product. Given its already-impressive capabilities, I can imagine some exciting times ahead for this product. I would hope, at some stage, to see some type of reporting or data export capabilities, which raises all sorts of fascinating remote support options. Also, given the data that could be derived from the obvious frame capture capabilities of Wi-Spy Air, there is scope to provide even richer app information.<br />
<br />
I think this tool is going to be well placed in a market segment that is almost certain to see continuing growth. I look forward to seeing the evolution of this innovation from Metageek.<br />
<br />
<h2>
References</h2>
List of references from this article & further reading:<br />
<br />
<ul>
<li><a href="https://www.metageek.com/products/wi-spy-air" target="_blank">Metageek Wi-Spy Air product page</a></li>
<li><a href="https://www.wlanpros.com/resources/179-brian-tuttle-of-metageek-introduces-wi-spy-air/" target="_blank">WirelessLan Pros Podcast 179 : Brian Tuttle of Metageek Introduces Wi-Spy Air</a></li>
<li><a href="https://it.toolbox.com/blogs/leebadman/metageek-introduces-its-latest-wlan-tool-the-wi-spy-air-051719" target="_blank">Metageek Introduces Its Latest WLAN Tool: The Wi-Spy Air (Lee Badman)</a></li>
</ul>
<br />
<h2>
Notes</h2>
<br />
<ul>
<li>The screenshots in this article were taken in May 2019 using a Samung S7 (Android) smartphone. The layout and content of the Air Viewer app is likely to change over time and between device types.</li>
<li>The review unit and application were provided to me free of charge by Metageek for support of their beta program. I have no commercial arrangement with Metageek for this article and am under no obligation to provide any opinions other than my own.</li>
</ul>
<br />
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-49878014369496289882019-01-04T17:04:00.003+00:002019-01-04T17:06:06.118+00:00The Windows WMM User Priority Issue - A Fix?<b>There is a known issue with Windows clients when it comes to marking applications for QoS over wireless. In short, even if a Windows client application is configured to use DSCP 46 (EF), for example to mark voice traffic, it will translate this over the air to to use a layer 2 UP value of 5, rather than 6. This means that it will end up in the Video WMM queue rather than the Voice queue that we’d like. This has an impact on traffic prioritization over the air and could have a negative impact on our high priority traffic. This has been an issue that people have just “lived with” for quite a while, but I suspect there is a solution to this issue. I’m “putting this out there” for feedback as I can’t find any information about others using this technique. I’d like feedback from my peers to understand if the approach is viable or anyone else has used/tried it
</b><br />
<br />
<h2>
Background</h2>
Generally in my articles, I like to provide plenty of background information about a topic to encourage others to research and learn. But, in this instance, I’ll get straight to the point as there is too much ground to cover. If you’d like to know more about this topic, then please have a look at the following references:
<br />
<br />
<ul>
<li>Cisco Enterprise Mobility Design Guide: <a href="https://www.cisco.com/c/en/us/td/docs/wireless/controller/8-5/Enterprise-Mobility-8-5-Design-Guide/Enterprise_Mobility_8-5_Deployment_Guide/ch5_QoS.html#pgfId-1022028">https://www.cisco.com/c/en/us/td/docs/wireless/controller/8-5/Enterprise-Mobility-8-5-Design-Guide/Enterprise_Mobility_8-5_Deployment_Guide/ch5_QoS.html#pgfId-1022028</a></li>
<li>QoS Design and Deployment for Wireless LANs: <a href="https://ciscolive.cisco.com/on-demand-library/?search=QoS&search.solutions=scpsSolutions_mobility#/video/1533846601968002DwJy">https://ciscolive.cisco.com/on-demand-library/?search=QoS&search.solutions=scpsSolutions_mobility#/video/1533846601968002DwJy</a> (login required) </li>
<ul>
<li>Slide-deck: <a href="https://clnv.s3.amazonaws.com/2018/usa/pdf/BRKRST-2515.pdf">https://clnv.s3.amazonaws.com/2018/usa/pdf/BRKRST-2515.pdf</a> (see slide 47)</li>
</ul>
</ul>
The issue is shown on slide 47 of the presentation from Cisco Live referenced above:
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS7vtiGcASmnf-BOa3pHztV9QAY9IMshd6OX9XL4CDmHykV8JqEJ8Rkm33GLeGF0LiN4TX9VlYOhmh_MS_IImsGJIyDyZOgnerMJkf1_X_RxIQCTDdc9QIWx8F8RwnuArufmlTHHGV4Tm0/s1600/Microsoft-WMM-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="672" data-original-width="1195" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS7vtiGcASmnf-BOa3pHztV9QAY9IMshd6OX9XL4CDmHykV8JqEJ8Rkm33GLeGF0LiN4TX9VlYOhmh_MS_IImsGJIyDyZOgnerMJkf1_X_RxIQCTDdc9QIWx8F8RwnuArufmlTHHGV4Tm0/s640/Microsoft-WMM-1.png" width="640" /></a></div>
<br />
As you can see, Microsoft translate the 3 most significant bits of the DCSP value in to a UP value of 5, which means that packets that are correctly marked with DCSP for EF end up in the WMM video queue, rather than the voice queue. The slide below (also borrowed from the same presentation) demonstrates the point (hopefully my friends at Cisco will excuse this liberty I'm taking with their content):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOrDoAlR4q2MHeoFIJrhba5uXoQk_K4PO-nxyg3GtG6qVM1jzXUAyuBzuxQ9hf-xUrQoIOSq86l9gHto_DW5IgXginzq4cj72_0j98mWa8hmCWSUXJBLm-8tcSAqw8L_G6GTmvIwtXJmE0/s1600/Microsoft-WMM-7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="669" data-original-width="1188" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOrDoAlR4q2MHeoFIJrhba5uXoQk_K4PO-nxyg3GtG6qVM1jzXUAyuBzuxQ9hf-xUrQoIOSq86l9gHto_DW5IgXginzq4cj72_0j98mWa8hmCWSUXJBLm-8tcSAqw8L_G6GTmvIwtXJmE0/s640/Microsoft-WMM-7.png" width="640" /></a></div>
<br />
<br />
This means that both voice and video traffic (marked with DSCP 46 and 34 respectively) end up in the same WMM queue over the air from the client to an access point. Ideally, we want traffic marked with DSCP 46 to end up in the WMM voice queue and traffic marked with DSCP 34 to end up in the WMM video queue. But, this doesn’t happen by default when assigning QoS marking via the group policy editor
<br />
<br />
<h2>
QoS Marking Tests
</h2>
<br />
<h3>
Application Marking With Group Policy Editor
</h3>
<br />
The traditional method of marking applications with QoS is to use the Windows group policy editor. I 'll run through a basic example to show the process and result. However, note that the settings shown are definitely not what you would use in production. I’ll mark all Skype traffic from my laptop to send with DSCP value 46. In the real world, voice, video signalling etc. would be marked individually, so don't take this as a config to use in the real world.
<br />
<br />
I’ll then make a test voice call and capture a data frame that contains a Skype packet. I’ll also use an open SSID so that we can see both layer 2 & layer 3 decodes.
<br />
<br />
Here is the policy in the Group Policy Editor, showing the QoS policy:
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2PJ9HlZ1XDsLoisMluOPNZsfqh6sHy4ReJLBptwt3kAYm3W74Bhnl9ZoA95uGjzilTUDR09_FjvXVsstTwlvXXDutdikCuP71gbpS54gHlxEyhC4Q_CHVn5U8B1lcytiK4oz8JLt7oWF4/s1600/Microsoft-WMM-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="587" data-original-width="1533" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2PJ9HlZ1XDsLoisMluOPNZsfqh6sHy4ReJLBptwt3kAYm3W74Bhnl9ZoA95uGjzilTUDR09_FjvXVsstTwlvXXDutdikCuP71gbpS54gHlxEyhC4Q_CHVn5U8B1lcytiK4oz8JLt7oWF4/s640/Microsoft-WMM-2.png" width="640" /></a></div>
<br />
Here is the resulting Skype packet showing the layer 2 priority 5 marking, together with the layer 3 DSCP marked (as expected) with EF. As mentioned previously, note that the layer 2 marking is using UP 5, so will be using the video WMM queue over the air, rather than the voice WMM queue we’d like to use:
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSBfkMKtp1aSA7tpeAjfO9cU_tmSoUYZTfjhLH3zIEg0__uQHOWY1xhf2A_iB1kzJ9GifAV6AZHsgn-qnQIbbTUK5hDLtYr_P5i3zK3dKttVMmMgqA54hCMQYbgtOQsPrDlp6EeqTax2cM/s1600/Microsoft-WMM-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="750" data-original-width="1600" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSBfkMKtp1aSA7tpeAjfO9cU_tmSoUYZTfjhLH3zIEg0__uQHOWY1xhf2A_iB1kzJ9GifAV6AZHsgn-qnQIbbTUK5hDLtYr_P5i3zK3dKttVMmMgqA54hCMQYbgtOQsPrDlp6EeqTax2cM/s640/Microsoft-WMM-3.png" width="640" /></a></div>
<br />
<br />
<h3>
Application Marking With Powershell
</h3>
<br />
Ok, now to get to point of this blog article…
<br />
<br />
If we repeat the previous exercise, but this time set the QoS policy via Powershell, we can actually specify the layer 2 QoS marking that we actually want (i.e. set it to 6).
<br />
<br />
This is achieved by using the command “New-NetQosPolicy” in a Powershell console on your Windows laptop. Note that you need to run the command in a Powershell console opened as an administrator.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibvuG8qWw3ikOlYHZJI4rIOPDhMWDm8r04QnWkHLd0ovzSv-uvVEhlXOIqVHkfHoxBcEqraWcOXd6yixWX2p-lcGasGfr6H87kgStIQnE8YVavddUXWjJU5ejNuiIc59FZofga2J0PXIvx/s1600/Microsoft-WMM-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="796" data-original-width="1538" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibvuG8qWw3ikOlYHZJI4rIOPDhMWDm8r04QnWkHLd0ovzSv-uvVEhlXOIqVHkfHoxBcEqraWcOXd6yixWX2p-lcGasGfr6H87kgStIQnE8YVavddUXWjJU5ejNuiIc59FZofga2J0PXIvx/s640/Microsoft-WMM-4.png" width="640" /></a></div>
<br />
Note that we have now removed our original QoS Policy applied via the Group Policy Editor (see screenshot above)<br />
<br />
Here is the syntax required, together with a screenshot of the command being applied in Powershell:
<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">New-NetQosPolicy -Name "Skype" -AppPathNameMatchCondition "Skype.exe" -DSCPAction 46 -PriorityValue8021Action 6
</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNDoqJXL3eD9x_KVD2CmwWR6cJf1cUBHjbDKWxD8MNEw88oto9cBZKepFkhWvOpzxKyiuP75QkyXTDD7BfnHSicL3eXl9BfKOXNGckMwNDImemZF5nq-eCqmx51xMrHjw9n4oTo4rYXVi1/s1600/Microsoft-WMM-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="672" data-original-width="1408" height="304" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNDoqJXL3eD9x_KVD2CmwWR6cJf1cUBHjbDKWxD8MNEw88oto9cBZKepFkhWvOpzxKyiuP75QkyXTDD7BfnHSicL3eXl9BfKOXNGckMwNDImemZF5nq-eCqmx51xMrHjw9n4oTo4rYXVi1/s640/Microsoft-WMM-5.png" width="640" /></a></div>
<br />
<br />
One point to note here is that when applying policy by this method, it is not shown in the policy configuration of the Group Policy Editor.The only way to check the applied QoS policy is to the use the “Get-NetQosPolicy” in a Powershell console on the Windows machine.
<br />
<br />
Now, if we look at the Skype packets from my laptop during a test call, we see that layer 3 is still marked with EF, as expected, but layer 2 is now marked with UP 6. This means that our traffic will use the correct WMM queue (i.e. the voice queue) over the air.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpOx5ROoMKOqYkxMXFdoNYyf_RjWaBnJZ8DpVWbnUBVyw4_9nrvQKXgmvhegEiYaTBnhNCrzhiJyqKc0VMPlYfPgw_Yf2wbQJjWw0gNZ0zbk4Bws7EMNr3GbErxK02zQ8NcNXRqx8vxvzm/s1600/Microsoft-WMM-6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="752" data-original-width="1600" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpOx5ROoMKOqYkxMXFdoNYyf_RjWaBnJZ8DpVWbnUBVyw4_9nrvQKXgmvhegEiYaTBnhNCrzhiJyqKc0VMPlYfPgw_Yf2wbQJjWw0gNZ0zbk4Bws7EMNr3GbErxK02zQ8NcNXRqx8vxvzm/s640/Microsoft-WMM-6.png" width="640" /></a></div>
<br />
<br />
Using the correct WMM queue will ensure that our voice traffic can leverage the additional advantage in <a href="https://www.cisco.com/c/en/us/td/docs/wireless/controller/8-5/Enterprise-Mobility-8-5-Design-Guide/Enterprise_Mobility_8-5_Deployment_Guide/ch5_QoS.html#pgfId-1130413" target="_blank">ECDA</a> that this provides, which could be quite important on a busy wireless network carrying a mix of voice, video & data.
<br />
<br />
<h2>
Questions
</h2>
<br />
OK, this seems to be a reasonable approach to technically achieve the desired outcome for improved QoS marking over the air for Microsoft Windows clients. However, I don’t see anyone recommending this approach…
<br />
<br />
So, my questions are:<br />
<br />
<ul>
<li>Is this a valid approach? </li>
<li>Has anyone else used this approach? </li>
<li>What are the pitfalls of this approach (if any)? </li>
<li>Are there any flaws in my logic here? It seem strange that I don't find any information anywhere about this</li>
</ul>
<br />
Just a couple of caveats:<br />
<br />
<ul>
<li>I’ve only tried this on my personal WIndows 10 machine that runs Win 10 Pro </li>
<li>I’ve no idea if this approach would be scalable or supportable in a large Enterprise environment</li>
<li>I’m not a Windows or AD “Expert”</li>
</ul>
<br />
Please...let me know your thoughts (comments section at the bottom of this blog page, or track me down on Twitter - @wifinigel)
<br />
<br />
<h2>
References
</h2>
<br />
List of references from article & further reading:<br />
<br />
<ul>
<li>Microsoft NetQoS documentation: <a href="https://docs.microsoft.com/en-us/powershell/module/netqos/?view=win10-ps">https://docs.microsoft.com/en-us/powershell/module/netqos/?view=win10-ps</a> </li>
<li>Cisco Mobility design Guide (8.5): <a href="https://www.cisco.com/c/en/us/td/docs/wireless/controller/8-5/Enterprise-Mobility-8-5-Design-Guide/Enterprise_Mobility_8-5_Deployment_Guide">https://www.cisco.com/c/en/us/td/docs/wireless/controller/8-5/Enterprise-Mobility-8-5-Design-Guide/Enterprise_Mobility_8-5_Deployment_Guide</a> </li>
<li>Cisco Live Session (Orlando 2018): QoS Design and Deployment for Wireless LANs </li>
<ul>
<li>Video: <a href="https://ciscolive.cisco.com/on-demand-library/?search=QoS&search.solutions=scpsSolutions_mobility#/video/1533846601968002DwJy">https://ciscolive.cisco.com/on-demand-library/?search=QoS&search.solutions=scpsSolutions_mobility#/video/1533846601968002DwJy</a></li>
<li>Slides: <a href="https://clnv.s3.amazonaws.com/2018/usa/pdf/BRKRST-2515.pdf">https://clnv.s3.amazonaws.com/2018/usa/pdf/BRKRST-2515.pdf</a></li>
</ul>
</ul>
<br />
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-37730250342085918292019-01-02T20:02:00.000+00:002019-10-15T22:36:15.987+01:00WLANPiShark: Wireless Capture With a WLANPi on Windows<b><br /></b>
<b><span style="color: red;">*** Note this article is out of date. Please use the information on this page until I get this artcile updated: <a href="https://github.com/WLAN-Pi/WLANPiShark2">https://github.com/WLAN-Pi/WLANPiShark2</a> ***</span></b><br />
<b><br /></b>
<b>One huge advantage that Apple Mac users have over owners of Windows 10 machines is the ability to perform a native 802.11 wireless packet capture direct from their built-in wireless NIC. This is extremely useful for wireless pros who want to take a quick over-the air-capture into Wireshark to analyze traffic for troubleshooting purposes. Windows users don’t have the luxury of this native wireless capture capability. In this article, we take a look at how we can use a <a href="https://www.wlanpi.com/" target="_blank">WLANPi </a>unit as an adapter to capture traffic over the air, straight into Wireshark on a Windows machine. With the WLANPi being powered from the USB of the laptop, this is a super convenient, portable and powerful capture method that gets Windows users a little closer to the capabilities of their cousins on Apple Macs.</b><br />
<br />
<h2>
Background
</h2>
<br />
I’ve always felt really bad for Windows users who want to use their laptop for wireless packet capture purposes. I’ve been a long time Windows user and have often looked at how I might best use my Windows laptop to capture 802.11 frames over the air. This is a trivial exercise for Apple Mac users, as the native drivers on Macs allow their adapters to be put in to monitor mode and capture frames over the air. It’s been a goal of mine to find a low-cost solution to enable Windows users to be able to perform over the air captures. It was something I dreamed of the whole time I was studying for my <a href="https://www.cwnp.com/certifications/cwap" target="_blank">CWAP</a> in the days before I could afford a Mac!
<br />
<br />
Windows wireless NIC drivers, unfortunately, do not provide the required monitor mode capability to allow wireless packet capture. I’m guessing this is down to the huge variety of NICs that may be used by Windows devices. It simply isn’t worth the development costs for NIC manufacturers to code in the capability for their wireless NIC drivers to support monitor mode (as most users will never need it!). There are one or two software companies that provide specialist NIC drivers that they have developed for their own capture software for Windows, but these are only available with the purchase of specific packet capture software, which has a significant price tag.
<br />
<br />
There are a few lower cost software solutions that support Windows packet capture, but they rely on wireless NDIS drivers that have a number of compromises when capturing packets. I’m guessing this is because they aren’t operating directly at the NIC driver level. Limitations include the inability to select capture channel widths and limited/inaccurate RadioTap header information. These are OK(ish)...but they don’t provide the flexibility and depth of information I need to see for activities such as troubleshooting.
<br />
<br />
Earlier this year, I became interested in the “<a href="https://www.wlanpi.com/" target="_blank">WLANPi</a> “initiative started by Jerry Ola at the Phoenix 2018 <a href="https://www.wlanpros.com/" target="_blank">WLAN Pros Conference</a>. Jerry’s idea was to develop a single board computer platform equipped with a suite of free tools for wireless LAN pros to use in their testing and commissioning work. A number of excellent open source tools already exist, and were included in the distribution he created for the platform (find out more <a href="http://www.wlanpi.com/" target="_blank">here</a>). The <a href="http://www.wlanpi.com/" target="_blank">WLANPi</a> is a Linux-based (Debian), single board computer in the same vein as the Raspberry Pi, but is provided as a much smaller form factor. It also has low power requirements, so can be run from the USB port of a laptop. It has no onboard wireless adapter, but there is good driver support for the Comfast CF-912AC adapter, which is relatively low cost NIC that can be plugged in to the USB socket of the WLANPi. The WLANPi also has a Gig Ethernet port, which allows high speed data transfer between the WLANPi and a laptop. This combination of characteristics means that it can be used as a powerful wireless capture device,
hooked up to a Windows laptop via its Ethernet port, and powered directly by the laptop’s USB port. Here is a picture to show you what it looks like. You can think of the WLANPi as a wireless adapter on steroids for your Windows laptop:
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsibcTasyxkA9fG5ZCjr88UAI3eIisxSBaredTrPge9J0d1UGISgpuq6_eEnG-CkAObCsRsxURmM_1DepE5BGoRQh6ptvJJYcsDx6PUqG5Qj0mza1khImwAbG-DKu8CwbyNmYyB8gJBVNr/s1600/wlanpishark-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="567" data-original-width="1008" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsibcTasyxkA9fG5ZCjr88UAI3eIisxSBaredTrPge9J0d1UGISgpuq6_eEnG-CkAObCsRsxURmM_1DepE5BGoRQh6ptvJJYcsDx6PUqG5Qj0mza1khImwAbG-DKu8CwbyNmYyB8gJBVNr/s640/wlanpishark-1.png" width="640" /></a></div>
<br />
<br />
To allow the WLANPi to capture frames over the air, I have created a Windows batch file (a script file) that will set up the WLANPi to capture frames, then stream the capture over the Ethernet port of the WLANPi to a copy of Wireshark running on your laptop.
<br />
<br />
This might sound complicated, but trust me...after some initial setup, it’s really straightforward to use. Here is an overview diagram:
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwu9iwN3YCEKt8xnz4mM21isXVrGIXlJIV-LOWE9kqWmSE5ORc9WgWcYCv_AUkcVT6KIycylzwRrt4EbtLf-EFN7w9xqJkEPP2Eci_l6gNhfNucbSMjiYRjR6_qVsC86nwdenmU8w508pq/s1600/WLANPiShark_Overview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="676" data-original-width="1478" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwu9iwN3YCEKt8xnz4mM21isXVrGIXlJIV-LOWE9kqWmSE5ORc9WgWcYCv_AUkcVT6KIycylzwRrt4EbtLf-EFN7w9xqJkEPP2Eci_l6gNhfNucbSMjiYRjR6_qVsC86nwdenmU8w508pq/s640/WLANPiShark_Overview.png" width="640" /></a></div>
<br />
<br />
<h2>
Quickstart Guide
</h2>
<br />
For those of you in a bit of rush and who are comfortable with all of the concepts shown later in this article, here’s a very quick “get-you-going” setup guide. (For everyone else, I suggest you carry on to the next section of this article.)
<br />
<br />
<ul>
<li>Build/obtain a <a href="https://www.wlanpi.com/" target="_blank">WLANPi</a> with the latest image installed (unmodified) </li>
<li>Plug in a Comfast CF-912AC adapter to a USB port on the WLANPi </li>
<li>Install Wireshark on your Windows laptop - note the installation location </li>
<li>Install Putty on your laptop (we need Plink which is installed along with Putty) - note its installation location </li>
<li>Download the windows batch file from <a href="https://github.com/wifinigel/WLANPiShark" target="_blank">GitHub</a> to your Windows laptop (use “Clone or Download” to download the zip archive) - <a href="https://github.com/wifinigel/WLANPiShark">https://github.com/wifinigel/WLANPiShark</a> </li>
<li>Place the WLANPiShark.bat file in a convenient directory on laptop (your home directory) </li>
<li>Edit WLANPiShark.bat file with notepad to configure user-configurable variables </li>
<li>Hook up the WLANPi to your laptop with a USB to microUSB cable (provides power) </li>
<li>Hook up the WLANPi to your laptop with an Ethernet cable (streams capture data) </li>
<ul>
<li>Ethernet port of laptop must be set to use DHCP </li>
</ul>
<li>Wait for WLANPi display to show its 169.254.0.0/16 address - note this address for later (this may take around 30 secs to appear) </li>
<li>Open Windows command shell (i.e. cmd), change to the directory where WLANPiShark.bat installed and type : <span style="font-family: "courier new" , "courier" , monospace;">WLANPiShark.bat -h</span> (verify help screen shown) </li>
<li>In the Windows command shell, start test capture with: <span style="font-family: "courier new" , "courier" , monospace;">WLANPiShark.bat -c 1</span> </li>
<li>You’re done...
</li>
</ul>
<br />
<br />
<h2>
What You’ll Need
</h2>
<br />
You’re going to need a few component parts to get things set up to allow you to try out this packet capture method for yourself. If you’ve ever attended one of the WLAN Pro’s Conferences in the recent past, you may already already have most of these components. If not, I’ll give you a few pointers along the way.
<br />
<br />
<h3>
WLANPi Hardware
</h3>
<br />
To complete this exercise, you must have a WLANPi. These have been provided as part of the some the deep dive sessions at recent WLAN Pros conferences, so you may already be lucky enough to have one.
<br />
<br />
If you don’t have one, I’d advise you think about getting hold of one for a number of reasons: it comes packed with some useful free performance tools, it’s a great platform to practice your Linux and coding skills, and it will allow you to have a go at trying out various projects (such as the one in this article) that are being developed by enthusiasts in the WLAN community.
<br />
<br />
If you don’t have one, you have two options:
<br />
<br />
<ul>
<li>Buy one pre-built from the WLAN Pros store: <a href="https://www.wlanpros.com/shop/nanopi-neo2-kit-usb-nic/">https://www.wlanpros.com/shop/nanopi-neo2-kit-usb-nic/</a> </li>
<li>Buy one direct from the <a href="https://www.friendlyarm.com/index.php?route=product/product&product_id=189" target="_blank">supplier</a>, but do the build and burning work yourself (full instructions on this site: http://www.wlanpi.com). Note that you will also need to buy a Comfast CF-912AC adapter and micro SD card reader if you use this option - the full parts list is available from <a href="http://wlanpi.com/">WLANPi.com</a>. (<i>If you buy direct from the supplier, the platform is known as a NEO2, not a WLANPi</i>)
</li>
</ul>
<br />
Once you receive your WLANPi, ensure that it has the latest image from <a href="http://wlanpi.com/">WLANPi.com</a> installed. Some of the older images had NIC drivers issues, so go with the latest and greatest. Once installed, do not globally update the packages using ‘apt-get’ on the WLANPi CLI, as this may overwrite the install NIC drivers and stop things working as expected. I tend to just stick to the vanilla image as provided at <a href="http://wlanpi.com/">WLANPi.com</a>.
<br />
<br />
<h3>
Windows 10 Laptop
</h3>
<br />
I’m guessing you already have a Windows 10 laptop, otherwise you likely wouldn’t have got this far in your reading! I’ve only tested the batch file I created on Windows 10, so I’m not sure if this will work for any of you diehard Windows 7 users out there.<br />
<br />
<h4>
Software Packages
</h4>
<br />
There are a couple of software packages you will need to install on your Windows laptop, if you don’t already have them:<br />
<ul>
<li>Wireshark for Windows: <a href="https://www.wireshark.org/download.html" target="_blank">https://www.wireshark.org/download.html </a></li>
<li>Putty: <a href="https://www.putty.org/">https://www.putty.org/</a></li>
</ul>
<br />
Wireshark is our (free) packet capture and decode software, which hopefully needs no further explanation.<br />
<br />
Putty is a free terminal emulation software that is used by many network engineers who want a robust, reliable piece of software to SSH to devices around their network. Putty software is installed with a number of supporting utilities. We are not interested in Putty itself, but in the accompanying utility: Plink. Plink allows us to send single commands to devices over an SSH session. You don’t need to install Plink separately - it is automatically installed as part of the standard Putty installation.
<br />
<br />
When installing Wireshark and Putty, make a note of the location in which they are installed. This will be useful to us later when configuring the batch file that ties everything together and performs the magic. If you already have both software packages installed you may need to use the search tools in Windows File Explorer, or poke about in some well known install locations such as “C:\Program Files\ or ”C:\Program Files (x86)” to find their installation location.
<br />
<br />
<h4>
Networking
</h4>
<br />
As we’ll be hooking up the Ethernet port of our laptop to the WLANPi, we need to configure the IP setup of our laptop Ethernet adapter. To keep things nice and simple, just set the laptop adapter to use DHCP - no static IP addressing is required.
<br />
<br />
The reason for doing this is that when connected to the WLANPi, it will fall back to using its <a href="http://packetlife.net/blog/2008/sep/24/169-254-0-0-addresses-explained/" target="_blank">RFC3927 address</a> (169.254.0.0/16). The WLANPi will also do the same thing, so that they can communicate using their 169.254.0.0/16 addresses when directly connected. This keeps thing nice and simple and avoids having to keep configuring static addresses every time you need to use the WLANPi with your laptop.
<br />
<br />
<h3>
Hooking it all Together
</h3>
<br />
Once you’ve installed the required software on your Windows laptop, you’re ready to hook everything together.
<br />
<br />
To connect your laptop to the WLANPi, you’ll need 2 cables:
<br />
<br />
<ul>
<li>USB to micro-USB cable (supplied with the WLANPi) </li>
<ul>
<li>Connect this between your laptop USB port and the micro USB port of the WLANPi - this will power the WLANPi </li>
</ul>
<li>Standard Ethernet UTP cable </li>
<ul>
<li>Connect this between your laptop Ethernet port and the Ethernet port on the WLANPi
</li>
</ul>
</ul>
<br />
When the WLANPi is connected to the laptop, it will initially show a 127.0.0.1 address on its display. After 30 secs or so, it will fall back to a 169.254.x.x address, which will replace 127.0.0.1 on the WLANPi display.
<br />
<br />
<h3>
Obtaining and Configuring the Batch File
</h3>
<br />
The glue that pulls all of this together is a Windows batch file that I wrote that will automatically set up the WLANPi to start collecting data over its WLAN adapter, and then stream the captured data back to Wireshark on your laptop. Once you’ve got hold of the batch file, you need to do a one-time configuration exercise, then it’s good-to-go to run from the command line of your Windows laptop.
<br />
<br />
Lets step through what you need to do:
<br />
<br />
1. <u>Get the Latest Batch File</u>
<br />
<br />
Visit my <a href="https://github.com/wifinigel/WLANPiShark" target="_blank">Github repository</a> and download the latest file archive that contains the batch file. If you go to the GitHub site and select “Clone or download”, then select the “Download Zip” option (see screenshot below)
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDbl9P4acSWeXB4Yum98ywF3iejGr8MjROqpzUek-_ICn9m7JauPgb27sKVm5d1yhu-3xW5hBPnAVdTjaMCOlp176BANXTwJH9f_Pz8py55b1EMbaokyEESaQr5ACX63YyJF29T0tyJ1aq/s1600/wlanpishark-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="568" data-original-width="1008" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDbl9P4acSWeXB4Yum98ywF3iejGr8MjROqpzUek-_ICn9m7JauPgb27sKVm5d1yhu-3xW5hBPnAVdTjaMCOlp176BANXTwJH9f_Pz8py55b1EMbaokyEESaQr5ACX63YyJF29T0tyJ1aq/s640/wlanpishark-2.png" width="640" /></a></div>
<br />
<br />
You will then be prompted to download a zip archive which contains the batch file that you will need. Download the zip file to a suitable location on your laptop so that you can unzip it and access the files that it contains.
<br />
<br />
2. <u>Extract the Batch File</u>
<br />
<br />
Once you have downloaded the zip file, open Windows file explorer, right click on the downloaded file and hit the extract option - this will extract all files in the archive to a new directory.
<br />
<br />
There are several files included in the zip file that is downloaded. The only file we are interested in using is the file titled “WLANPiShark.bat”:
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDozIgmArNDvRP0r8WIcmTQdmHqMNMRNLMj0CfbijthZQrLMVvig0OTsuhFvvHgzrkGC37EcbcdjIy8F11HR2EuR5wF2e2yzdx32U_RdNry2RGyH3R06Z6iLtbMnuqAgrWvAvQZwhh1n3e/s1600/wlanpishark-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="499" data-original-width="986" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDozIgmArNDvRP0r8WIcmTQdmHqMNMRNLMj0CfbijthZQrLMVvig0OTsuhFvvHgzrkGC37EcbcdjIy8F11HR2EuR5wF2e2yzdx32U_RdNry2RGyH3R06Z6iLtbMnuqAgrWvAvQZwhh1n3e/s640/wlanpishark-3.png" width="640" /></a></div>
<br />
<br />
Using Windows file explorer, move the “WLANPiShark.bat” file to your home directory.To find your home directory, open up a Windows command shell and check out the directory path indicated before the command prompt (see below):
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDgLekZcixU636ArjsZvOU3o1YSHgHjTENVR72vsm59e16RQ4pavvIqUiA-JfqVFyKQrP-wPhB7DRQBUTTKDrCALrwJuKVCoaABqMes2kQHL8BFZX6I5RtY_N_zOsktX02xFU6wNc56THI/s1600/wlanpishark-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="513" data-original-width="1059" height="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDgLekZcixU636ArjsZvOU3o1YSHgHjTENVR72vsm59e16RQ4pavvIqUiA-JfqVFyKQrP-wPhB7DRQBUTTKDrCALrwJuKVCoaABqMes2kQHL8BFZX6I5RtY_N_zOsktX02xFU6wNc56THI/s640/wlanpishark-4.png" width="640" /></a></div>
<br />
<br />
3. <u>Configure the Batch File</u>
<br />
<br />
The final step is to configure the batch file for your environment. Don’t worry, you should only need to do this once.
<br />
<br />
Using a plain text editor such as Notepad or (even better) <a href="https://notepad-plus-plus.org/" target="_blank">Notepad++</a>, open the WLANPiShark.bat file. (<i>Sidenote: if you don’t already have Notepad++, get it. You can thank me later. There are so many things you can use it for.</i>)
<br />
<br />
When you open the file, it can look a little overwhelming as there is a lot of stuff in there! Scroll down to around line 50 and you should see something that looks similar to this:
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNF0yg3guEAcw6TtCEkQcN_z_Q9Z4rU3WvUX6WQwmc4929uqPuGgO8Oa3wac8i55jRWcg0zUFamePp_qmD8hud8Va5FI9uSJnuwFgKXrXinx89LwAhKNNY4K-Tnw3jABqAedHVbk7QA3bP/s1600/wlanpishark-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="204" data-original-width="576" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNF0yg3guEAcw6TtCEkQcN_z_Q9Z4rU3WvUX6WQwmc4929uqPuGgO8Oa3wac8i55jRWcg0zUFamePp_qmD8hud8Va5FI9uSJnuwFgKXrXinx89LwAhKNNY4K-Tnw3jABqAedHVbk7QA3bP/s640/wlanpishark-5.png" width="640" /></a></div>
<br />
<br />
There are 6 variables that need to be configured. These are indicated by the “set” statements shown above. All that needs to be done is to edit the value shown after the “=” symbol with a value for your environment. Many of them likely won’t need changing if you have a default WLANPi setup. When making any edits, ensure that you don’t add any leading or trailing whitespace characters (yes, I got stuck for a long time trying to figure that out at one stage...)
<br />
<br />
<i>Make sure you hit “Save” when you’ve made your edits!</i>
<br />
<br />
Let’s take a look at each variable: <br />
<ul>
<li><b>WLAN_PI_USER</b>: this is the username used to login to your WLANPi via an SSH session. The default is “wlanpi”, so unless you’ve created new accounts on the WLANPi, you can leave this as-is. </li>
<li><b>WLAN_PI_PWD</b>: this is the password of the account name specified in the previous variable. Again, if you’ve left everything as default, this is also “wlanpi”. If you have changed the user account password from default, then put in the password value here. (<i>Note: this could be a security worry for some people, but I don’t have a good workaround for this, sorry</i>) </li>
<li><b>WLAN_PI_IP</b>: this is the IP address of the WLANPi itself. The IP address is shown on the display of the WLANPi. By default this will be a 169.254.x.x address unless you have previously assigned a static address to the WLANPi Ethernet adapter </li>
<li><b>WIRESHARK.EXE</b>: this is the full directory path to the Wireshark executable on your laptop - it must also include the Wireshark executable filename. Hopefully you made a note of this during installation.If not, you will need to find it using a tool such as Windows File Explorer </li>
<li><b>PLINK</b>: this is the full directory path to the Plink executable on your laptop - it must also include the Plink executable filename. Hopefully you made a note of this during the installation of Putty - it will be in the same directory as Putty. If not, you will need to find it using a tool such as Windows file Explorer </li>
<li><b>WLAN_PI_IFACE</b>: this is the name of the wireless LAN adapter interface on the WLANPi device. By default, if there is only one WLAN USB NIC attached, it will usually be “wlan0”. If you need to check this, simply SSH to your WLANPi and (with the WLAN adapter plugged in), run the command “<span style="font-family: "courier new" , "courier" , monospace;">sudo iwconfig</span>” and inspect the output for the name of the WLAN interface: </li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwLX6zg5KAiUtsBnpoqL2AwT7fRF_3s4S8F5y3IJgDpWOSqwikQFeaHiEWCkT7wrRBLdVKLdiAgUJVjIEk0cSiYA7FJ_Cb8oHqqejm771vA6S0xUY4xuiX5V9ujYWqt_cg0Xny53PtUQNF/s1600/wlanpishark-6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="334" data-original-width="945" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwLX6zg5KAiUtsBnpoqL2AwT7fRF_3s4S8F5y3IJgDpWOSqwikQFeaHiEWCkT7wrRBLdVKLdiAgUJVjIEk0cSiYA7FJ_Cb8oHqqejm771vA6S0xUY4xuiX5V9ujYWqt_cg0Xny53PtUQNF/s640/wlanpishark-6.png" width="640" /></a></div>
<br />
<br />
<h2>
Testing
</h2>
<br />
Assuming you have followed the instructions above, you should be good to go for a test to capture some frames over the air via your WLANPi and display them in Wireshark on your Windows laptop.
<br />
<br />
The required steps are:<br />
<ol>
<li>Open a command shell on your Windows laptop (i.e. Start > Cmd) </li>
<li>Type the following command at the command prompt: <span style="font-family: "courier new" , "courier" , monospace;">WLANPiShark.bat -c 1</span> </li>
<li>Following a few status messages at the Windows command prompt, you should now see Wireshark open on your laptop and frames being captured on channel 1 (<i>Note: the first time you do this, you may be prompted to accept a key at the Windows command prompt - accept this by hitting “y”. You will only prompted to do this once.</i>) </li>
<li>When you have captured enough frames, use the usual Wireshark controls to stop your capture and perhaps save them off if you want to keep them
</li>
</ol>
<br />
Here are a couple of screenshots showing typical output in the Windows command shell and the Wireshark capture window itself:
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRKor9gw48pw3yTVYPk0XnMDkSPdblcrIw3L8MepP28ujGZgF78-fMUqE4BgDYk9tH6s8b5ZDxhyphenhyphen3V1M-vgroLKspcDITD-LPmER-nGW-2nT0lg28mZsH8b5HeNWy6n60Q8Pvq-k8iSa7G/s1600/wlanpishark-7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="364" data-original-width="1347" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRKor9gw48pw3yTVYPk0XnMDkSPdblcrIw3L8MepP28ujGZgF78-fMUqE4BgDYk9tH6s8b5ZDxhyphenhyphen3V1M-vgroLKspcDITD-LPmER-nGW-2nT0lg28mZsH8b5HeNWy6n60Q8Pvq-k8iSa7G/s640/wlanpishark-7.png" width="640" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihb4ckexiJzl81Fo_ojDvy2V4qbtmNp-_26GZEWchhG81Cnd1fUaCY7iQKYm96UtsHU1RMSxiXu89Gm8GIFnfv-ckvUV0aFEripPqOb9X86GJQRghox8HA5mpvj5KPU4Zwi80M8YUbLA8V/s1600/wlanpishark-8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="609" data-original-width="1600" height="242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihb4ckexiJzl81Fo_ojDvy2V4qbtmNp-_26GZEWchhG81Cnd1fUaCY7iQKYm96UtsHU1RMSxiXu89Gm8GIFnfv-ckvUV0aFEripPqOb9X86GJQRghox8HA5mpvj5KPU4Zwi80M8YUbLA8V/s640/wlanpishark-8.png" width="640" /></a></div>
<br />
<br />
<span style="font-size: x-small;"><i>(want to know where all those crazy colours came from in the wireshark capture? See this article: <a href="http://wifinigel.blogspot.com/2014/02/wlan-packet-capture-frame-colorization.html)">http://wifinigel.blogspot.com/2014/02/wlan-packet-capture-frame-colorization.html)</a></i></span><br />
<br />
<h2>
Caveats & Limitations
</h2>
As useful as this approach is, it has a few foibles and limitations of which you should be aware:
<br />
<br />
<ul>
<li>You should only use the latest WLANPi image from <a href="http://wlanpi.com/">http://wlanpi.com</a>. Don’t update the packages using “apt-get upgrade” as it will likely break the drivers supplied for the CF-912AC and break the capture capability.</li>
<li>Capture restrictions: </li>
<ul>
<li>Although the CF-912AC can capture 802.11ac frames, it can only capture 1 and 2 spatial stream fames. Data frames for 3 spatial stream devices will not be captured </li>
<li>Capture is only possible for 20Mhz and 40Mhz width channels - this is a limitation of the ‘iw’ command in Linux (unless anyone has a clever work-around?) </li>
</ul>
<li>When installing Putty, remember that it is the Plink executable path you need to configure in the batch file, not Putty.exe </li>
<li>This solution is bit clunky compared to native capture with an on-board adapter (though it is still quite powerful): </li>
<ul>
<li>It would probably be best written in another scripting language, but this adds another step of software to install to support that scripting language </li>
<li>As ths is a Windows batch file, the CLI syntax checking is minimal. Check and double check the syntax you have used if you get strange results. It is easy to get Wireshark to fire up even though the entered CLI parameters are garbage. </li>
<li>The batch file executes a number of remote commands on the WLANPi prior to firing up Wireshark. This means that there is a delay of a couple of seconds before Wireshark actually fires up. This could be possibly improved by adding a shell script on to the WLANPi itself, but I wanted to keep this as easy as possible to get going - hence I wrapped everything in to one file that runs on the Windows laptop </li>
</ul>
<li>Each time you need to do a capture, you have to run the batch file again - Wireshark does not run continually. You cannot just hit the stop/start button in Wireshark (sorry) </li>
<li>In this article, I have shown how to run the capture using a direct Ethernet connection between the laptop and WLANPi. Obviously, by configuring IP addresses correctly, the laptop and WLANPi could be remote from each other. If you decide to try this approach, consider the bandwidth available between the laptop and the WLANPi and impact on other network infrastructure. Consider using the slicing option to keep the capture size down. </li>
<li>Anything else you need is likely covered on the following GitHub page (inc full syntax and option details): <a href="https://github.com/wifinigel/WLANPiShark">https://github.com/wifinigel/WLANPiShark</a>
</li>
</ul>
<h2>
References
</h2>
<ul>
<li>Batch file GitHub page (including detailed syntax) : <a href="https://github.com/wifinigel/WLANPiShark">https://github.com/wifinigel/WLANPiShark</a> </li>
<li>WLANPi Web site: http://www.wlanpi.com/
Wireless LAN Pros Web Site:<a href="https://www.wlanpros.com/thewlpc/">https://www.wlanpros.com/thewlpc/</a> </li>
<li>Putty download page: <a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html">https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html</a> </li>
<li>Wireshark download page: <a href="https://www.wireshark.org/download.html">https://www.wireshark.org/download.html</a> </li>
<li>Notepad++ download page: <a href="https://notepad-plus-plus.org/">https://notepad-plus-plus.org/</a> </li>
<li>Etcher software to burn image SD card if you build your own WLANPi: <a href="https://www.balena.io/etcher/" target="_blank">https://www.balena.io/etcher/</a></li>
</ul>
<br />WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-7483248607777067232018-05-27T08:24:00.004+01:002019-05-19T14:33:27.732+01:00The 5GHz “Problem” For Wi-Fi Networks: DFSWi-Fi networking provides us with 2 bands for the operation of wireless LAN networks: the 2.4Ghz band and the 5GHz band. The 2.4GHz band has a reputation of being something of a “sewer” of a band, due to its limited number of usable channels, the number of Wi-Fi devices already using the band, and the high levels of non-Wi-Fi interference that it experiences. Many wireless LAN professionals will generally advise that you put your “important stuff” on the 5GHz band whenever possible. 5GHz has far more channels available, a corresponding lower number of devices per channel, and generally suffers much lower non-Wi-Fi interference. However, beneath the headline of “2.4Ghz = bad, 5Ghz = good”, there lurks a shadowy figure that can be troublesome if you’re not aware of its potential impact: DFS.<br />
<br />
<h2>
Background</h2>
<br />
Wi-Fi networks operate in areas of RF spectrum that require no licence to operate. This is in contrast to many other areas of the radio spectrum that generally require some form of (paid-for) licence to operate radio equipment.<br />
<br />
All wireless services are generally subject to a range of enforceable technical restrictions to ensure they operate in a manner that will minimize interference to other wireless services. This may include restrictions on parameters such as RF transmit power levels and limiting the spectral characteristics of transmitted signals (e.g. channel widths used, spectral masks etc.).<br />
<br />
Even though they may be licence-exempt, Wi-Fi networks are still subject to restrictions to minimize their impact on other wireless services and equipment in the same areas of spectrum used by WLANs.<br />
<br />
One particular service that shares spectrum with wireless LANs is radar. Some types of radar installation operate in the 5GHz band that is used by Wi-Fi network. This means that they may use some of the same frequencies that are used for Wi-Fi networks. This doesn’t apply to all radar stations that have been deployed; there are many radar installations do not use 5GHz.<br />
<br />
However, due to the coexistence of both radar and Wi-Fi networks in the same area of spectrum, the Wi-Fi standard (IEEE 802.11) was designed to incorporate a spectrum sharing mechanism on 5GHz to ensure that Wi-Fi networks do not operate on frequencies (hence causing interference) that are used by nearby radar stations. This mechanism is known as Dynamic Frequency Selection (DFS) and is designed to mitigate interference to 5GHz radar by WLANs.<br />
<br />
<h2>
How Does DFS Work?</h2>
<br />
DFS operation is as follows:<br />
<br />
<h3>
Channel Availability</h3>
<br />
Before an AP will use a channel that may be impacted by radar, it will perform a “Channel Availability Check” to check for radar signals on that channel. The AP will listen for 60 seconds for the presence of radar signals. If no radar is detected, then the channel is designated as being an “Available Channel”.<br />
<br />
When powering up an AP that uses a DFS channel, you will see that the 2.4GHz radio becomes available as soon as the AP has completed its boot sequence, but the 5Ghz radio may not available for another minute. This is due to the AP performing its channel availability check, if the AP is trying to use a DFS-impacted 5GHz channel.<br />
<br />
In some regions, where channels 120 – 128 are allowed for use by Wi-Fi networks, there may be an increased channel availability check of 10 minutes. This means that the 5GHz radio is not available until 10 minutes after the access point has booted up. This extended checking period is due to weather radar restrictions on those channels.<br />
<br />
<h3>
In-Service Monitoring</h3>
<br />
Once an AP is operating on a DFS channel, it has to monitor for the presence of radar signals appearing on that channel. This is known as “In-Service Monitoring”.<br />
<br />
The AP must continuously monitor its channel for the presence of radar signals.<br />
Channel Shutdown<br />
<br />
If a radar signal is detected, then the AP must cease transmissions on the channel within the “Channel Move Time”, which is 10 seconds in the EU/UK.<br />
<br />
At the end of this period, the AP will have ceased transmissions and moved to a new channel.<br />
<br />
Prior to moving channels, some WLAN solutions may provide a “Channel Switch Announcement” 802.11 frame to connected clients to advise them which channel the AP will be moving to. Support for this on both WLAN infrastructure and client equipment seems to be optional from my own observations and should not be relied upon as a reliable method for clients to find the AP on its new channel.<br />
<br />
Experience shows that there are variations between WLAN solutions around which channels an AP will choose to move to when radar is detected. In some solutions, APs that detect radar will move to channel 36 exclusively. In other solutions, APs will choose to move to any of the available non-DFS channels. Some will jump to any available 5GHz channel they find (DFS or non-DFS). Behaviour in this area seems to be inconsistent and is not defined within the 802.11 standard.<br />
<br />
<h3>
Non-Occupancy Period</h3>
<br />
Once radar has been detected on a channel, then the “Non-Occupancy Period” begins. This is a 30-minute period in which no further transmissions will be made by the AP on the affected channel.<br />
<br />
At the end of the 30-minute period, most APs will attempt to return to their original channel, subject to a channel availability check. (Again behaviour in this area varies between vendors)<br />
<br />
<h3>
Radar Signal Characteristics</h3>
<br />
Radar signals themselves are very short duration pulses of Radio Frequency energy. In contrast to WLAN signals, they have no specific framing format, which makes their identification quite challenging.<br />
<br />
Looking at the testing methodology in ETSI EN 301 893 V2.1.1 (Annex D), test pulses sent to WLAN gear under test may vary between 0.5 and 30 micro-seconds and be subject to a variety of test patterns. The table below is an extract from the document:<br />
<br />
<span id="docs-internal-guid-b565fcc1-a076-bcda-fdda-e9c8ca8993fc" style="font-family: "libre baskerville"; font-size: 12pt; vertical-align: baseline; white-space: pre-wrap;"><img height="204" src="https://lh3.googleusercontent.com/ChTaw99SH6hjsMqDqk_VI2dy9Gg43IqgcO8ZJZlw-I_uQXR-vV1V7b2UsHvcAJlDB_nxtSzC8L-OCDPVeY60uvciWgfW1FBqe4xyefKOQRIKnQ70Udsfj5FT3vEyhF1bcn0ASfuX" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="602" /></span><br />
<br />
<span style="font-size: x-small;"><i>(Credit: Extract from ETSI standard: EN 301 893 V2.1.1)</i></span><br />
<br />
The diagram below shows a single burst pattern that may be used to test WLAN devices:<br />
<br />
<span id="docs-internal-guid-a6e5774c-a077-0667-7019-232b4f3c15c9" style="font-family: "libre baskerville"; font-size: 12pt; vertical-align: baseline; white-space: pre-wrap;"><img height="161" src="https://lh5.googleusercontent.com/9yRDOmnEzLo76tlNtk_gR7It_D1e4lcWL-ylArElalVzDgjWCSO43psL5vgVENYga5z6jCp8SYel1gLewrkACPeTs1vHjTI8Uv9Eb52h3U5L5a5fWWMaOtTDeOzs4eAbqyBq72rW" style="-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);" width="586" /></span><br />
<br />
<span style="font-size: x-small;"><i>(Credit: Extract from ETSI standard: EN 301 893 V2.1.1)</i></span><br />
<br />
There is little doubt, that compared to the detection of well-structured, longer duration 802.11 frames, WLAN equipment has been set quite a challenge in reliably detecting radar signals (which can lead to annoying side-effects, discussed later).<br />
<br />
<h3>
Are All 5GHz Channels Subject to DFS?</h3>
<br />
No, not all channels in the 5GHz band are subject to DFS. The channels that are exempt vary from country to country, as dictated by local regulations. In the UK/EU, channels 36, 40, 44 and 48 are not subject to DFS. However, all remaining channels are subject to DFS. In the USA, channels 36 - 48, together with 149 - 165 are exempt from DFS operation, with all remaining channels requiring DFS operation. (Check your local spectrum regulation authority for the latest information for your country).<br />
<br />
Channels that are not subject to DFS operate without having to perform any radar checks. Therefore, they are not subject to any disruptions from local radar equipment (or any other sources RF interference that may cause false-positive detection)<br />
<br />
<h3>
What Happens To Clients During a DFS Event?</h3>
<br />
Devices that are subject to DFS checks are divided in to two roles: master and slave. It is the role of the master device to advise slave devices when radar has been detected and that a channel shutdown is required. In WLANs, the access point is usually the master device, with the associated clients designated as slaves.<br />
<br />
Once radar is detected, it is the duty of the master device to advise the slaves that a channel change is imminent via a channel switch announcement message. This message should advise slaves (clients) which channel the AP intends to move to.<br />
<br />
<h3>
What Is The Impact on Client Applications During a DFS Event?</h3>
<br />
Once a radar signal has been detected, the impact on clients due to the required channel change is “variable”.<br />
<br />
WLAN systems may or may not send a channel switch announcement (CSA). If no announcement is received by a client (or is lost in transit), then the client will be forced to go through its probing process to find a suitable BSSID with which to associate. Depending on the network configuration and client capabilities (e.g. 802.11k/v/r), the time to re-associate with the network will vary. Note that even if a CSA is received, a client may still choose to go through its own AP discovery process based on probing or 80.211k information it has received.<br />
<br />
Once the move to a new channel has been completed, there will then be the usual delays in the resumption of application data flow due to processes such network access authentication and DHCP exchanges – these will again vary with network configuration.<br />
<br />
Whatever the configuration of the WLAN and client capabilities, the move to a new channel will not be without some connectivity impact. This impact may be unnoticeable for users who are using non-real-time applications (e.g. mail, web browsing), but will certainly have an impact on latency sensitive, real-time applications (e.g. voice, video).<br />
<br />
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block; text-align:center;"
data-ad-layout="in-article"
data-ad-format="fluid"
data-ad-client="ca-pub-4981693822756610"
data-ad-slot="7795189497"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<br />
<h3>
What Causes False DFS Detection?</h3>
<br />
Although DFS is, in theory, a great idea to protect systems that share the 5GHz spectrum, it has a major pitfall: false positives.<br />
<br />
Detecting a radar signal signature is quite a tricky business. Due to the variety of radar signatures that may be detected, together with the short-duration nature of radar signals, false positive events may be quite frequent in some WLAN systems.<br />
<br />
A false positive means that an AP is fooled into thinking that a radar signal is present by a non-radar RF signal. This causes a channel change, when one is not needed. This obviously leads to un-necessary WLAN disruption, that has varying impact on clients, depending on the applications in-use.<br />
<br />
Theories around the exact cause of false positive events seem to be numerous, depending on who you speak with. I’ve heard the following possible causes cited:<br />
<br />
<ul>
<li> Transient conditions due to high densities of clients</li>
<li> Bad client drivers causing short term RF spikes</li>
<li> Co-channel interference from distant APs on the same channel</li>
<li> Local non-Wi-Fi equipment interference</li>
</ul>
<br />
Whatever the cause, the false positives observed generally tend to be observed during times of increased user presence (i.e. they seem more likely during “office hours” as user numbers & activity increase).<br />
<br />
<h3>
How Do I Detect DFS Events?</h3>
<br />
To find out if your network is being impacted by DFS events, you need to check the trap logs or syslog messages from your wireless system.<br />
<br />
All systems should report when a radar hit has been detected. This will generally be recorded in the logs of the AP, wireless controller or management system. Often this will be forwarded as an SNMP trap to a management system or perhaps as a syslog message to your logging server.<br />
If you have log analysis and trending capabilities, it is well worth monitoring radar events to look for patterns of behaviour (e.g. particular sites, event times and channels)<br />
<br />
<h3>
What Do “Real” DFS Events Look Like?</h3>
<br />
You might be scratching your head at this point wondering how you can tell the difference between “real” DFS events and false positives.<br />
<br />
In my experience, DFS events caused by genuine radar systems tend to be limited to a specific subset of channels on the 5GHz band. For instance, you may check your system logs and find that in a particular building, only channels 116 and 120 (for example) are reporting DFS events (i.e. radar hits). Also, these tend to be at a consistent rata throughout the day.<br />
<br />
In contrast, false positives tend to be spread across a very wide portion of the 5GHz band and will vary in frequency throughout the day. They also generally fall to very low levels outside of office hours and at weekend (depending on the working patterns of your particular establishment).<br />
<br />
<h3>
How Can I Mitigate DFS Events on a Wi-Fi Network?</h3>
<br />
There are a few options available to try to mitigate the impact of DFS events on a WLAN:<br />
<ol>
<li>For genuine radar events that are impacting a subset of the 5GHz band, simply exclude the impacted channels from any channel planning. If using static channel planning, then avoid using affected channels. If using an auto-RF mechanism (i.e. automated channel planning), then exclude the affected channels from those available to the configuration of the auto-RF process</li>
<li>Trying to mitigate false positives is a little more tricky. Options include:</li>
<ol>
<li>If you have sufficient non-DFS channels, do not use DFS channels at all in channel planning. This option is very much dependent on WLAN capacity requirements and the local regulatory domain in which the network operates</li>
<li>Work with the WLAN vendor to find out if they have a more recent version of operating code that is less susceptible to DFS false positives. I have seen this approach used many times, with varying degrees of success</li>
<li>Work with a vendor or VAR to try to identify any local sources of interference that may create false positives. Occasionally, it may be possible to identify a particular client type or item of non-Wi-Fi equipment that is causing false positives, If you have a support contract, assistance from a suitably qualified WLAN expert armed with a spectrum analyser and able to perform log analysis may be invaluable in tracking down offenders.</li>
<li>If you vendor is unable to fix the issue, it may be worth trying an alternative vendor. Though this may seem extreme, I have seen huge variations between vendors and their susceptibility to DFS false positives. A limited-scope proof of concept costs little to deploy and can provide amazing leverage with your existing vendor…</li>
</ol>
</ol>
<br />
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block; text-align:center;"
data-ad-layout="in-article"
data-ad-format="fluid"
data-ad-client="ca-pub-4981693822756610"
data-ad-slot="3206219550"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<br />
<h3>
What will be the impact of DFS on my Wi-Fi Network?</h3>
<br />
The impact of DFS events on your network (both “real” & false positive) will always be the same: a DFS event is detected and an AP will change channels. This will also cause the associated wireless clients to change channels.<br />
<br />
The actual impact on the end-user will vary depending on what they are doing on their client.<br />
<br />
Many applications that aren’t latency sensitive will simply continue with little obvious impact on service. If a user is browsing the web, sending email or even streaming a video file (assuming some buffering), they will generally not notice their client jump between channels as their associated AP changes channels. This assumes your WLAN is correctly designed so that clients have viable alternative APs available.<br />
<br />
If clients are using real-time, latency sensitive applications, then they are much more likely to observe some sort of negative impact. The transition to a new channel is likely to be quite long (in WLAN terms). It will vary depending on the required operations (e.g. channel probing, 802.1X exchanges, DHCP exchanges etc.), but will generally be long enough to have an impact of real-time applications such a voice and real-time video. The use of enhanced WLAN features such as 802.11r/k may help to ensure that clients can significantly speed up the AP selection and roaming process.<br />
<br />
These considerations provide a useful indication as to whether DFS events are going to provide problems on your WLAN and whether you should consider the impact of DFS on your wireless network.<br />
<br />
<h2>
Conclusion</h2>
<br />
In many Enterprise wireless WLANs, there will generally be a requirement to use as many unique 5GHz channels as possible. This provides opportunities to mitigate co-channel interference and increase capacity through the use of channel bonding (if required).<br />
<br />
However, understanding and verifying the impact (if any) of radar detection is important to ensure the requirements of our WLAN design are not compromised.<br />
<br />
<h2>
References</h2>
<br />
Here are some other great sources of information you might like to look at for more information about DFS:<br />
<br />
<ul>
<li>Designing with DFS Channels (Devin Akin Webinar): <a href="https://www.brighttalk.com/webcast/5522/279895/designing-with-dfs-channels">https://www.brighttalk.com/webcast/5522/279895/designing-with-dfs-channels</a></li>
<li>A Practical Introduction to DFS (Blog post): <a href="https://www.adriangranados.com/blog/practical-intro-dfs">https://www.adriangranados.com/blog/practical-intro-dfs</a></li>
<li>Dynamic Frequency Selection Parts 1 to 3 (Jennifer Jabbusch articles) : <a href="https://www.networkcomputing.com/wireless/dynamic-frequency-selection-why-its-critical-80211ac/1439499958">https://www.networkcomputing.com/wireless/dynamic-frequency-selection-why-its-critical-80211ac/1439499958</a></li>
<li>(ETSI) EN 301 893 standard: <a href="http://www.etsi.org/deliver/etsi_en/301800_301899/301893/01.07.01_60/en_301893v010701p.pdf">http://www.etsi.org/deliver/etsi_en/301800_301899/301893/01.07.01_60/en_301893v010701p.pdf</a></li>
<li>Wikipedia WLAN Channels: <a href="https://en.wikipedia.org/wiki/List_of_WLAN_channels">https://en.wikipedia.org/wiki/List_of_WLAN_channels</a></li>
<li>UK 5GHz channel summary (WiFiNigel PDF): <a href="http://bowdennetworks.co.uk/downloads/5GHz%20Spectrum%20Usage%20UK%20-%202017%20-%20v1.pdf">http://bowdennetworks.co.uk/downloads/5GHz%20Spectrum%20Usage%20UK%20-%202017%20-%20v1.pdf</a></li>
</ul>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-31688071651077967942018-05-26T15:40:00.003+01:002018-05-28T13:47:26.989+01:00802.11 Roaming Variations Cheatsheet<div class="separator" style="clear: both; text-align: center;">
<a href="http://bowdennetworks.co.uk/downloads/802.11%20Roaming%20Variations%20v1.pdf" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"><img border="0" data-original-height="749" data-original-width="997" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmT9vqrGwFbcu5Aopjb1LtQEa8g_ZICxHK-Ed7R40r46FCdiJAxw4muQOqcAUNGNP8E_o0IuJhIVfLihmwc30F3SX4tfO4hLnoeWAEROe_hHsV9K_gYXbriL1dWZC4dMb5aE3dgsbNPVdd/s320/Thumbnail.png" width="320" /></a></div>
I recently saw a very interesting <a href="https://gjermundraaen.com/2018/05/23/fast-secure-roaming-overview/" target="_blank">post</a> from <a href="https://twitter.com/GjermundRaaen" target="_blank">Gjermund Raaen</a> about Fast Secure Roaming, where he discusses OKC and 802.11r. This reminded me of some roaming issues I had recently observed with OKC myself, which got me looking up information to refresh my memory on a variety of roaming methods and standards.<br />
<br />
While looking in to the issue, I came across a <a href="http://www.revolutionwifi.net/revolutionwifi/2012/02/wi-fi-roaming-analysis-part-2-roaming.html" target="_blank">classic blog post</a> from <a href="https://twitter.com/revolutionwifi" target="_blank">Andrew Von Nagy</a> about 802.11 roaming. It provides a superb summary of various roaming and security methods. I've read the post several times in the past, but thought that I would really benefit from a summary of its content to act as a memory jogger, rather than reading through the whole document again. For me, things get a little hazy when I start trying to remember the intricacies of the differences between EAP session resumption, PMK caching, OKC and PMK.<br />
<br />
To save myself some time for the next time I go through this loop, I put together a summary (Cheatsheet) of the content of the roaming variations post. If you'd like to get a copy of the sheet, please feel free to download it yourself: <a href="http://bowdennetworks.co.uk/downloads/802.11%20Roaming%20Variations%20v1.pdf" target="_blank">802.11 Roaming Variations</a><br />
<br />
<h3>
References:</h3>
<br />
<ul>
<li>Cheatsheet: <a href="http://bowdennetworks.co.uk/downloads/802.11%20Roaming%20Variations%20v1.pdf" target="_blank">802.11 Roaming Variations</a></li>
<li>(<a href="https://twitter.com/revolutionwifi" target="_blank">Andrew Von Nagy</a> article): <a href="http://www.revolutionwifi.net/revolutionwifi/2012/02/wi-fi-roaming-analysis-part-2-roaming.html" style="font-family: inherit; white-space: pre-wrap;">Wi-Fi Roaming Analysis part 2 - Roaming Variations</a></li>
<li><span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;">(CWNP): <a href="https://www.cwnp.com/uploads/802-11_rsn_ft.pdf" style="color: blue; font-family: inherit; white-space: pre;">Robust Security Network (RSN) Fast BSS Transition (FT)</a></span></li>
<li><a href="https://twitter.com/GjermundRaaen" target="_blank">Gjermund Raaen</a> Article: <a href="https://gjermundraaen.com/2018/05/23/fast-secure-roaming-overview/" target="_blank">Fast Secure Roaming Overview</a></li>
<li>(<a href="https://twitter.com/revolutionwifi" target="_blank">Andrew Von Nagy</a> white paper): <a href="http://www.revolutionwifi.net/s/Wi-Fi-AllianceTM-Voice-Enterprise-Certification.pdf" target="_blank">Standardized Fast Secure Roaming</a> </li>
</ul>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-61576681386899878402018-05-20T17:49:00.002+01:002018-05-20T17:56:25.525+01:00Updated White Paper on Licence-Exempt Spectrum in the 5GHz band for Wireless LANs in the UK<div class="separator" style="clear: both; text-align: center;">
<a href="http://bowdennetworks.co.uk/downloads/5GHz%20in%20the%20UK%20White%20Paper%20v3.0.pdf" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"><img border="0" data-original-height="656" data-original-width="572" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPJ-BsLh4aa-zYCpxkC2QECBW9qok5PZBmZ9ApepvOpWpFAyHAX_pbZqHge3YXVGmuEr4KnwJlIN_oqGMhfYFQ5S8aNQyU8UFTzh6rJ3o426bB1Ay7PhLKWW9aZcXtf1Y4Xp6gvOi3Ykyf/s320/wp-cover.png" width="279" /></a><span id="goog_1894663035"></span><a href="https://www.blogger.com/"></a><span id="goog_1894663036"></span></div>
For the past few years, I've maintained a white paper on the use of the 5GHz spectrum for Wi-Fi networks here in the UK. As Wi-Fi text books tend to focus on the spectrum available in the USA, I put this document together to clarify how 5GHz spectrum may be used in the UK.<br />
<br />
Following the release of a Voluntary National Specification document by Ofcom in August 2017 (<a href="https://www.ofcom.org.uk/__data/assets/pdf_file/0016/104416/vns-203083.pdf" target="_blank">VNS 2030/8/3</a>), additional channels became available for use in the UK on 5GHz.<br />
<br />
As we now have additional spectrum, it's time for an update to my white paper to detail the new spectrum that is available.<br />
<br />
Prior to updating the white paper, I published a summary sheet that shows the new spectrum allocation. This can be obtained obtain from my previous blog article: <a href="http://wifinigel.blogspot.co.uk/2017/10/uk-5ghz-wlan-spectrum-allocation-august.html" target="_blank">UK 5GHz WLAN Spectrum Allocation (August 2017)</a> (this is definitely one to print off and laminate).<br />
<br />
I have now completed my updates to the white paper, which I am pleased to share with you now. Note that in addition to adding the new spectrum details, I have added a few other topics around the use of 5GHz and the unique challenges that it presents. I'd recommend taking a look at my description of how DFS operates in Appendix 2, and have a play with the Opera weather radar location tool shown in Appendix 3.<br />
<br />
I hope you find the update useful and informative.<br />
<br />
<h3>
Links:</h3>
<ul>
<li><a href="http://bowdennetworks.co.uk/downloads/5GHz%20in%20the%20UK%20White%20Paper%20v3.0.pdf" target="_blank">Licence-exempt 5GHz Wi-Fi Spectrum in the UK</a> (New White Paper)</li>
<li><a href="http://bowdennetworks.co.uk/downloads/5GHz%20Spectrum%20Usage%20UK%20-%202017%20-%20v1.pdf" target="_blank">5GHz spectrum summary sheet </a>(inc new channels)</li>
</ul>
<br />
<br />
<br />
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-63254167876242212272018-04-21T23:44:00.001+01:002018-04-21T23:45:02.588+01:00Scapy 802.11 Cheat SheetI've been taking a look at <a href="https://scapy.readthedocs.io/en/latest/">Scapy</a> as I've been learning more about Python. It's a great Python-based tool for capturing, analyzing and creating network packets. There are some great resources to learn more bout Scapy, and even some cheat sheets out there.<br />
<br />
But, as there were quite a few new concepts (for me) and my own interest is in Scapy for 802.11 related activities, I put together my own Scapy for <a href="http://bowdennetworks.co.uk/downloads/Scapy%20802.11%20Cheat%20Sheet%20v0.1.pdf" target="_blank">802.11 cheat sheet</a>. You can grab a copy from <a href="http://bowdennetworks.co.uk/downloads/Scapy%20802.11%20Cheat%20Sheet%20v0.1.pdf" target="_blank">here</a> if it may be useful to you.<br />
<br />
<h3>
<b>References</b>:</h3>
<br />
<ul>
<li><a href="http://bowdennetworks.co.uk/downloads/Scapy%20802.11%20Cheat%20Sheet%20v0.1.pdf" target="_blank">Scapy 802.11 cheat sheet </a></li>
<li>Scapy docs: <a href="https://scapy.readthedocs.io/en/latest/">https://scapy.readthedocs.io/en/latest/</a></li>
<li><a href="https://thepacketgeek.com/series/building-network-tools-with-scapy/" target="_blank">Building Network Tools With Scapy</a></li>
<li><a href="https://pen-testing.sans.org/blog/2016/04/05/scapy-cheat-sheet-from-sans-sec560/" target="_blank">SANS Scapy Cheat Sheet</a></li>
</ul>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_vNMsDMP0jR-FePfUxsAVUT5USLweDReu8lEMgyJKgrHW6Nimgnj7qXp4eQUcOJh-oQO1YMW_xTDzKf7bK15b4wuHHeZokwZpY32iP1e1pzgNvjFR8_XOF_0FYDc_W83b0jXwXw26mGAy/s1600/Scapy_Cheat_Sheet_Graphic.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="943" data-original-width="1327" height="454" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_vNMsDMP0jR-FePfUxsAVUT5USLweDReu8lEMgyJKgrHW6Nimgnj7qXp4eQUcOJh-oQO1YMW_xTDzKf7bK15b4wuHHeZokwZpY32iP1e1pzgNvjFR8_XOF_0FYDc_W83b0jXwXw26mGAy/s640/Scapy_Cheat_Sheet_Graphic.png" width="640" /></a></div>
<span id="goog_827103709"></span><span id="goog_827103710"></span><br /></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-73071266741368906212018-04-06T21:15:00.000+01:002019-05-19T12:48:36.409+01:00Randomized MAC addresses in 802.11 Probe Frames<br />
<div style="-en-clipboard: true;">
<b>To address perceived privacy issues, some wireless clients adopt a randomized MAC address in probe frames when probing for wireless networks. In this post I take a quick look at how you might see clients using randomized MAC addresses. </b></div>
<div style="-en-clipboard: true;">
<span style="font-weight: bold;"><br /></span></div>
<h3>
<span style="font-size: 18px; font-weight: bold;">Background</span></h3>
<div>
When a wireless LAN client needs to find a nearby access point to join a Wi-Fi network, it has two choices:</div>
<div>
<br /></div>
<div>
<ul>
<li>Passive scanning: a client will listen to beacon frames, broadcast by nearby access points, that advertise networks that it makes available. This can be quite a slow process, as a client cycles though channels and waits to hear beacons.</li>
<li>Active scanning: a client will cycle through channels and send out probe frames to proactively query nearby APs for a specific wireless network (SSID). This will generally be a faster method of finding networks that the client is configured to join, and may be used by all clients in conjunction with passive scanning.</li>
</ul>
<div>
<br /></div>
<div>
One (unfortunate) side-effect of active scanning is that a client advertises its presence to anyone listening for probe requests in the vicinity. Even if the client is unsuccessful in finding and joining a network, it advertises its presence by continually probing for networks that it has been configured to join. The MAC address of the probing client’s wireless NIC is present, in the clear, in every probe request. </div>
<div>
<br /></div>
<div>
The availability of the client MAC address, which is unique to that client, presents some potential privacy issues. Organisations that have wireless networks in multiple locations could, in theory, track the location of the client as it moves between sites. When coupled with other data sources (e.g. a login to a guest wireless portal for instance), it could allow tracking of an individual and gathering of behavioural data.</div>
<div>
<br /></div>
<div>
In order to combat these privacy concerns, some client vendors have taken the decision to randomise the MAC addresses that are used when probing for networks. This ensures that a client cannot easily be tracked as it moves between locations. Clients may use a randomised address to discover networks, but then revert to their “real” MAC address once they choose to join a network.</div>
<div>
<br /></div>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block; text-align:center;"
data-ad-layout="in-article"
data-ad-format="fluid"
data-ad-client="ca-pub-4981693822756610"
data-ad-slot="2093761515"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<h3>
<span style="font-size: 18px; font-weight: bold;">Testing</span></h3>
<div>
Although I’ve read about this behaviour, I’d never observed it first-hand. However, I recently spotted it, by accident, while testing some wireless tools. The tool that I was looking at was the ‘airodump-ng’ tool, which is part of the ‘<a href="https://en.wikipedia.org/wiki/Aircrack-ng">Aircrack</a>’ toolset. Aircrack is a suite of Linux-based pen-testing tools.</div>
<div>
<br /></div>
<div>
Airodump-ng is a wireless scanner that reports wireless networks, detected via beacons, from nearby access points. It also reports clients that can be heard probing in the vicinity. A screen-shot of the tool is shown below - the top of the display shows the detected networks (discovered via beacons), the lower part of the display shows the clients (also know as stations) that can be heard probing.</div>
<div>
<br /></div>
<div>
Airodump-ng is generally used to scan across multiple channels to gather network and client data. However, it may also be configured to scan on a single channel of interest.</div>
<div>
<br /></div>
<div>
During my testing, I configured to my airodump-ng machine to scan on channel 52, as I knew there was an AP nearby using that channel. However, I noticed that in addition to the network I expected to see, I saw a client probing for a network called “Hidden _SSID”. This is a non-existent network that I had configured on my nearby MacBook Pro while doing some testing earlier in the day. I noticed, however, that the MAC address of the probing client was different to the actual MAC address of my MBP. </div>
<div>
<br /></div>
<div>
I disabled and re-enabled my MBP wireless adapter several times. Each time I did this, a new MAC address appeared in the airodump-ng client list as the MBP probed with a new, randomised, MAC address. This is Apple MAC address randomization in action. You can see the effect in the screen-shot below: </div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwYL7-cy4xJP6nQMJA96aBIaad94Y4locuS27QdDuN6Lz5Cj0G1iTim_XBaVKidTHxBKc7uqzErJIGe1iB0xdnNCC048P3Yf08TF3bTWtqqrj2UcD_IPH_Hh-Rase45e_zSVlqz79vaLmV/s1600/airodump.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="282" data-original-width="722" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwYL7-cy4xJP6nQMJA96aBIaad94Y4locuS27QdDuN6Lz5Cj0G1iTim_XBaVKidTHxBKc7uqzErJIGe1iB0xdnNCC048P3Yf08TF3bTWtqqrj2UcD_IPH_Hh-Rase45e_zSVlqz79vaLmV/s640/airodump.png" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
This is an interesting demonstration of the randomised client behaviour employed by Apple devices (among others). I thought this post might be useful for others who have not observed this feature, or perhaps aren’t aware that some clients exhibit this behaviour. </div>
<div>
<br /></div>
<div>
I tried looking up some of the OUIs used in the randomized addresses using the online Wireshark OUI checker, but none of them corresponded with known manufacturer OUIs. The MAC addresses observed didn’t seem to be derived in any obvious way from the true MAC address of the MBP, they appear to be completely randomised.</div>
<div>
<br /></div>
<h3>
<span style="font-size: 14pt;">References</span></h3>
<div>
<ul>
<li><a href="https://appleinsider.com/articles/14/06/09/mac-address-randomization-joins-apples-heap-of-ios-8-privacy-improvements"><span style="font-size: 10pt;">MAC address randomization joins Apple's heap of iOS 8 privacy improvements</span></a></li>
<li><a href="https://en.wikipedia.org/wiki/Aircrack-ng">Aircrack-ng</a></li>
<li><a href="https://www.wireshark.org/tools/oui-lookup.html">Wireshark OUI Lookup Tool</a></li>
</ul>
</div>
<div>
<h3>
</h3>
<h3>
** Update 7th Apr 2018</h3>
<div>
I received a Tweet from Arsen Bandurian about the randomized MAC addresses used by the Apple devices:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh697_qbwQ-C_xTks4NVgONo_vcVoAgRklkFhpxmA6ZQujGjcLgxdSuHzWssnHXA4xRj-hTvaZBi8hZjsDeOWVAoCiSlweKBjxgMQu0kyTaE4cI-Jiqa4Bi8gKAt22s_dOf77X4IIzK-amt/s1600/Arsen_Tweet.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="245" data-original-width="437" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh697_qbwQ-C_xTks4NVgONo_vcVoAgRklkFhpxmA6ZQujGjcLgxdSuHzWssnHXA4xRj-hTvaZBi8hZjsDeOWVAoCiSlweKBjxgMQu0kyTaE4cI-Jiqa4Bi8gKAt22s_dOf77X4IIzK-amt/s400/Arsen_Tweet.png" width="400" /></a></div>
<div>
As he correctly states, the randomized MAC addresses being used are locally administered MAC addresses. You can recognize a locally administered address by inspecting the 2nd least significant bit of the 2nd byte of the MAC address. This explains why I would never have seen any hits in the OUI lookup tool. Thanks Arsen!</div>
<div>
<br /></div>
<br /></div>
(If you got to the end of this article without falling to sleep, you did jolly well...)Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-39422410263841740042018-04-01T10:11:00.000+01:002019-11-01T22:40:43.907+00:00Wireshark Capture Filters for 802.11<br />
<div style="-en-clipboard: true;">
<div>
<span style="font-family: inherit;">Generally, when performing over the air captures of WLAN traffic with Wireshark, the workflow adopted is as follows:</span><br />
<br />
<ul>
<li>pick a specific channel where target traffic resides</li>
<li>switch the capture adapter to that channel</li>
<li>capture <u>all</u> 802.11 traffic over the air on that channel</li>
</ul>
Once a sample of traffic has been captured, the capture is stopped and analysis of the traffic using Wireshark's built-in display filters can begin.</div>
<div>
<br /></div>
<div>
In most situations, this is the best workflow to adopt. It ensures that all required frames are captured. Filtering wireless traffic while capturing frames is very problematic due to the complexity of 802.11 frame exchanges. It is very easy to miss parts of interactions between stations if you filter traffic as it is being captured.</div>
<div>
<br /></div>
<div>
However, there are a few edge cases where it may be useful to filter over-the-air frames at the point of capture. This will mean that only the filtered frames are available to display in Wireshark - all other frames are lost - but in some rare cases, this may be what you want.</div>
<div>
<br /></div>
<div>
Capture filters are added prior to commencing an over the air capture with Wireshark, as shown in the screen-shot below (see green highlighted text):</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCjRBB-9ACcklOS4geSaupzT1cxkbiHPjjJHvQId7lA9-RhCeAv2cSOb5-ZAiZpTLlol7_KF2kx5JvthKIKl_NFfgSHzJGPUDTo4AOjy55O9flkB7yBAWCJk1trWEqZacyzqD0lbeedt_m/s1600/capture_filter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="781" data-original-width="1600" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCjRBB-9ACcklOS4geSaupzT1cxkbiHPjjJHvQId7lA9-RhCeAv2cSOb5-ZAiZpTLlol7_KF2kx5JvthKIKl_NFfgSHzJGPUDTo4AOjy55O9flkB7yBAWCJk1trWEqZacyzqD0lbeedt_m/s640/capture_filter.png" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
(<span style="font-style: italic;">Note that if the capture filter text is highlighted in red (rather than the green shown above), then there is an issue with your filter that needs fixing. You can access the screen display shown above via the Wireshark menu items: Capture > Options</span>) </div>
<div>
<br /></div>
<div>
The filter language used for capture filters is different from the built-in filter language with which most people are familiar. Capture filters in Wireshark use Berkeley Packet Filter (BPF) syntax. You can find out more about the syntax here: <a href="https://wiki.wireshark.org/CaptureFilters">https://wiki.wireshark.org/CaptureFilters</a></div>
<div>
<br /></div>
<div>
I thought it might be useful to provide some examples of capture filters for 802.11 (Wi-Fi) traffic, as I didn't find many examples when Googling around.</div>
<div>
<br /></div>
<div>
Here are a few example filters:</div>
<div>
<ul>
<li><span style="font-family: "courier new";">wlan type mgt</span> - capture only management frames</li>
<li><span style="font-family: "courier new";">wlan type ctl</span> - capture only control frames</li>
<li><span style="font-family: "courier new";">wlan type data</span> - capture only data frames</li>
<li><span style="font-family: "courier new";">wlan type mgt subtype beacon</span> - capture only beacon frames</li>
<li><span style="font-family: "courier new";">wlan type mgt subtype deauth</span> - capture only deauth frames</li>
<li><span style="font-family: "courier new";">wlan type mgt subtype probe-req</span> - capture only probe requests</li>
<li><span style="font-family: "courier new";">not wlan mgt</span> - do not capture management frame (i.e. capture data & control frames)</li>
<li><span style="font-family: "courier new";">not wlan mgt subtype beacon</span> - capture all frames except beacon frames</li>
<li><span style="font-family: "courier new";">wlan type mgt and (subtype beacon or subtype probe-req)</span> - capture only beacon and probe request frames </li>
<li><span style="font-family: "courier new";">wlan type mgt and (subtype deauth or subtype disassoc)</span> - capture on deauthentication and disassocation frames</li>
<li>(<span style="font-family: "courier new";">wlan type data) or (wlan type ctl and (subtype rts or subtype cts))</span> - capture only data frames and RTS/CTS control frames</li>
</ul>
</div>
<div>
<br /></div>
<div>
By studying the examples above,you will likely be able to craft your own capture filters. However, you will need to understand the various types of 802.11 frame available and their roles to be able to construct valid filters (maybe take a look at the <a href="https://www.cwnp.com/certifications/cwna">CWNA</a> or <a href="https://www.cwnp.com/certifications/cwap">CWAP</a> certification programs if you are not familiar with these)</div>
<div>
<br /></div>
<div>
The following extract from the <a href="https://www.tcpdump.org/manpages/pcap-filter.7.html">PCAP filter manpage</a> provides all of the filter options available to you:</div>
<div>
<br /></div>
<div>
<div>
<span style="font-weight: bold;">type </span><span style="font-style: italic;">wlan_type </span><span style="font-weight: bold;">subtype </span><span style="font-style: italic;">wlan_subtype</span></div>
<dl><dd>True if the IEEE 802.11 frame type matches the specified <span style="font-style: italic;">wlan_type</span> and frame subtype matches the specified <span style="font-style: italic;">wlan_subtype</span>.</dd><dd>If the specified <span style="font-style: italic;">wlan_type</span> is <span style="font-weight: bold;">mgt</span>, then valid <span style="font-style: italic;">wlan_subtype</span>s are: <span style="font-weight: bold;">assoc-req</span>, <span style="font-weight: bold;">assoc-resp</span>, <span style="font-weight: bold;">reassoc-req</span>, <span style="font-weight: bold;">reassoc-resp</span>, <span style="font-weight: bold;">probe-req</span>, <span style="font-weight: bold;">probe-resp</span>, <span style="font-weight: bold;">beacon</span>, <span style="font-weight: bold;">atim</span>, <span style="font-weight: bold;">disassoc</span>, <span style="font-weight: bold;">auth</span> and <span style="font-weight: bold;">deauth</span>.</dd><dd>If the specified <span style="font-style: italic;">wlan_type</span> is <span style="font-weight: bold;">ctl</span>, then valid <span style="font-style: italic;">wlan_subtype</span>s are: <span style="font-weight: bold;">ps-poll</span>, <span style="font-weight: bold;">rts</span>, <span style="font-weight: bold;">cts</span>, <span style="font-weight: bold;">ack</span>, <span style="font-weight: bold;">cf-end</span> and <span style="font-weight: bold;">cf-end-ack</span>.</dd><dd><br /></dd><dd>If the specified <span style="font-style: italic;">wlan_type</span> is <span style="font-weight: bold;">data</span>, then valid <span style="font-style: italic;">wlan_subtype</span>s are: <span style="font-weight: bold;">data</span>, <span style="font-weight: bold;">data-cf-ack</span>, <span style="font-weight: bold;">data-cf-poll</span>, <span style="font-weight: bold;">data-cf-ack-poll</span>, <span style="font-weight: bold;">null</span>, <span style="font-weight: bold;">cf-ack</span>, <span style="font-weight: bold;">cf-poll</span>, <span style="font-weight: bold;">cf-ack-poll</span>, <span style="font-weight: bold;">qos-data</span>, <span style="font-weight: bold;">qos-data-cf-ack</span>, <span style="font-weight: bold;">qos-data-cf-poll</span>, <span style="font-weight: bold;">qos-data-cf-ack-poll</span>, <span style="font-weight: bold;">qos</span>, <span style="font-weight: bold;">qos-cf-poll</span> and <span style="font-weight: bold;">qos-cf-ack-poll</span>.</dd></dl>
</div>
<div>
<br /></div>
<div>
Again, it is worth stressing that most of the time, capture filters are not what you want. It is very easy to miss some important interactions unless you capture all frames over the air (e.g. it is no good capturing just data frames and not seeing deauth frames that are kicking your client off the network).</div>
<div>
<br /></div>
<div>
<h3>
References:</h3>
<ul>
<li style="text-align: left;"><a href="https://wiki.wireshark.org/CaptureFilters" style="color: #0000ee;"><span style="font-family: inherit;">https://wiki.wireshark.org/CaptureFilters</span></a></li>
<li style="text-align: left;"><span style="font-family: inherit;"><a href="https://www.tcpdump.org/manpages/pcap-filter.7.html">https://www.tcpdump.org/manpages/pcap-filter.7.html</a></span></li>
</ul>
</div>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-5895301268280480099.post-57430024197942599492018-02-10T11:53:00.000+00:002018-02-10T12:04:44.585+00:00Noise Floor Penalty of Wider Channels in Wi-Fi Networks<p><strong>I’ve been told a number of times that although wider channels in a Wi-Fi network generally provide a higher connection speed (and hopefully a higher throughout), it comes at the cost of increasing the perceived noise floor of the client device. I thought it would be interesting to test this out for myself.</strong></p><p>With the advent of 802.11n, it became possible to bond together the 20MHz wide channels of earlier standards in to 40MHz channels (though in reality, this was only practically feasible on the 5GHz band). </p><p>Several years later, 802.11ac enabled us to bond together even larger chunks of contiguous channels and achieve 80MHz and 160MHz wide channels on the 5GHz band. Though 80MHz channels are not feasible in many environments and 160MHz is limited to very niche scenarios, they nonetheless are options.</p><p>Theoretically, each time we double our channel width, we are going to double our connection speed and our throughput (there are some protocol efficiencies achieved which mean we may slightly more than double our throughput, but lets keep it simple).</p><p>However, each time we double our channel width, so the theory goes, we also double the amount of noise our Wi-Fi station is exposed to. I guess this is (kind of) intuitive…</p><p>So here’s a quick check using my trusty Macbook Pro:</p><p> First of all, I connected to an SSID that is configured for a 20MHz channel width and took a look at the noise floor. In this instance, the noise is reported as –98dBm:</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ_uyhtLXFFVOIKK2Ab2mZgQG77Z5fEbxdwvYI1JME_7SGCVilAmqrBFHkM_9IoRgh2_9WsBU1GlLqbnAnH-0qDQSC40i7TiOZOssUQNg1kvHHQBAQMXLIt8vNFh5_3wbZ_AYdLI9QBvZC/s1600-h/Screen-Shot-2018-02-04-at-15.11.352"><img width="244" height="201" title="Screen Shot 2018-02-04 at 15.11.35" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Screen Shot 2018-02-04 at 15.11.35" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTT43fALCaXPLQQN_52TwZJez8Qgqgr9vK4Diaci8cYvWuaoxtcvgQrihialzCYE16TRwpl_r1x5lDTuk6fgZvB3Ysd6DwOvazEhYqoaHV6K73PhJQNuXquoHAkkM4Axya7Ui2GcgiOJrG/?imgmax=800" border="0"></a></p><p align="center"><em><font size="2">Fig 1 – 20MHz channel width</font></em></p><p>Next, I reconfigured the same SSID for a 40MHz channel width. Now, the noise floor was reported as –95dBm. Our noise floor had gone up by 3dB. (Sidenote: an increase of 3dB indicates a doubling of power).</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd9ZfJC9yXVbA2ghLegeKD0T453mwpwzOeHsXYDGhxjnnMiRia8yDChHduAnl3_hKzUTQc_v_aCcD47w3jlNrqc7Vvy9LY9n5aLlnWgjVFNoyvOa4Sih5p_LNbQjCpJGxs_MYUIS08yhzY/s1600-h/Screen-Shot-2018-02-04-at-14.57.302"><img width="244" height="201" title="Screen Shot 2018-02-04 at 14.57.30" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Screen Shot 2018-02-04 at 14.57.30" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgpePfTLOMQoWRhQAQtODAbf2D0Pv-Vt-yAUgfcqHQHPbcQGX8YFAIpvH-IjjoZFL0BbzXtMEMU-HiEgAOEo9-UPTTVI7r0t3p4V0AdjZhaVqTeKwNw1qlZ3eFOqgY-4x3mdheb3hOpxTg/?imgmax=800" border="0"></a></p><p align="center"><em><font size="2">Fig 2 – 40MHz channel width</font></em></p><p>Then, I reconfigured the SSID to double the channel width of the same SSID to achieve an 80MHz channel width. The noise floor increased by another 3dB (i.e. doubled again), changing from –95dBm to –92dBm:</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYDrFORa4loUtmUobvRs0J2L9_y44nG7BEvylnP5t507F9xRBsqPQFBrZqOgiUeckCVA0BlSp6IWF-0nCyKW0CIGOr4MQgzAtZF0EjL59NmMucXh1OxnyfO4Wyezg9y66NJWGXMVEjzmh_/s1600-h/Screen-Shot-2018-02-04-at-15.17.312"><img width="244" height="196" title="Screen Shot 2018-02-04 at 15.17.31" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="Screen Shot 2018-02-04 at 15.17.31" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinRUktNWdpr2MbKAtxnCB2SHYLX3iO84VZEVezejT_8PYH-eNGIXv-4hnfgK8n4HHfHGk2ww55jNN-VcMb9ihZ_UfaPIe7WxRm_bcTgzw1Ipa8avctVKsuF6f3QEpZHaAbNG7qTfxzc4eY/?imgmax=800" border="0"></a></p><p align="center"><em><font size="2">Fig 3 – 40MHz channel width</font></em></p><p>The observed effect fits the theory. There, that’s 10 minutes of your life you’ll never get back….but never mind, at least you didn’t choose accountancy as a profession.</p><p>OK, so why are we really interested in this anyway? Well, the other aspect to this is that if you look back at the results again, you can see that the received signal level has remained the same in each instance, but our noise floor has crept up. Our signal to noise ratio (SNR) has gone down by 6dB as we moved from 20MHz to 80MHz:</p><ul><li>Rx_sig_level – Noise_level = SNR</li><li>20MHz: –54dBm - -98dBm = 44dB</li><li>40MHz: –54dBm - -95dBm = 41dB</li><li>80MHz: –54dBm - -92dBm = 38dB</li></ul><p>Our SNR values are still very good in this example, but in an environment with a higher noise floor, a 6dB difference could make a significant difference. Many higher MCS values for 802.11n and 802.11ac rely on having high SNR values for successful operation. This means that a lower SNR could, in some environments have an impact on the higher speeds that are achievable across a network.</p><p>Well, that’s pretty much it. Hope this has been of interest. </p><p>(By the way, if you wonder how I got the additional Wi-Fi connection info on the Mac, when you click on the Wi-Fi symbol on the Mac top-bar, press the ‘alt’ key at the same time to see the enhanced connection info).</p><p><br></p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd9ZfJC9yXVbA2ghLegeKD0T453mwpwzOeHsXYDGhxjnnMiRia8yDChHduAnl3_hKzUTQc_v_aCcD47w3jlNrqc7Vvy9LY9n5aLlnWgjVFNoyvOa4Sih5p_LNbQjCpJGxs_MYUIS08yhzY/s1600-h/Screen-Shot-2018-02-04-at-14.57.302"><br></a></p>WifiNigelhttp://www.blogger.com/profile/15823454513463090749noreply@blogger.com