<?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; Linux</title>
	<atom:link href="http://yurisk.info/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://yurisk.info</link>
	<description>Yuri Slobodyanyuk&#039;s blog on IT Security and Networking</description>
	<lastBuildDate>Mon, 16 Apr 2012 17:23:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Query non-standard port of SNMP</title>
		<link>http://yurisk.info/2010/08/11/query-non-standard-port-of-snmp/</link>
		<comments>http://yurisk.info/2010/08/11/query-non-standard-port-of-snmp/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 06:14:45 +0000</pubDate>
		<dc:creator>Yuri</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://yurisk.info/?p=1024</guid>
		<description><![CDATA[Sometimes the simple things are the ones to perplex you the most . Today I needed to add an SNMP monitoring of the Radware Linkproof listening on the port 7777 .Not a big deal, I thought. But before doing it in the monitoring system I just wanted to be sure and tried to query the [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes the simple things are the ones to perplex you the most . Today I needed to add an SNMP monitoring of the Radware Linkproof listening on the port 7777 .Not a big deal, I thought. But before doing it in the monitoring system I just wanted to be sure and tried to query the Linkproof using snmpwalk . To much of my surprise in its help there was no mention how to do it . Searching the Google brought me –p &lt;port&gt; that didn&#8217;t work though. The solution is actually quite simple – just immediately after the<br />
IP of the device put &#58;&lt;port&gt; e.g.</p>
<div class="cmd">root@darkstar# snmpwalk -v 2c -c notpublic 12.120.186.8&#58;7777</div>
]]></content:encoded>
			<wfw:commentRss>http://yurisk.info/2010/08/11/query-non-standard-port-of-snmp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MAC finder script</title>
		<link>http://yurisk.info/2010/07/02/mac-finder-script/</link>
		<comments>http://yurisk.info/2010/07/02/mac-finder-script/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 05:35:37 +0000</pubDate>
		<dc:creator>Yuri</dc:creator>
				<category><![CDATA[Checkpoint NG/NGX]]></category>
		<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Esafe]]></category>
		<category><![CDATA[Fortigate]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[Checkpoint]]></category>

		<guid isPermaLink="false">http://yurisk.info/?p=959</guid>
		<description><![CDATA[While I don&#8217;t like going down to Layer 2 , recently I had to do it &#8211; I didn&#8217;t know IP address of the Cisco router I wanted to connect to but I had access to the Cisco router sitting in the same network. That would be pretty easy to do #show arp on this [...]]]></description>
			<content:encoded><![CDATA[<p>While I don&#8217;t like going down to Layer 2 , recently I had to do it &#8211; I didn&#8217;t know IP address of the Cisco router I wanted to connect to but I had access to the Cisco router sitting in the same network. That would be pretty easy to do #show arp on this router and then search on Google to whom belongs each MAC  if it wasn&#8217;t the subnet mask of /26. Copy pasting each entry of the ARP table into Google didn&#8217;t look like a lot of fun. So I wrote a python script that reads MAC addresses in bulk from command line and using downloaded beforehand database of MAC-vendor translations prints vendor for each MAC address. It works for &#35;show arp on CIsco,&#35;show mac-address-table on CIsco switches, &#35;arp -en  on Linux (means including Checkpoint), &#35;arp -a on Freebsd ,&#35;show arp of Junos from Juniper, &#35;get sys arp on Fortigate.<br />
Below is the script.<br />
Here&#58;<br />
<strong>mac-database.txt</strong> &#8211; file containing MAC-vendor translation in format &lt;MAC 6 hex digits as a sequence&gt; &lt;VENDOR&gt;, I used <a href="http://standards.ieee.org/regauth/oui/oui.txt"> standards.ieee.org/regauth/oui/oui.txt </a> as the source with a bit of sed, but if you want ready to use file I recommend <strong>nmap-mac-prefixes</strong> from nmap source-code distribution <a href="http://nmap.org/svn/nmap-mac-prefixes">http://nmap.org/svn/nmap-mac-prefixes</a><br />
Download script (to make sure formatting is preserved, an important thing for Python)<br />
<a href="http://yurisk.info/scripts/mac-finder.py">http://yurisk.info/scripts/mac-finder.py</a><br />Script AND mac database from nmap project &#8211; <a href="http://yurisk.info/scripts/mac.tar.gz"> http://yurisk.info/scripts/mac.tar.gz</a></p>
<div class="cmdout">
<pre>
&#35;!/usr/bin/python
&#35;This script accepts MAC addresses from the command line and
&#35;prints vendor for each mac address
&#35; Author&#58;Yuri, yurisk@yurisk.info,06.2010
import sys
import re
&#35;This function removes from MACs colon or dot and returns MAC as a sequence of HEX chars
def dotreplace(matchobj):
&nbsp;&nbsp;       if matchobj.group(0) == &#39;.&#39;&#58;
&nbsp;&nbsp;&nbsp;&nbsp;            return &#39;&#39;
&nbsp;&nbsp;       elif  matchobj.group(0) == &#39;&#58;&#39;&#58;
&nbsp;&nbsp;&nbsp;&nbsp;            return &#39;&#39;
&#35;open file with MAC addresses and vendors database,it has form xxxx &lt;Vendor&gt;
macs=open(&#39;mac-database.txt&#39;,&#39;r&#39;)
macs_lines=macs.readlines()
&#35;Read from stdinput
data = sys.stdin.readlines()
for ppp in data:
       popa=re.search(&#39;.*([a-f0-9]{4}\.[a-f0-9]{4}\.[a-f0-9]{4}).*&#39;,ppp,re.IGNORECASE)
       if popa:
             newpopa=re.sub(&#39;\.&#39;, dotreplace,popa.group(1))[0:6]
             newpopa_re=re.compile(newpopa,re.IGNORECASE)
             for mac_db in macs_lines:
                 vendor=re.search(newpopa_re,mac_db)
                 if vendor:
                    print ppp.strip(),mac_db[7:]
       popalinux = re.search(&#39;.*([a-f0-9]{2}&#58;[a-f0-9]{2}&#58;[a-f0-9]{2}&#58;[a-f0-9]{2}&#58;[a-f0-9]{2}&#58;[a-f0-9]{2}).*&#39;,ppp,re.IGNORECASE)
       if popalinux&#58;
             newpopalinux=re.sub(&#39;&#58;&#39;,dotreplace,popalinux.group(1))[0&#58;6]
             newpopalinux_re=re.compile(newpopalinux,re.IGNORECASE)
             for mac_db in macs_lines&#58;
                 vendor=re.search(newpopalinux_re,mac_db)
                 if vendor&#58;
                    print ppp.strip(),mac_db[7&#58;]

       popadash = re.search('.*([a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}).*',ppp,re.IGNORECASE)
       if popadash:
             newpopadash=re.sub('-',dotreplace,popadash.group(1))[0:6]
             newpopadash_re=re.compile(newpopadash,re.IGNORECASE)
             for mac_db in macs_lines:
                 vendor=re.search(newpopadash_re,mac_db)
                 if vendor:
                    print ppp.strip(),mac_db[7:]
</pre>
</div>
<p>Running it:</p>
<div class="cmd">
[root@darkstar ]# ./mac-finder.py</div>
<div class="cmdout">
&lt;now I copy paste output from arp -a in BSD&gt;<br />$ arp -a<br />
(10.99.99.150) at 00:50:56:95:74:72 on em0 [ethernet]<br />
 (10.99.99.254) at 00:09:0f:31:c8:24  on em0 [ethernet]<br /> &lt;Hit CTRL+D to signal the end of input&gt;<br />
 (10.99.99.150) at 00:50:56:95:74:72 on em0 [ethernet] VMware, Inc.<br />
 (10.99.99.254) at 00:09:0f:31:c8:24 on em0 [ethernet] Fortinet Inc.</div>
]]></content:encoded>
			<wfw:commentRss>http://yurisk.info/2010/07/02/mac-finder-script/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Top 10 usernames used in SSH brute force</title>
		<link>http://yurisk.info/2010/06/04/top-10-usernames-used-in-ssh-brute-force/</link>
		<comments>http://yurisk.info/2010/06/04/top-10-usernames-used-in-ssh-brute-force/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 09:08:23 +0000</pubDate>
		<dc:creator>Yuri</dc:creator>
				<category><![CDATA[Awk weekly]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[awk weekly]]></category>
		<category><![CDATA[Stories from the trenches]]></category>

		<guid isPermaLink="false">http://yurisk.info/?p=874</guid>
		<description><![CDATA[In continuation to yesterday&#8217;s post I thought it would be interesting to know statistics of the usernames used in those bruteforce probes. I thought and I did . Find below awk/sed script to get usernames for failed ssh login attempts and sort it for statistics and also list of the usernames I got from my [...]]]></description>
			<content:encoded><![CDATA[<p>In continuation to yesterday&#8217;s post I thought it would be interesting to know statistics of the usernames used in those bruteforce probes. I thought and I did . Find below awk/sed script to get usernames for failed ssh login attempts and sort it for statistics and also list of the usernames I got from my server. The full list of usernames can be found at the end.<br />
The script:</p>
<div class="cmd">awk  &#39;/Failed password for/  &#39;  /var/log/secure*  | sed  &#39;s/.* \([[:print:]]\+\) from .*/  \1  /g &#39; | sort | uniq -c | sort -n -k1</div>
<p>And the winners are:</p>
<table summary="The table listing top 10 usernames used in real cracking attampts on SSH service">
<caption>The table listing top 10 usernames used in real cracking attampts on SSH service</caption>
<tbody>
<tr class="thcolor">
<th>Username</th>
<th>Number of times seen</th>
</tr>
<tr>
<td>mysql</td>
<td>232</td>
</tr>
<tr class="cellcolor">
<td>info</td>
<td>252</td>
</tr>
<tr>
<td>postgres</td>
<td>317</td>
</tr>
<tr class="cellcolor">
<td>guest</td>
<td>435</td>
</tr>
<tr>
<td>nagios</td>
<td>452</td>
</tr>
<tr class="cellcolor">
<td>user</td>
<td>459</td>
</tr>
<tr>
<td>oracle</td>
<td>598</td>
</tr>
<tr class="cellcolor">
<td>admin</td>
<td>884</td>
</tr>
<tr>
<td>test</td>
<td>1017</td>
</tr>
<tr class="cellcolor">
<td>root</td>
<td>22058</td>
</tr>
</tbody>
</table>
<p>Full list of the usernames <a href="http://yurisk.info/usernames.log">Usernames.log</a></p>
]]></content:encoded>
			<wfw:commentRss>http://yurisk.info/2010/06/04/top-10-usernames-used-in-ssh-brute-force/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SSH brute force is on the rise</title>
		<link>http://yurisk.info/2010/06/03/ssh-brute-force-on-the-rise/</link>
		<comments>http://yurisk.info/2010/06/03/ssh-brute-force-on-the-rise/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 19:31:43 +0000</pubDate>
		<dc:creator>Yuri</dc:creator>
				<category><![CDATA[Awk weekly]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[awk weekly]]></category>
		<category><![CDATA[Stories from the trenches]]></category>

		<guid isPermaLink="false">http://yurisk.info/?p=865</guid>
		<description><![CDATA[SSH brute forcing is still in high demand. I have , for my own testing and pleasure, virtual servers scattered around the world. All of them being of the Linux/BSD family I manage by SSH. The other quirk of mine is that I have on purpose no static IP at home for various reasons (saving [...]]]></description>
			<content:encoded><![CDATA[<p>SSH brute forcing is still in high demand. I have , for my own testing and pleasure, virtual servers scattered around the world. All of them being of the Linux/BSD family  I manage by SSH. The other quirk of mine is that I have on purpose no static IP at home for various reasons (saving  me money being one of them). And to manage those servers by SSH I implement a very simple security rule – from Any to SSH port allow. Port is left to be standard one – 22. After all that time my server was broken into just once , when I gave access by SSH to the colleague of mine and later he changed the password to something crackable in 5 secs. Since then I  &#8211; first don’t give ssh access to colleagues <img src='http://yurisk.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , and second &#8211; look from time to time at ssh failed attempts logs for amusement.</p>
<p>My observations so far are :<br />
- ssh brute forcing is still/yet/again extremely popular and increasing . On average after unfirewalled access to port 22 is discovered it goes to ~ 5000-6000 attempts per day .<br />
- crackers do have some means of communicating between them (market economy ?) – my servers have static IPs and first days after its set up brute force login attempts are as low as 2-10 a day. But once the server IP has been discovered by determined crackers it goes up in numbers very quickly.<br />
- origins of the attacks correlate pretty well with the known sources of Spam/Malware : Brazil, China, US etc.<br />
If you’d like to look at your SSH logs and do some stats on failed attempts here is the awk one-liner I use. Enjoy.</p>
<div class="cmd">awk &#45;&#45;re-interval &#39;/authentication failure/ {}<br />
/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]/ {match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]/,IP);  IPS[IP[0]]++ } END { for (cracker_ips in IPS) print cracker_ips &quot;  &quot; IPS[cracker_ips]}&#39; /var/log/secure.1 | sort -n -k2</div>
<div class="cmdout">190.202.85.3  1<br />
194.192.14.7  1<br />
212.111.199.3  1<br />
222.124.195.1  1<br />
210.71.71.1  2<br />
89.138.195.1  5<br />
212.156.65.7  25<br />
202.117.51.2  32<br />
210.51.48.7  32<br />
115.146.138.5  47<br />
60.191.98.5  88<br />
174.120.208.5  107<br />
61.129.60.2  165<br />
202.103.180.4  175<br />
213.251.192.2  239<br />
91.82.101.4  242<br />
220.173.60.6  264<br />
12.11.210.3  271<br />
144.16.72.1  291<br />
212.118.5.1  360<br />
66.11.122.1  384<br />
211.160.160.1  703<br />
190.12.66.1  999<br />
83.19.184.3  1176<br />
67.213.8.2  4955<br />
199.187.120.2  5312<br />
95.0.180.2  6680<br />
85.131.163.5  7685</div>
<p>NB Crackers IPs are not sanitized</p>
]]></content:encoded>
			<wfw:commentRss>http://yurisk.info/2010/06/03/ssh-brute-force-on-the-rise/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Alert on change of SOA in domain</title>
		<link>http://yurisk.info/2010/05/22/alert-on-change-of-soa-in-domain/</link>
		<comments>http://yurisk.info/2010/05/22/alert-on-change-of-soa-in-domain/#comments</comments>
		<pubDate>Sat, 22 May 2010 12:27:57 +0000</pubDate>
		<dc:creator>Yuri</dc:creator>
				<category><![CDATA[Awk weekly]]></category>
		<category><![CDATA[awk weekly]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://yurisk.info/?p=819</guid>
		<description><![CDATA[This comes from unpleasant experience of mine. One of my clients’ domain records (MX for the case involved) was mistakenly changed. While it was a human error and trying to fix humans is rolling the rock of Sisyphus,damage would be much lesser had I known about the change immediately . To take care of this [...]]]></description>
			<content:encoded><![CDATA[<p>This comes from unpleasant experience of mine. One of my clients’ domain records (MX for the case involved) was mistakenly changed. While it was a human error and trying to fix humans is rolling the rock of Sisyphus,damage would be much lesser had I known about the change immediately . To take care of this side of the story I wrote awk one-liner that when invoked by cron compares  SOA of the domain with  the one saved locally in the file. If there is a discrepancy the mail is sent.<br />I tried to find more elegant solution on Google but found zillions of tools too complex for such a simple task.</p>
<div class="cmdout">
#!/bin/bash<br />
awk &#39;  BEGIN {&quot;dig +short soa yurisk.info&quot;| getline<br />
  SOA_NOW=$3<br />
getline SOA &lt; &quot;serial-yurisk.info&quot;<br />
  if (SOA_NOW != SOA) { print (&quot; mail -c yurisk@yurisk.info -s \&quot;SOA of domain yurisk.info has changed\&quot;  president@whitehouse.gov&quot;) | &quot;/bin/bash&quot; }}&#39; </div>
<div class="cmdout">serial-yurisk.info:<br />2010012000</div>
]]></content:encoded>
			<wfw:commentRss>http://yurisk.info/2010/05/22/alert-on-change-of-soa-in-domain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ping – setting don&#8217;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[Awk weekly]]></category>
		<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Fortigate]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[awk weekly]]></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 [...]]]></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</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><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 = (&#8220;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(&#8220;/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 = (&#8220;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(&#8220;/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</p>
<p><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</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 = (&#8220;ping   -s &#8220;    &#8220;10.99.99.158 &#8221; size  &#8221; 3&#8243;)<br />
print cmd | &#8220;/bin/bash&#8221;<br />
close(&#8220;/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> &#8211; 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 = (&#8220;ping   -s &#8220;    &#8220;10.99.99.158 &#8221; size  &#8221; 3&#8243;)<br />
print cmd | &#8220;/bin/bash&#8221;<br />
close(&#8220;/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><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><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>
		<item>
		<title>Autologin Expect scripts for telnet/ssh</title>
		<link>http://yurisk.info/2008/09/21/autologin-expect-scripts-for-telnetssh/</link>
		<comments>http://yurisk.info/2008/09/21/autologin-expect-scripts-for-telnetssh/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 17:28:02 +0000</pubDate>
		<dc:creator>Yuri</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Expect]]></category>

		<guid isPermaLink="false">http://yurisk.wordpress.com/?p=25</guid>
		<description><![CDATA[Tired of typing over and over  your username/password when using telnet/ssh ? Here are Expect http://expect.nist.gov/ scripts to autologin by Telnet and ssh Notes: - Yes, it is not secure to keep you username/password saved somewhere, so know what you do . In my opinion  as long as this is a dedicated for remote logins [...]]]></description>
			<content:encoded><![CDATA[<p>Tired of typing over and over  your username/password when using<br />
telnet/ssh ? Here are Expect <a href="http://expect.nist.gov/">http://expect.nist.gov/</a> scripts to autologin by Telnet and ssh<br />
Notes:<br />
- Yes, it is not secure to keep you username/password saved somewhere, so know<br />
what you do . In my opinion  as long as this<br />
is a dedicated for remote logins server, that has no access from outside, and hardened accordingly<br />
(pertinent to the scripts &#8211; only owner/root can read user&#8217;s home folder, etc.,) the risk is acceptable.</p>
<p>Note 2: password is saved in a file named &#8220;sword&#8221;</p>
<p>cat tel<br />
#!/usr/local/bin/expect   Change to the location of your Expect package<br />
 <br />
proc Usage {} {<br />
  puts &#8220;\n tel &lt;equipment to enter&gt; \n&#8221;<br />
  return<br />
            }<br />
 </p>
<p>set  argnumber  [llength $argv]<br />
 <br />
if {$argnumber==0} {<br />
      puts &#8220;You need to specify at least one piece of equipment to log into\n&#8221;<br />
      Usage<br />
      exit<br />
 <br />
   }  elseif {$argnumber&gt;1}  {<br />
       puts &#8220;You specified too many arguments, only one please\n&#8221;<br />
 <br />
      Usage<br />
       exit<br />
                  }<br />
 <br />
set hostName [lindex $argv 0]<br />
 <br />
 puts &#8220;Entering $hostName&#8221;<br />
 set username &#8220;myusername&#8221;<br />
 set HANDL [open "sword"]<br />
 set password [gets $HANDL]<br />
 close $HANDL<br />
 spawn telnet $hostName<br />
 expect {[Uu]sername*} {<br />
  send &#8220;$username\r&#8221;<br />
 }<br />
 <br />
 expect {[Pp]assword:} {<br />
 send &#8220;$password\r&#8221;<br />
 }<br />
 </p>
<p>#Cisco specific block &#8211; to enter enable level, you may remove this block if not needed<br />
 expect {*#}  {<br />
 send &#8220;enable\r&#8221;  }<br />
 <br />
 expect {[Pp]assword:} {<br />
 send &#8220;$password\r&#8221;<br />
 }<br />
 #End of Cisco specific block</p>
<p> interact<br />
 </p>
<p>Now SSH login script<br />
&gt; cat essh<br />
#!/usr/local/bin/expect   Change to the location of your Expect package<br />
 <br />
proc Usage {} {<br />
  puts &#8220;\n essh  &lt;equipment to enter&gt; \n&#8221;<br />
  return<br />
            }<br />
 </p>
<p>set  argnumber  [llength $argv]<br />
 <br />
if {$argnumber==0} {<br />
      puts &#8220;You need to specify at least one piece of equipment to log into\n&#8221;<br />
      Usage<br />
      exit<br />
 <br />
   }  elseif {$argnumber&gt;1}  {<br />
       puts &#8220;You specified too many arguments, only one please\n&#8221;<br />
 <br />
      Usage<br />
       exit<br />
                  }<br />
 <br />
set hostName [lindex $argv 0]<br />
 <br />
 puts &#8220;Entering $hostName&#8221;<br />
 set username &#8220;myusername&#8221;<br />
 set HANDL [open "sword"]<br />
 set password [gets $HANDL]<br />
 spawn ssh $hostName<br />
 <br />
 expect {[Pp]assword:} {<br />
 send &#8220;$password\r&#8221;<br />
 }</p>
<p>#Again goes Cisco &#8211; specific block , remove if not needed<br />
 expect {*#}  {<br />
 send &#8220;enable\r&#8221;  }<br />
 <br />
 expect {[Pp]assword:} {<br />
 send &#8220;$password\r&#8221;<br />
 }<br />
 #End of Cisco &#8211; specific block</p>
<p> interact</p>
]]></content:encoded>
			<wfw:commentRss>http://yurisk.info/2008/09/21/autologin-expect-scripts-for-telnetssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>find quicky</title>
		<link>http://yurisk.info/2008/09/06/find/</link>
		<comments>http://yurisk.info/2008/09/06/find/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 07:55:17 +0000</pubDate>
		<dc:creator>Yuri</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://yurisk.info/?p=4</guid>
		<description><![CDATA[The few find templates I find useful in a day to day job. The ones below were of great help when I had to clean Esafe that had more than 100,000 files in the spool ! So usual shell wild-card expansion didn&#8217;t work (try to do ls in a folder with 130000 files So I [...]]]></description>
			<content:encoded><![CDATA[<p>The few <code>find</code> templates I find useful in a day to day job.</p>
<p>The ones below were of great help when I had to clean Esafe that had more<br />
than 100,000 files in the spool ! So usual shell wild-card expansion didn&#8217;t work<br />
(try to do <code>ls</code> in a folder with 130000 files <img src='http://yurisk.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  So I removed files<br />
by date &#8211; files created last 24 hours per remove.<br />
<code><br />
find . -mtime 0 -exec rm -f {} \;<br />
find . -mtime 0 # find files created/modified within the past 24 hours<br />
find . -mtime -1 # find files created/modified within the past 0 - 24 hours<br />
find . -mtime 1 # find files modified between 24 and 48 hours ago<br />
find . -mtime +1 # find files modified more than 48 hours ago<br />
find . -mmin +3 -mmin -10 # find files modifed between 4 and 9 minutes<br />
</code><br />
Default is  logical AND between clauses<br />
NB the <code>-regexp</code> switch to the find looks for a complete match !<br />
 Finding by permission pattern and then removing:<br />
- FInd files that have at LEAST following permissions set<br />
<code>find . -type f -perm -0750 -exec rm -f {} \;</code><br />
 Find files with ANy of the permissions set:<br />
<code>find . -type f -perm +0750 -exec rm -f {} \;</code><br />
and finally find files with pattern EXACTLY matching :<br />
<code>find . -type f -perm 0750 -exec rm -f {} \;</code><br />
Find by UID filetype and size:<br />
	<code>find . -type f -uid 0 -size +2k -exec ls -l {} \;</code><br />
	modifiers to size switch: b w k c</p>
]]></content:encoded>
			<wfw:commentRss>http://yurisk.info/2008/09/06/find/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

