{"id":797,"date":"2018-07-10T23:00:44","date_gmt":"2018-07-10T13:00:44","guid":{"rendered":"https:\/\/www.airxperts.net\/?p=797"},"modified":"2018-08-15T17:18:55","modified_gmt":"2018-08-15T07:18:55","slug":"improving-wireshark-for-wifi-packet-analysis","status":"publish","type":"post","link":"https:\/\/airxperts.net\/index.php\/2018\/07\/10\/improving-wireshark-for-wifi-packet-analysis\/","title":{"rendered":"Improving Wireshark for WiFi Packet Analysis"},"content":{"rendered":"<h4>TLDR;<\/h4>\n<p>Download the Wireshark for WiFi profile now or read on.<\/p>\n<p><a href=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/802.11.zip\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-827 size-thumbnail\" src=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/icon-zip-file-150x150.png\" alt=\"\" width=\"150\" height=\"150\" srcset=\"https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/icon-zip-file-150x150.png 150w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/icon-zip-file-300x300.png 300w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/icon-zip-file-100x100.png 100w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/icon-zip-file.png 512w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a><\/p>\n<h4>Wireshark<\/h4>\n<p>Even if you&#8217;re an avid user of some of the premium packet analysis tools out there, such as Savvius&#8217; excellent <a href=\"https:\/\/www.savvius.com\/product\/omnipeek\/\" target=\"_blank\" rel=\"noopener\">Omnipeek<\/a>, every so often most people will be opening up the free\u00a0<a href=\"https:\/\/www.wireshark.org\/\" target=\"_blank\" rel=\"noopener\">Wireshark<\/a> to look at a capture.<\/p>\n<p>Unfortunately the default view included with Wireshark is very poorly suited to 802.11 packet analysis:<\/p>\n<p><a href=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/view-default.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-809 size-full\" src=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-view-default.png\" alt=\"\" width=\"350\" height=\"291\" srcset=\"https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-view-default.png 350w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-view-default-300x249.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<p>The classic view is no better:<\/p>\n<h4><a href=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/view-classic.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-808 size-full\" src=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-view-classic.png\" alt=\"\" width=\"350\" height=\"315\" srcset=\"https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-view-classic.png 350w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-view-classic-300x270.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><\/h4>\n<h4>The Problem<\/h4>\n<p>The problem is that WiFi frame headers are different and far more variable than typical ethernet frames. And two-way communication is, in general, far more complex.<\/p>\n<h5>Default Views<\/h5>\n<p>These are heavily geared towards Ethernet and TCP\/IP, which usually have single source and destination pairs.<\/p>\n<h5>Addressing<\/h5>\n<p>In 802.3 ethernet addresses, we typically only have a source and destination MAC address, and sometimes a VLAN ID to be concerned with. Of course more complex protocols and encapsulations exist, but the standard ethernet address fields do not vary much. And the default wireshark views work fine.<\/p>\n<p>In WiFi however, we have five &#8220;MAC&#8221; addresses to content with:<\/p>\n<ul class=\"ili-indent\">\n<li>Transmitter Address (TA)<\/li>\n<li>Receiver Address (RA)<\/li>\n<li>Source Address (SA)<\/li>\n<li>Destination Address (DA)<\/li>\n<li>Basic Service Set Identifier (BSSID)<\/li>\n<\/ul>\n<p>Moreover, not all of these addresses are present in each of the fundamental frame types and sub-types. Take acknowledgement frames for example. These <em>only<\/em> contain an RA. The frame to which the Ack refers is implied by it&#8217;s <em>timing<\/em>. Wireshark would require a some fancy programming to link the two and adjust the display. For example, to show unacknowledged data frames in a different colour. Further, Wireshark places the RA in an Ack in the <em>Destination<\/em> column by default, which is misleading when looking at thousands of packets.<\/p>\n<h5>Other Fields<\/h5>\n<p>It doesn&#8217;t stop there. To analyse all the elements of a WiFi conversation is complicated. It&#8217;s not a simple exchange between two nodes, so we can&#8217;t simply follow a source and destination pair, or even high-layer information such as TCP\/UDP source and destination ports. We have to look at several different elements of a frame, their timing and the context.<\/p>\n<h5>The Bottom Line<\/h5>\n<p>Essentially, it&#8217;s <del>impossible<\/del>\u00a0very difficult to follow and interpret WiFi communications effectively using the default views.<\/p>\n<h4>The Solution<\/h4>\n<p>After putting up with this for years I recently had a good opportunity to put some focus on this problem and attempt to solve it &#8211; or at least improve the situation.<\/p>\n<h5>Configuration Profiles<\/h5>\n<p>A fully-fledged solution would involve a <em>state machine<\/em>. But a workable solution using only visual cues turned it to be pretty simple. Recent versions of Wireshark (and perhaps ancient ones?) offer this feature. Basically most aspects of the display can be saved in a profile, and switched between on the fly, based on the type of capture you&#8217;re looking at.<\/p>\n<p>Configuration Profiles save a whole range of options, but the ones that seemed the most helpful for this challenge were:<\/p>\n<ul class=\"ili-indent\">\n<li>Column definitions<\/li>\n<li>Colouring rules<\/li>\n<li>Filter buttons<\/li>\n<\/ul>\n<p>You&#8217;ll find <em>Configuration Profiles<\/em> under the edit menu:<\/p>\n<p><a href=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/menu-edit.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-814 size-full\" src=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-menu-edit.png\" alt=\"\" width=\"166\" height=\"282\" \/><\/a><\/p>\n<p>This menu item brings up the following dialogue, and this is how you define a new profile. But you can more easily switch profiles by clicking in the very bottom-right corner of the main Wireshark screen.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/configuration-profiles.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-815 size-full\" src=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-configuration-profiles.png\" alt=\"\" width=\"350\" height=\"244\" srcset=\"https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-configuration-profiles.png 350w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-configuration-profiles-300x209.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><\/p>\n<p>We&#8217;ve already mentioned default and classic profile. Next I&#8217;ll take you through the <em>802.11<\/em> profile I created.<\/p>\n<h5>802.11 Profile<\/h5>\n<p>Before I do, here&#8217;s a sneak peak at how it ended up.<\/p>\n<p><a href=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/view-802.11.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-810 size-full\" src=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-view-802.11.png\" alt=\"\" width=\"350\" height=\"196\" srcset=\"https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-view-802.11.png 350w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-view-802.11-300x168.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><\/p>\n<h5>Columns<\/h5>\n<p>With screen real estate at a premium, I couldn&#8217;t fit in every field I wanted to. But the 5 basic addresses and ESSID were a must. The columns I settled on were:<\/p>\n<ul class=\"ili-indent\">\n<li>Frame No.<\/li>\n<li>Time<\/li>\n<li>Protocol<\/li>\n<li>Channel<\/li>\n<li>Signal Strength<\/li>\n<li>Data Rate<\/li>\n<li>Frame Size<\/li>\n<li>Packet Size<\/li>\n<li>Frame Type<\/li>\n<li>Frame Sub-type<\/li>\n<li>BSSID<\/li>\n<li>ESSID<\/li>\n<li>RA<\/li>\n<li>TA<\/li>\n<li>DA<\/li>\n<li>SA<\/li>\n<li>Info<em> &#8211; built-in context-based field<\/em><\/li>\n<\/ul>\n<p>A couple of potentially useful fields, like the Frame Control Field Flags (say that 10 times fast), were not included. This is because Wireshark did not want to display a nice simple &#8216;R&#8217; for a retransmits, for example. Instead it prints a long and unwieldy sentence. Luckily flags <em>are<\/em> already displayed in the <em>Info<\/em> column so I decided I could live without this.<\/p>\n<p>Here are the final column definitions:<\/p>\n<p><a href=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/column-prefs.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-817 size-full\" src=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-column-prefs.png\" alt=\"\" width=\"350\" height=\"233\" srcset=\"https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-column-prefs.png 350w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-column-prefs-300x200.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><\/p>\n<h5>Colouring Rules<\/h5>\n<p>In some ways <strong><span style=\"color: #3366ff;\">c<\/span><span style=\"color: #00ff00;\">o<\/span><span style=\"color: #ff6600;\">l<\/span><span style=\"color: #ff00ff;\">o<\/span><span style=\"color: #00ccff;\">u<\/span><span style=\"color: #800080;\">r<\/span><\/strong> is the most important element to facilitate easy interpretation. Our brains are already optimised for it. I aimed for something as simple and subtle as possible. Background colour is the first big clue:<\/p>\n<ul class=\"ili-indent\">\n<li>Management and control frames have a white background<\/li>\n<li>Data frames have a grey background<\/li>\n<li>QoS data frames have a darker grey background<\/li>\n<\/ul>\n<p>Next, we can use the text\/foreground colour for some more fine-grained information. I didn&#8217;t want to identify every single frame sub-type, just the key ones. Too much colour information would only make interpretation <em>harder<\/em>. But Acks needed their own colour, as did beacons. Most other types shared a text colour:<\/p>\n<ul class=\"ili-indent\">\n<li>Acks have green text<\/li>\n<li>Beacons have blue text<\/li>\n<li>Probes have light blue text<\/li>\n<li>RTS\/CTS frames have purple text<\/li>\n<li>Frames relating to association &amp; disassociation have orange text<\/li>\n<li>Frames relating to 802.1x authentication have red text<\/li>\n<li>Other management frames have deep red text<\/li>\n<li>Other control frames have violet text<\/li>\n<li>Null frames have white text<\/li>\n<li>Other data frames have black text<\/li>\n<\/ul>\n<p>Here is the final rule set:<\/p>\n<p><a href=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/colouring-rules.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-818 size-full\" src=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-colouring-rules.png\" alt=\"\" width=\"350\" height=\"153\" srcset=\"https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-colouring-rules.png 350w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-colouring-rules-300x131.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><\/p>\n<p>These two changes already made interpreting Wi-Fi captures a lot easier.<\/p>\n<h5>Filter Buttons<\/h5>\n<p>For a bit of icing on the cake &#8211; or as @WazzFi might say, <em>a bit of Kale on the Vegie Burger,\u00a0<\/em>filter buttons offer a quick way to filter your capture without having to use Wireshark&#8217;s display filter syntax.<\/p>\n<p>I picked a few of the common filters I might regularly use:<\/p>\n<ul class=\"ili-indent\">\n<li>Beacons &#8211; beacons, and nothing but the beacons<\/li>\n<li>Probes &#8211; requests and responses<\/li>\n<li>Assoc\/Auth &#8211; any frame relating to the act of joining a WLAN &#8211; identical to the orange and red colouring rules<\/li>\n<li>Probe\/Assoc\/Auth &#8211; combination of the last two<\/li>\n<li>Hide Data &#8211; hides data frames <em>except<\/em> 802.1x authentication<\/li>\n<li>Show Data &#8211; hides management, control and 802.1x authentication frames<\/li>\n<li>Ch1 &#8211; only shows frames <em>captured<\/em> on channel 1. Click this then change the number to taste<\/li>\n<li>&lt;-67dBm &#8211; only shows frames captured with less than the shown signal strength. Again click and modify to taste.<\/li>\n<\/ul>\n<p>Here are the final definitions:<\/p>\n<p><a href=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/filter-button-defs.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-819 size-full\" src=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-filter-button-defs.png\" alt=\"\" width=\"350\" height=\"132\" srcset=\"https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-filter-button-defs.png 350w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-filter-button-defs-300x113.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><\/p>\n<p>And the buttons shown up next to the filter bar:<\/p>\n<p><a href=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/filter-buttons.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-828 size-full\" src=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-filter-buttons.png\" alt=\"\" width=\"350\" height=\"75\" srcset=\"https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-filter-buttons.png 350w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-filter-buttons-300x64.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><\/p>\n<h4>In Practice<\/h4>\n<p>So far this scheme has worked out well, and my packet analysis using Wireshark has definitely been streamlined.<\/p>\n<h5>Visual Patterns<\/h5>\n<p>It&#8217;s easy to learn the obvious visual patterns, such as:<\/p>\n<ul class=\"ili-indent\">\n<li>Successful transmission &#8211; a grey data frame followed by a green Ack<\/li>\n<li>Contention &#8211; too many purple RTS in row<\/li>\n<li>Light load &#8211; little but beacons<\/li>\n<li>Many other patterns I&#8217;m sure I haven&#8217;t thought of yet<\/li>\n<\/ul>\n<h5>ONE-CLICK-SHOP<\/h5>\n<p>I&#8217;m particularly happy with the filter buttons. Being able to instantly drill down to client association and then flick back to see the broader context of those packets seems to save a <em>bunch<\/em> of time.<\/p>\n<h4>Using the Profile<\/h4>\n<p>I&#8217;ve made my configuration profile available for download at the bottom of this post.<\/p>\n<h5>Installing<\/h5>\n<p>It&#8217;s very simple to install. You&#8217;ll notice at the bottom of the Configuration Profiles dialogue, Wireshark display the path on your system. Simply download the file and unzip to this directory. The folder name is the profile name.<\/p>\n<h5>Decryption<\/h5>\n<p>It&#8217;s worth noting that Wireshark will decrypt frames encrypted with a pre-shared key, provided you have also captured the 4-way handshake. A caution though &#8211; when you add a password it&#8217;s stored in <strong><span style=\"color: #ff0000;\">cleartext<\/span> <\/strong>in a file in the current Configuration Profile directory. Be mindful of the security implications.<\/p>\n<h5>Wireless Toolbar<\/h5>\n<p>Another newish feature of Wireshark is the <em>Wireless Toolbar<\/em>. This seems to be mainly oriented towards <em>capturing <\/em>rather than display\u00a0&#8211; something I at least don&#8217;t do with Wireshark (thank you @adriangranados and <a href=\"https:\/\/www.adriangranados.com\/apps\/airtool\" target=\"_blank\" rel=\"noopener\">Airtool<\/a>).<\/p>\n<p>Unfortunately, if you do enable this toolbar, it is not saved with the profile and disappears on each new instance of the program. However, it <em>does<\/em> provide a handy way to quickly access the 802.11 preferences dialogue. Typically you have to open <em>Preferences<\/em> scroll through a long list of protocols, as shown below:<\/p>\n<p><a href=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/prefs-protocol-802.11.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-823 size-full\" src=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-prefs-protocol-802.11.png\" alt=\"\" width=\"350\" height=\"216\" srcset=\"https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-prefs-protocol-802.11.png 350w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/thumb-prefs-protocol-802.11-300x185.png 300w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><\/p>\n<p>This screen is also where you setup decryption, so worth knowing this shortcut.<\/p>\n<h5>RESET THE LAYOUT<\/h5>\n<p>A last tip, after you switch profiles, hit <em>Ctl-Shift-R<\/em> &amp; <em>Ctl-Shift-W<\/em> to reset the layout for the new profile (<em>\u2318-Shift-R,\u00a0\u2318-Shift-W<\/em> for Mac).<\/p>\n<h5>Download<\/h5>\n<p>Download the profile here and let me know your thoughts and suggestions below or on twitter! Of course you might want to customise a few things like the colours to your own tastes.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/802.11.zip\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-827 size-thumbnail\" src=\"https:\/\/www.airxperts.net\/wp-content\/uploads\/2018\/07\/icon-zip-file-150x150.png\" alt=\"\" width=\"150\" height=\"150\" srcset=\"https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/icon-zip-file-150x150.png 150w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/icon-zip-file-300x300.png 300w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/icon-zip-file-100x100.png 100w, https:\/\/airxperts.net\/wp-content\/uploads\/2018\/07\/icon-zip-file.png 512w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a><\/p>\n<p>Tested on Wireshark version 2.6.1.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>TLDR; Download the Wireshark for WiFi profile now or read on. Wireshark Even if you&#8217;re an avid user of some of the premium packet analysis tools out there, such as Savvius&#8217; excellent Omnipeek, every so often most people will be opening up the free\u00a0Wireshark to look at a capture. Unfortunately the default view included with &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/airxperts.net\/index.php\/2018\/07\/10\/improving-wireshark-for-wifi-packet-analysis\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Improving Wireshark for WiFi Packet Analysis&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,22,47],"tags":[25,36,45,34,43,46,44,41,42,40],"class_list":["post-797","post","type-post","status-publish","format-standard","hentry","category-blog","category-wlan-pros","category-wlan-tools","tag-802-11","tag-cwap","tag-omnipeek","tag-packet-analysis","tag-packet-capture","tag-savvius","tag-wi-fi","tag-wifi","tag-wireless","tag-wireshark"],"_links":{"self":[{"href":"https:\/\/airxperts.net\/index.php\/wp-json\/wp\/v2\/posts\/797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/airxperts.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/airxperts.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/airxperts.net\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/airxperts.net\/index.php\/wp-json\/wp\/v2\/comments?post=797"}],"version-history":[{"count":51,"href":"https:\/\/airxperts.net\/index.php\/wp-json\/wp\/v2\/posts\/797\/revisions"}],"predecessor-version":[{"id":52489,"href":"https:\/\/airxperts.net\/index.php\/wp-json\/wp\/v2\/posts\/797\/revisions\/52489"}],"wp:attachment":[{"href":"https:\/\/airxperts.net\/index.php\/wp-json\/wp\/v2\/media?parent=797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/airxperts.net\/index.php\/wp-json\/wp\/v2\/categories?post=797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/airxperts.net\/index.php\/wp-json\/wp\/v2\/tags?post=797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}