<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>yurisk.info &#187; Networking</title>
	<atom:link href="http://yurisk.info/category/networking/feed/" rel="self" type="application/rss+xml" />
	<link>http://yurisk.info</link>
	<description>Technical Blog about IT Security and Networking</description>
	<lastBuildDate>Thu, 29 Jul 2010 11:25:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>IP Options are evil &#8211; drop them , drop them on Cisco Asa/IOS Microsoft ISA Juniper or Checkpoint</title>
		<link>http://yurisk.info/2010/01/23/ip-options-are-evil-%e2%80%93-drop-them-drop-them-on-cisco-asaios-microsoft-isa-juniper-or-checkpoint/</link>
		<comments>http://yurisk.info/2010/01/23/ip-options-are-evil-%e2%80%93-drop-them-drop-them-on-cisco-asaios-microsoft-isa-juniper-or-checkpoint/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 19:51:22 +0000</pubDate>
		<dc:creator>Yuri</dc:creator>
				<category><![CDATA[ASA/PIX Cisco]]></category>
		<category><![CDATA[Checkpoint NG/NGX]]></category>
		<category><![CDATA[Cisco]]></category>
		<category><![CDATA[IOS Cisco]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Checkpoint]]></category>

		<guid isPermaLink="false">http://yurisk.info/?p=419</guid>
		<description><![CDATA[As you probably noticed IP header has variable length placeholder for the IP Options field. It has been there since the beginning , once a good idea for debug now turned into trouble. RFC 791 states that hosts/routers supporting IP protocol must implement Ip Options filed . It is up to the vendor to decide [...]]]></description>
			<content:encoded><![CDATA[<p>As you probably noticed IP header has variable length placeholder for the IP Options field. It has been there since the beginning , once a good idea for debug now turned into trouble. RFC 791 states that hosts/routers supporting IP protocol <strong>must</strong> implement Ip Options filed . It is up to the vendor to decide what to do with this optional field, but it must understand it.  Still, wouldn’t be a problem if not modern architecture of the routing equipment that was designed to do most efficiently Routing , i.e. pass from interface to interface gigabytes of traffic. Therefore routing functions are highly optimized and most of the time are implemented in hardware . All other types of traffic unfortunately are not, and in most of the cases processing , lets call it Control traffic, is being left to  poor router CPU and done in software. That brought the  troubles into the IP world – relatively small amounts of control traffic (including Ip Options packets) may bring down otherwise<br />
 powerful router in just minutes.<br />
To prevent this attack vendors implemented protection measures to drop entirely or selectively IP packets that has Ip Options filed set. Below is quick cheat sheet how to do it in some gear :<br />
<br />
<strong>Checkpoint firewall NG/NGX</strong>  &#8211; packets with Ip Options are dropped by default except for the &#8220;Router Alert&#8221; option (0&#215;94) for the IGMPv2 and PIM protocols [or so CP claim, will have to verify later] and not even logged.  To start logging dropped packets go to Policy -> Global Properties -> Log and Alerts -> check Ip dropped packets : Log<br />
<br />
There is a value related to it that is on by default : Global Properties -> SmartDashboard customization -> Advanced Configuration -> Configure -> Firewall 1 -> Stateful inspection -> enable_ip_options (check/uncheck) but unchecking it removes from firewall VM chain module that inspects these Options at all and all Ip Options packets are dropped  . So  all  packets bearing Ip Options are happily dropped even before security rules , here:</p>
<div class="cmd"> [Expert@splat60]# fw ctl chain<br />
in chain (9):<br />
        0: -7f800000 (9095dd60) (ffffffff) IP Options Strip (ipopt_strip)<br />
        1: &#8211; 1fffff6 (9095ee80) (00000001) Stateless verifications (asm)
</div>
<p>Also Checkpoint say you can decide which Ip Options will be allowed later BUT only when installing the firewall: “The set of permitted options must be configured during installation  … the enable_ip_options setting in SmartDashboard is then used to enable or disable this functionality. Contact Check Point support for instructions on configuring the set of allowed IP options.”<br />
</p>
<div><strong>Microsoft ISA 2000 server:</strong><br />
 &#8211; If Enable Packet Filtering is not checked then do it in IP Packet Filters -> Properties &#8211; > General tab. On the Packet Filters tab check Enable Filtering IP Options .<br />
<strong>Microsoft ISA 2004 Server:</strong><br />
-	IP options filtering is enabled by default<br />
-	Go to Configuration node of the server in question  in Management console -> General -> Additional Security Policy<br />
Define IP Preferences . Here you will have 3 options to deal with Ip Options packets:<br />
a)	Deny packets with any IP options;<br />
b)	Deny packets with selected IP options;<br />
c)	Deny packets with all except selected IP options<br />
The same options are available in <strong>ISA 2006 </strong>, click on Configure IP Protection link &#8211; > IP Preference settings
</div>
<div><strong>IOS Cisco router :</strong><br />
  see my other blog – to be filled later<br />
Cisco ASA :<br />
 see my other  blog &#8211; to be filled later
</div>
<div><strong>Juniper router:</strong><br />
 You just add <strong>ip-options</strong> term to the filter and apply it to the interface of interest. In the example below I block only Route Record type of Ip Options, if you use any then it will block any type:
<div class="cmd"> [edit firewall family inet filter NOICMP term 3]</div>
<pre>
firewall {
    family inet {
        filter NOICMP {
            term 1 {
                from {
                    address {
                        192.168.2.100/32;
                    }
                }
                then {
                    reject;
                }
            }
            term 2 {
                from {
                    ip-options route-record;
                }
                then {
                    reject;
                }
            }
            term 3 {
                from {
                    address {
                        192.168.2.0/24;
                    }
                }
                then accept;
            }
        }
    }
}</pre>
</div>
<p>Apply to the interface:</p>
<div class="coding">
<pre>
interfaces {
    em0 {
        unit 0 {
            enable;
            family inet {
                filter {
                    input NOICMP;
                }
                address 192.168.2.133/24;
            }
        }
    }</pre>
</div>
<p>Other possible arguments to ip-options clause:</p>
<div class="cmd">set term 3 from ip-options ? </div>
<p>Possible completions:</p>
<pre>&lt;range&gt;              Range of values
  [                    Open a set of values
  any                  Any IP option
  loose-source-route   Loose source route
  route-record         Route record
  router-alert         Router alert
  security             Security
  stream-id            Stream ID
  strict-source-route  Strict source route
  timestamp            Timestamp </pre>
</div>
<p></p>
<div><strong>Windows 2008.</strong><br />
By default it doesnt allow/forward packets with Source Routing set, and that's good. For completeness<br />
here is how to enable (or check whether it is enabled) source-routed forwarding:<br />
<span class="cmd">BillG&gt; netsh interface ipv4 set global sourceroutingbehavior=drop| forward| dontforward </span><br />- or-<br />
Registry:<br />
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameter<br />
Key: DisableIPSourceRouting<br />
DWORD value: 0
<div><strong>Verify:</strong><br />
In Security any measure/protection/method is as good as the proof you can present that it actually works.<br />Windows:<br />
- Ping with Record Route field set:<br />
<span class="cmd">BillG> ping –r 9 192.2.2.1</span><br />
- Ping with Strict Routing field set:<br />
<span class="cmd">BillG> ping –k &lt;1st_hop_router_IP&gt; &lt;2nd_hop_router_IP…&gt;  &lt;target&gt;</span><br />
- Ping with Loose Routing field set:<br />
<span class="cmd">BillG> ping  -j  &lt;1st_hop_router_IP&gt; &lt;2nd_hop_router_IP…&gt;  &lt;target&gt;</span><br />
-	Ping with Timestamp option set:<br />
<span class="cmd">BillG> ping –s 3 8.8.8.8</span><br />Linux:<br />
- Ping with Record Route field set:<br />
     <span class="cmd"> root@darktstar:~/nmap# ping -R 8.8.8.8 </span><br />
- Ping with Timestamp option set:<br />
       <span class="cmd">root@darkstar:~/nmap# ping -T tsonly 8.8.8.8</span><br />Linux,BSD,Unix :<br />
      This handy utility sends bunch of packets to the target to test what Ip Options the target supports:<br />
      <span class="cmd">freebsd# fragtest ip-opt 192.168.2.133</span><br />
      ip-opt: sec lsrr ts esec cipso satid ssrr <br /> I run fragroute above against Juniper (8.3) that was configured in the example earlier to block only Record Route option, as you can see it is indeed missing in the output list that enumerates what Ip Options the target supports [ see Reference for fragroute details]
</div>
<p>References for further details:<br />
Juniper: <a href="http://www.amazon.com/JUNOS-Enterprise-Routing-Practical-Certification/dp/0596514425/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1264336662&#038;sr=1-1" > JUNOS Enterprise Routing, 1st Edition, By Doug Marschke; Harry Reynolds, 2008</a><br />
Microsoft ISA : <a href="http://www.amazon.com/Microsoft-ISA-Server-2006-Unleashed/dp/0672329190" >Microsoft® ISA Server 2006 Unleashed ,By Michael Noel, 2007</a><br />
Fragroute <a href="http://monkey.org/~dugsong/fragroute/">http://monkey.org/~dugsong/fragroute/</a><br />
Windows 2008: <a href="http://www.microsoft.com/learning/en/us/book.aspx?ID=11630&#038;locale=en-us" >Windows® Server 2008 TCP/IP Protocols and Services,By  Joseph Davies, 2008 </a></p>
]]></content:encoded>
			<wfw:commentRss>http://yurisk.info/2010/01/23/ip-options-are-evil-%e2%80%93-drop-them-drop-them-on-cisco-asaios-microsoft-isa-juniper-or-checkpoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ping &#8211; setting don&#039;t fragment bit in Linux/FreeBSD/Solaris/Cisco/Juniper</title>
		<link>http://yurisk.info/2009/09/01/ping-setting-dont-fragment-bit-in-linuxfreebsdsolarisciscojuniper/</link>
		<comments>http://yurisk.info/2009/09/01/ping-setting-dont-fragment-bit-in-linuxfreebsdsolarisciscojuniper/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 08:42:46 +0000</pubDate>
		<dc:creator>Yuri</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>

		<guid isPermaLink="false">http://yurisk.info/?p=201</guid>
		<description><![CDATA[ Ping.
Many times while debugging network problems of various kinds you need to send some packets
of desirable size  and don’t fragment bit being set. Below I list how to do it for  the different
equipment/OSes.
Let’s start with the  most popular operating system among network folks – Linux:
Linux
By default ping in any Linux-based system (It also means any [...]]]></description>
			<content:encoded><![CDATA[<p> <strong>Ping.</strong></p>
<p>Many times while debugging network problems of various kinds you need to send some packets<br />
of desirable size  and don’t fragment bit being set. Below I list how to do it for  the different<br />
equipment/OSes.<br />
Let’s start with the  most popular operating system among network folks – Linux:</p>
<p><strong><span style="text-decoration:underline;">Linux</span></strong></p>
<p>By default ping in any Linux-based system (It also means any distribution – Slackware, Ubuntu, CentOS etc) is sent with<br />
Don’t fragment (df) bit set . You don’t need to add any command line switches for that.<br />
Here is what you get by default ping in Linux:<br />
Defaults:<br />
 Don’t fragment bit  (in echo request)  &#8211; set<br />
 Ip packet size – 84 bytes<br />
 Sending interval  &#8211; 1 second<br />
 </p>
<p>Some examples.<br />
- sending pings station:<br />
[root@lonestar ~]# ping 191.91.21.41<br />
 -   receiving station:<br />
[root@darkstar ~]# tcpdump -s 1500 -n -vv icmp<br />
21:23:51.598641 IP (tos 0&#215;0, ttl  61, id 20, offset 0, <span style="color:#0000ff;">flags [DF]</span>, proto: ICMP (1), length: <span style="color:#0000ff;">84</span>) 112.225.125.100 &gt; 10.99.99.150: ICMP echo request, id 5392, seq 20, length 64<br />
21:23:51.598817 IP (tos 0&#215;0, ttl  64, id 7135, offset 0, flags [none], proto: ICMP (1), length: 84) 10.99.99.150 &gt; 112.225.125.100: ICMP echo reply, id 5392, seq 20, length 64<br />
 To change sent packet size:<br />
<strong> -s  &lt;size&gt; , bytes</strong> (8 bytes of ICMP header will be added automatically).</p>
<p> Sending host:<br />
[root@darkstar ~]# ping 10.99.99.158 -s 1300<br />
PING 10.99.99.158 (10.99.99.158) 1300(1328) bytes of data.<br />
1308 bytes from 10.99.99.158: icmp_seq=1 ttl=64 time=1.65 ms</p>
<p>Receiving host:<br />
freeBSD# tcpdump -n -v -s 1500 icmp<br />
16:15:11.901787 IP (tos 0&#215;0, ttl 64, id 0, offset 0, <span style="color:#0000ff;">flags [DF],</span> proto ICMP (1), length <span style="color:#0000ff;">1328</span>) 10.99.99.150 &gt; 10.99.99.158: ICMP echo request, id 44399, seq 63, length 1308<br />
To change sending interval (mostly used together with large packet size) :<br />
<strong>-i  &lt;secs&gt;</strong></p>
<p>Sending host:<br />
[root@darkstar ~]# ping -s 1300 -i 0.2 10.99.99.158</p>
<p>Receiving host:<br />
freeBSD# tcpdump -n -v -s 1500 icmp<br />
16:20:11.223481 IP (tos 0&#215;0, ttl 64, id 0, offset 0, <span style="color:#0000ff;">flags [DF],</span> proto ICMP (1), length <span style="color:#0000ff;">1328</span>) 10.99.99.150 &gt; 10.99.99.158: ICMP echo request, id 1136, seq 396, length 1308<br />
16:20:11.223496 IP (tos 0&#215;0, ttl 64, id 805, offset 0, flags [DF], proto ICMP (1), length 1328) 10.99.99.158 &gt; 10.99.99.150: ICMP echo reply, id 1136, seq 396, length 1308</p>
<p>To force Linux to send pings with DF bit cleared (i.e. not set):<br />
<strong>ping –M don’t</strong></p>
<p>Sending host:</p>
<p>[root@darkstar ~]# ping -s 1300 -M dont  10.99.99.158<br />
PING 10.99.99.158 (10.99.99.158) 1300(1328) bytes of data.<br />
1308 bytes from 10.99.99.158: icmp_seq=1 ttl=64 time=0.560 ms</p>
<p>Receiving host:</p>
<p>freeBSD# tcpdump -n -v -s 1500 icmp<br />
16:28:33.111903 IP (tos 0&#215;0, ttl 64, id 41857, offset 0, <span style="color:#0000ff;">flags [none],</span> proto ICMP (1), length 1328) 10.99.99.150 &gt; 10.99.99.158: ICMP echo request, id 33136, seq 6, length 1308<br />
16:28:33.111920 IP (tos 0&#215;0, ttl 64, id 9425, offset 0, flags [none], proto ICMP (1), length 1328) 10.99.99.158 &gt; 10.99.99.150: ICMP echo reply, id 33136, seq 6, length 1308</p>
<p> </p>
<p><strong>SideNote:</strong>  FreeBSD ping has a nice add-on (see below) – sweeping size of the packets, while Linux doesn’t have such extra feature,<br />
Below is script to emulate it on Linux:<br />
awk  &#8216; BEGIN  {for (size=100;size&lt;1470;size++)  {<br />
cmd = (&#8221;ping –c 3 –I 0.5 –s  &#8221; size  &#8220;  &#8220;  &#8220;10.99.99.158&#8243;)<br />
print cmd | &#8220;/bin/bash&#8221;<br />
close(&#8221;/bin/bash&#8221;)  } } &#8216;</p>
<p>Here:<br />
<em> size</em> – size of data in ICMP packet (bytes);<br />
 <em>-I 0.5</em> – interval of 5 seconds (optional);<br />
 <em>-c 3</em>   &#8211; number of pings in each size session (NOT optional – or you will enter an endless loop which even Ctrl-C won’t be able<br />
            to stop )</p>
<p>See it in action:<br />
[root@darkstar ~]# awk  &#8216; BEGIN  {for (size=100;size&lt;1470;size++)  {<br />
cmd = (&#8221;ping -c 3 -i 0.5 -s  &#8221; size  &#8220;  &#8220;  &#8220;10.99.99.158&#8243;)<br />
print cmd | &#8220;/bin/bash&#8221;<br />
close(&#8221;/bin/bash&#8221;)  } } &#8216;<br />
PING 10.99.99.158 (10.99.99.158) 100(128) bytes of data.<br />
108 bytes from 10.99.99.158: icmp_seq=1 ttl=64 time=1.75 ms<br />
108 bytes from 10.99.99.158: icmp_seq=2 ttl=64 time=0.276 ms<br />
108 bytes from 10.99.99.158: icmp_seq=3 ttl=64 time=0.201 ms</p>
<p>&#8212; 10.99.99.158 ping statistics &#8212;<br />
3 packets transmitted, 3 received, 0% packet loss, time 1002ms<br />
rtt min/avg/max/mdev = 0.201/0.742/1.750/0.713 ms<br />
PING 10.99.99.158 (10.99.99.158) 101(129) bytes of data.<br />
109 bytes from 10.99.99.158: icmp_seq=1 ttl=64 time=0.185 ms<br />
109 bytes from 10.99.99.158: icmp_seq=2 ttl=64 time=0.253 ms<br />
109 bytes from 10.99.99.158: icmp_seq=3 ttl=64 time=0.230 ms</p>
<p>&#8212; 10.99.99.158 ping statistics &#8212;<br />
3 packets transmitted, 3 received, 0% packet loss, time 1000ms<br />
rtt min/avg/max/mdev = 0.185/0.222/0.253/0.033 ms<br />
PING 10.99.99.158 (10.99.99.158) 102(130) bytes of data.<br />
110 bytes from 10.99.99.158: icmp_seq=1 ttl=64 time=0.118 ms<br />
110 bytes from 10.99.99.158: icmp_seq=2 ttl=64 time=0.201 ms<br />
110 bytes from 10.99.99.158: icmp_seq=3 ttl=64 time=0.343 ms</p>
<p>&#8212; 10.99.99.158 ping statistics &#8212;<br />
3 packets transmitted, 3 received, 0% packet loss, time 1001ms<br />
rtt min/avg/max/mdev = 0.118/0.220/0.343/0.094 ms<br />
PING 10.99.99.158 (10.99.99.158) 103(131) bytes of data.<br />
111 bytes from 10.99.99.158: icmp_seq=1 ttl=64 time=0.565 ms<br />
111 bytes from 10.99.99.158: icmp_seq=2 ttl=64 time=0.182 ms<br />
111 bytes from 10.99.99.158: icmp_seq=3 ttl=64 time=0.329 ms<br />
<strong><span style="text-decoration:underline;">FreeBSD</span></strong></p>
<p>Defaults:<br />
 Don’t fragment bit &#8211; not set   ; use –D  option to set<br />
 IP Packet size:  84 bytes  ;  use –s option to change<br />
 Sending interval:  1 sec  ;   use  –I  &lt;secs&gt; to change<br />
e.g. Sending pings  of data size 1300 bytes with interval 0.2 seconds with df bit set:</p>
<p>Sending host[10.99.99.158]:<br />
freeBSD# ping -D -s 1300 -i 0.2 10.99.99.150</p>
<p>Receiving host[10.99.99.150]:<br />
[root@darkstar ~]# tcpdump -n -v -s 1500  host 10.99.99.158<br />
20:42:57.816697 IP (tos 0&#215;0, ttl  64, id 11630, offset 0, <span style="color:#0000ff;">flags [DF],</span> proto: ICMP (1), length: <span style="color:#0000ff;">1328</span>) 10.99.99.158 &gt; 10.99.99.150: ICMP echo request, id 10770, seq 23, length 1308<br />
20:42:57.816914 IP (tos 0&#215;0, ttl  64, id 33327, offset 0, flags [none], proto: ICMP (1), length: 1328) 10.99.99.150 &gt; 10.99.99.158: ICMP echo reply, id 10770, seq 23, length 1308<br />
 <br />
<strong>SideNote:</strong>  *BSD family  has  a nice additional option  not found in most other systems  – you can  order ping to sweep size of sent packets .<br />
Example follows:</p>
<p>Here sweep range is from 20 bytes up to 1400 bytes, increase step is 300 bytes.</p>
<p>Sending host[10.99.99.158]:<br />
freeBSD# ping -D <span style="color:#0000ff;">-<span style="color:#0000ff;">g 20 -G 1400</span></span><span style="color:#0000ff;"> -h 300</span> 10.99.99.150<br />
PING 10.99.99.150 (10.99.99.150): (20 &#8230; 1400) data bytes<br />
28 bytes from 10.99.99.150: icmp_seq=0 ttl=64 time=1.313 ms<br />
328 bytes from 10.99.99.150: icmp_seq=1 ttl=64 time=0.531 ms<br />
628 bytes from 10.99.99.150: icmp_seq=2 ttl=64 time=0.581 ms<br />
928 bytes from 10.99.99.150: icmp_seq=3 ttl=64 time=0.362 ms<br />
1228 bytes from 10.99.99.150: icmp_seq=4 ttl=64 time=0.223 ms</p>
<p>&#8212; 10.99.99.150 ping statistics &#8212;<br />
5 packets transmitted, 5 packets received, 0.0% packet loss<br />
round-trip min/avg/max/stddev = 0.223/0.602/1.313/0.377 ms<br />
Receiving host[10.99.99.150]:<br />
[root@darkstar ~]# tcpdump -n -v -s 1500  host 10.99.99.158<br />
21:50:06.942165 IP (tos 0&#215;0, ttl  10.99.99.150 64, id 12828, offset 0, <span style="color:#0000ff;">flags [DF],</span> proto: ICMP (1), length: <span style="color:#0000ff;">48</span>) 10.99.99.158 &gt; 10.99.99.150: ICMP echo request, id 50962, seq 0, length 28<br />
21:50:06.944098 IP (tos 0&#215;0, ttl  64, id 43255, offset 0, flags [none], proto: ICMP (1), length: 48) 10.99.99.150 &gt; 10.99.99.158: ICMP echo reply, id 50962, seq 0, length 28<br />
21:50:07.944761 IP (tos 0&#215;0, ttl  64, id 12831, offset 0, <span style="color:#0000ff;">flags [DF],</span> proto: ICMP (1), length: <span style="color:#0000ff;">348</span>) 10.99.99.158 &gt; 10.99.99.150: ICMP echo request, id 50962, seq 1, length 328<br />
21:50:07.944826 IP (tos 0&#215;0, ttl  64, id 43256, offset 0, flags [none], proto: ICMP (1), length: 348) 10.99.99.150 &gt; 10.99.99.158: ICMP echo reply, id 50962, seq 1, length 328<br />
21:50:08.945815 IP (tos 0&#215;0, ttl  64, id 12833, offset 0, <span style="color:#0000ff;">flags [DF],</span> proto: ICMP (1), length: <span style="color:#0000ff;">648</span>) 10.99.99.158 &gt; 10.99.99.150: ICMP echo request, id 50962, seq 2, length 628<br />
21:50:08.945890 IP (tos 0&#215;0, ttl  64, id 43257, offset 0, flags [none], proto: ICMP (1), length: 648) 10.99.99.150 &gt; 10.99.99.158: ICMP echo reply, id 50962, seq 2, length 628<br />
21:50:09.946724 IP (tos 0&#215;0, ttl  64, id 12835, offset 0, <span style="color:#0000ff;">flags [DF],</span> proto: ICMP (1), length: <span style="color:#0000ff;">948</span>) 10.99.99.158 &gt; 10.99.99.150: ICMP echo request, id 50962, seq 3, length 928<br />
21:50:09.946819 IP (tos 0&#215;0, ttl  64, id 43258, offset 0, flags [none], proto: ICMP (1), length: 948) 10.99.99.150 &gt; 10.99.99.158: ICMP echo reply, id 50962, seq 3, length 928<br />
 </p>
<p><strong><span style="text-decoration:underline;">SOLARIS</span></strong><br />
Defaults:<br />
Don’t fragment bit    - <span style="text-decoration:underline;"> not set</span> , and not changeable , yes , it sounds strange but Solaris doesn’t<br />
support  df bit in its ping utility. You may set df bit in their traceroute program , but it has no provision for changing size of the packet and therefore is of no value for our case.</p>
<p>Non-verbose ; use –s to override<br />
IP packet size:  84 bytes</p>
<p>Pinging with defaults:<br />
<a href="mailto:root@opensolaris">root@solaris</a>:~# ping -s 10.99.99.150<br />
PING 10.99.99.150: 56 data bytes<br />
64 bytes from 10.99.99.150: icmp_seq=0. time=0.759 ms</p>
<p>Receiving host:<br />
[root@darkstar ~]# tcpdump -n -v -s 1500  host 10.99.99.159<br />
20:50:08.084364 IP (tos 0&#215;0, ttl 255, id 8020, offset 0, <span style="color:#0000ff;">flags [none],</span> proto: ICMP (1), length: <span style="color:#0000ff;">84</span>) 10.99.99.159 &gt; 10.99.99.150: ICMP echo request, id 9096, seq 7, length 64<br />
20:50:08.084538 IP (tos 0&#215;0, ttl  64, id 52389, offset 0, flags [none], proto: ICMP (1), length: 84) 10.99.99.150 &gt; 10.99.99.159: ICMP echo reply, id 9096, seq 7, length 64</p>
<p> To change size of sent packet, to say 1300 bytes of data:</p>
<p><a href="mailto:root@opensolaris">root@solaris</a>:~# ping -s 10.99.99.150  <span style="color:#0000ff;">1320</span><br />
PING 10.99.99.150: 1320 data bytes<br />
1328 bytes from 10.99.99.150: icmp_seq=0. time=1.610 ms<br />
1328 bytes from 10.99.99.150: icmp_seq=1. time=0.335 ms<br />
<strong>SideNote:</strong>  There is no size sweeping capability built-in , so I wrote  this script to   emulate this feature  in Solaris as well:<br />
<a href="mailto:root@opensolaris">root@solaris</a>:~# awk  &#8216; BEGIN  {for (size=100;size&lt;1470;size=size+10)  {<br />
cmd = (&#8221;ping   -s &#8220;    &#8220;10.99.99.158 &#8221; size  &#8221; 3&#8243;)<br />
print cmd | &#8220;/bin/bash&#8221;<br />
close(&#8221;/bin/bash&#8221;)  } } &#8216;</p>
<p>Here :<br />
 <em>size </em>  -  size of date in ICMP packet , starts at 10 bytes ends at 170 bytes<br />
 <em>size+10</em> – size incrementing by 10 bytes each series of pings<br />
<em>3</em> - number of pings in each size set.</p>
<p>Results:<br />
 <a href="mailto:root@opensolaris">root@solaris</a>:~# awk  &#8216; BEGIN  {for (size=100;size&lt;1470;size=size+10)  {<br />
cmd = (&#8221;ping   -s &#8220;    &#8220;10.99.99.158 &#8221; size  &#8221; 3&#8243;)<br />
print cmd | &#8220;/bin/bash&#8221;<br />
close(&#8221;/bin/bash&#8221;)  } } &#8216;<br />
PING 10.99.99.158: 100 data bytes<br />
108 bytes from 10.99.99.158: icmp_seq=0. time=0.319 ms<br />
108 bytes from 10.99.99.158: icmp_seq=1. time=0.460 ms<br />
108 bytes from 10.99.99.158: icmp_seq=2. time=0.328 ms</p>
<p>&#8212;-10.99.99.158 PING Statistics&#8212;-<br />
3 packets transmitted, 3 packets received, 0% packet loss<br />
round-trip (ms)  min/avg/max/stddev = 0.319/0.369/0.460/0.079<br />
PING 10.99.99.158: 110 data bytes<br />
118 bytes from 10.99.99.158: icmp_seq=0. time=0.371 ms<br />
118 bytes from 10.99.99.158: icmp_seq=1. time=0.370 ms<br />
118 bytes from 10.99.99.158: icmp_seq=2. time=0.477 ms</p>
<p>&#8212;-10.99.99.158 PING Statistics&#8212;-<br />
3 packets transmitted, 3 packets received, 0% packet loss<br />
round-trip (ms)  min/avg/max/stddev = 0.370/0.406/0.477/0.061<br />
PING 10.99.99.158: 120 data bytes<br />
128 bytes from 10.99.99.158: icmp_seq=0. time=0.395 ms<br />
128 bytes from 10.99.99.158: icmp_seq=1. time=0.361 ms<br />
128 bytes from 10.99.99.158: icmp_seq=2. time=0.264 ms</p>
<p> </p>
<p><strong><span style="text-decoration:underline;"> CISCO routers (IOS)</span></strong></p>
<p>Defaults:<br />
IP packet size : 100 bytes ;  use <strong>size &lt;size&gt;</strong> to change<br />
Don’t fragment bit &#8211; not set  ;  use <strong>df-bit</strong> to set</p>
<p>Running with defaults:<br />
Tokyo#ping 191.91.21.41<br />
Type escape sequence to abort.<br />
Sending 5, 100-byte ICMP Echos to 191.91.21.41, timeout is 2 seconds:<br />
!!!!!<br />
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms</p>
<p>Receiving host:<br />
[root@darkstar ~]# tcpdump -n -v  -s 1500 icmp<br />
22:16:53.758056 IP (tos 0&#215;0, ttl 253, id 11, offset 0, <span style="color:#0000ff;">flags [none],</span> proto: ICMP (1), length: <span style="color:#0000ff;">100</span>) 174.93.31.134 &gt; 10.99.99.150: ICMP echo request, id 4, seq 0, length 80<br />
22:16:53.758246 IP (tos 0&#215;0, ttl  64, id 10923, offset 0, flags [none], proto: ICMP (1), length: 100) 10.99.99.150 &gt; 174.93.31.134 : ICMP echo reply, id 4, seq 0, length 80<br />
&lt; &#8212; Cut for brevity &#8211;&gt;<br />
Setting df bit and size of the packet size  (Note – here when you set size of the ping you set IP packet size and not ICMP data size as  in *Nix systems).<br />
Repeat count is set to 3 .<br />
Tokyo#ping 191.91.21.41 size 1300 df-bit rep 3<br />
Type escape sequence to abort.<br />
Sending 3, 1300-byte ICMP Echos to 191.91.21.41, timeout is 2 seconds:<br />
Packet sent with the DF bit set<br />
!!!<br />
Success rate is 100 percent (3/3), round-trip min/avg/max = 4/4/4 ms</p>
<p>Receiving host:<br />
[root@darkstar ~]# tcpdump -n -v  -s 1500 icmp<br />
22:18:16.657849 IP (tos 0&#215;0, ttl 253, id 21, offset 0, <span style="color:#0000ff;">flags [DF],</span> proto: ICMP (1), length: <span style="color:#0000ff;">1300)</span> 174.93.31.134  &gt; 10.99.99.150: ICMP echo request, id 6, seq 0, length 1280<br />
22:18:16.658028 IP (tos 0&#215;0, ttl  64, id 10933, offset 0, flags [none], proto: ICMP (1), length: 1300) 10.99.99.150 &gt; 174.93.31.134 : ICMP echo reply, id 6, seq 0, length 1280<br />
<span style="text-decoration:underline;">Sweeping ping size.</span><br />
This feature is available from extended ping menu:<br />
Rio#ping<br />
Protocol [ip]:<br />
Target IP address: 191.91.21.41<br />
Repeat count [5]:<br />
Datagram size [100]:<br />
Timeout in seconds [2]:<br />
Extended commands [n]: <span style="color:#0000ff;">y<br />
</span>Source address or interface:<br />
Type of service [0]:<br />
Set DF bit in IP header? [no]: y<br />
Validate reply data? [no]:<br />
Data pattern [0xABCD]:<br />
Loose, Strict, Record, Timestamp, Verbose[none]:<br />
<span style="color:#0000ff;">Sweep range of sizes [n]: y<br />
Sweep min size [36]:<br />
Sweep max size [18024]: 1700<br />
Sweep interval [1]: 100<br />
</span>Type escape sequence to abort.<br />
Sending 85, [36..1700]-byte ICMP Echos to 191.91.21.41, timeout is 2 seconds:<br />
Packet sent with the DF bit set<br />
!!!!!!!!!!!!!!<br />
Receiving host:<br />
10:35:22.563851 IP (tos 0&#215;0, ttl 253, id 179, offset 0, <span style="color:#0000ff;">flags [DF],</span> proto: ICMP (1), length: <span style="color:#0000ff;">36</span>) 174.93.31.134  &gt; 10.99.99.150: ICMP echo request, id 9, seq 0, length 16<br />
10:35:22.563891 IP (tos 0&#215;0, ttl  64, id 46861, offset 0, flags [none], proto: ICMP (1), length: 36) 10.99.99.150 &gt; 174.93.31.134 : ICMP echo reply, id 9, seq 0, length 16<br />
10:35:22.566205 IP (tos 0&#215;0, ttl 253, id 180, offset 0, <span style="color:#0000ff;">flags [DF],</span> proto: ICMP (1), length: <span style="color:#0000ff;">136</span>) 174.93.31.134  &gt; 10.99.99.150: ICMP echo request, id 9, seq 1, length 116<br />
10:35:22.566223 IP (tos 0&#215;0, ttl  64, id 46862, offset 0, flags [none], proto: ICMP (1), length: 136) 10.99.99.150 &gt; 174.93.31.134 : ICMP echo reply, id 9, seq 1, length 116</p>
<p> </p>
<p><strong><span style="text-decoration:underline;">Juniper routers (JunOS):</span></strong><br />
Defaults:<br />
Ip packet size : 84 bytes<br />
Don’t fragment bit – not set; use <strong>do-not-fragment</strong> to set<br />
Interval  &#8211; 1 sec;  use <strong>interval &lt;secs&gt;</strong> to change<br />
Sending pings with df bit set and size 1470 bytes<br />
<a href="mailto:root@Juniper">root@Juniper</a>&gt; ping 192.168.37.29 do-not-fragment size 1470<br />
ping 192.168.37.29 do-not-fragment size 1470<br />
PING 192.168.37.29 (192.168.37.29): 1470 data bytes<br />
1478 bytes from 192.168.37.29: icmp_seq=0 ttl=64 time=1.434 ms<br />
1478 bytes from 192.168.37.29: icmp_seq=1 ttl=64 time=0.210 ms</p>
<p>&#8212; 192.168.37.29 ping statistics &#8212;<br />
4 packets transmitted, 4 packets received, 0% packet loss<br />
round-trip min/avg/max/stddev = 0.203/0.513/1.434/0.532 ms</p>
<p>IF packet size too large and df is set you get this:</p>
<p><a href="mailto:root@Juniper">root@Juniper</a>&gt; ping 192.168.37.29 do-not-fragment size 13000<br />
ping 192.168.37.29 do-not-fragment size 13000<br />
PING 192.168.37.29 (192.168.37.29): 13000 data bytes<br />
ping: sendto: Message too long</p>
]]></content:encoded>
			<wfw:commentRss>http://yurisk.info/2009/09/01/ping-setting-dont-fragment-bit-in-linuxfreebsdsolarisciscojuniper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
