<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5828835554614962450</id><updated>2011-08-02T07:47:23.622-07:00</updated><category term='C++'/><category term='C#'/><category term='Coding'/><category term='VMWare'/><category term='Virtualization'/><category term='Technology'/><category term='Java'/><category term='Phone'/><category term='C'/><title type='text'>Anand Tomar</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tomaranand.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tomaranand.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anand</name><uri>http://www.blogger.com/profile/08716615495361578782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5828835554614962450.post-5869579860382494870</id><published>2008-07-28T00:03:00.000-07:00</published><updated>2008-08-08T08:53:49.865-07:00</updated><title type='text'>Home Made GPS Location Beamer</title><content type='html'>Mobility seems to be the new buzz. All the new smart phones coming out have some sort of location awareness built-in either through cell triangulation or through GPS.&lt;br /&gt;&lt;br /&gt;There are a bunch of companies working on location based social networks. Loopt [&lt;a href="http://www.loopt.com/"&gt;www.loopt.com&lt;/a&gt;] is one of them, the most well know i.e. There are a bunch more Plazes [&lt;a href="http://plazes.com/"&gt;http://plazes.com/&lt;/a&gt;], Zkout [&lt;a href="http://www.zkout.com/"&gt;www.zkout.com&lt;/a&gt;] .... All of them are doing similar and exciting stuff.&lt;br /&gt;&lt;br /&gt;To create a location based social recommendation engine is a very hard problem to solve but to post your GPS coordinates on the web very easy!!!!&lt;br /&gt;&lt;br /&gt;With the help of YUI [&lt;a href="http://developer.yahoo.com/yui/"&gt;http://developer.yahoo.com/yui/&lt;/a&gt;], Moto Q9c, C#, and AppEngine [&lt;a href="http://code.google.com/appengine/"&gt;http://code.google.com/appengine/&lt;/a&gt;] / Fire Eagle [&lt;a href="http://fireeagle.yahoo.net/"&gt;http://fireeagle.yahoo.net/&lt;/a&gt;] I have put up this page where anyone can track my whereabouts [Only works on Firefox :=)].&lt;br /&gt;&lt;a href="http://otb.appspot.com/render/tomaranand"&gt;&lt;br /&gt;http://otb.appspot.com/render/tomaranand&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This was a fun exercise. Will add more stuff (friend locator, location based services ... ) to it slowly ..... very slowly :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5828835554614962450-5869579860382494870?l=tomaranand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomaranand.blogspot.com/feeds/5869579860382494870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5828835554614962450&amp;postID=5869579860382494870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/5869579860382494870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/5869579860382494870'/><link rel='alternate' type='text/html' href='http://tomaranand.blogspot.com/2008/07/home-made-location-beamer.html' title='Home Made GPS Location Beamer'/><author><name>Anand</name><uri>http://www.blogger.com/profile/08716615495361578782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5828835554614962450.post-3393626833313684360</id><published>2008-04-07T01:05:00.000-07:00</published><updated>2008-08-08T08:55:15.916-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coding'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>getopt \ getopts for C++</title><content type='html'>Wrote a small function/class GetOpts for parsing the command line arguments (*argv[]/**argv) in C++.&lt;br /&gt;&lt;br /&gt;Feel free to use it!&lt;br /&gt;&lt;br /&gt;Src code can be downloaded at: [&lt;a href="http://tomaranand.googlepages.com/getopts.tar.gz"&gt;http://tomaranand.googlepages.com/getopts.tar.gz&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Below is a sample program that uses getopts.h&lt;/span&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;#include &lt;span class="str"&gt;"getopts.h"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="rem"&gt;/*&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;* Sample runs&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="rem"&gt;* ./main -h&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;* ./main --help&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="rem"&gt;* ./main -d -c /root/google-adapter.conf&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;* ./main --debug --conf /root/google-adapter.conf&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="rem"&gt;*/&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; main(&lt;span class="kwrd"&gt;int&lt;/span&gt; argc, &lt;span class="kwrd"&gt;char&lt;/span&gt; *argv[])&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;char&lt;/span&gt;* debug = NULL;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;char&lt;/span&gt;* conf = NULL;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;struct&lt;/span&gt; options opts[] = &lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;       { &amp;amp;debug, &lt;span class="str"&gt;"debug"&lt;/span&gt;, &lt;span class="str"&gt;"Set Debug"&lt;/span&gt;, &lt;span class="str"&gt;"d"&lt;/span&gt;, 0 },&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;       { &amp;amp;conf, &lt;span class="str"&gt;"conf"&lt;/span&gt;, &lt;span class="str"&gt;"Path to Configuration File"&lt;/span&gt;, &lt;span class="str"&gt;"c"&lt;/span&gt;, 1 }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    };&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    GetOpts _optprser = GetOpts(opts, 2, argc, argv);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt;(debug != NULL) {&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;        printf(&lt;span class="str"&gt;"debug is set\n"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        delete debug;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt;(conf != NULL) {&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;        printf(&lt;span class="str"&gt;"Value for conf is: %s\n"&lt;/span&gt;, conf);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        delete [] conf;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; 0;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Here is the header file getopts.h:&lt;/span&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;#ifndef GETOPTS_H&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="preproc"&gt;#define&lt;/span&gt; GETOPTS_H&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;struct&lt;/span&gt; options&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;char&lt;/span&gt; **vartoset;    &lt;span class="rem"&gt;//Address to the variable that will hold the value&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;char&lt;/span&gt; *name;        &lt;span class="rem"&gt;//Full name of the parameter&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;char&lt;/span&gt; *descp;    &lt;span class="rem"&gt;//Text description of the parameter&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;char&lt;/span&gt; *sname;    &lt;span class="rem"&gt;//Short name of the parameter&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;;        &lt;span class="rem"&gt;//1or0 0 if has no value (true/false) 1 if is going to have value&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;};&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; GetOpts&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        GetOpts(&lt;span class="kwrd"&gt;struct&lt;/span&gt; options [], &lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;char&lt;/span&gt;* []);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt;:&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; usage(&lt;span class="kwrd"&gt;char&lt;/span&gt; *, &lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;struct&lt;/span&gt; options []);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;};&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="preproc"&gt;#endif&lt;/span&gt;    &lt;span class="rem"&gt;/*GETOPTS_H*/&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5828835554614962450-3393626833313684360?l=tomaranand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomaranand.blogspot.com/feeds/3393626833313684360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5828835554614962450&amp;postID=3393626833313684360' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/3393626833313684360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/3393626833313684360'/><link rel='alternate' type='text/html' href='http://tomaranand.blogspot.com/2008/04/getopts-for-c.html' title='getopt \ getopts for C++'/><author><name>Anand</name><uri>http://www.blogger.com/profile/08716615495361578782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5828835554614962450.post-5840298199372233576</id><published>2008-03-31T21:46:00.001-07:00</published><updated>2008-03-31T22:46:59.822-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding'/><title type='text'>Print hex stream byte array &amp; ASCII representation  (Java)</title><content type='html'>I have found it useful to print the raw hex stream &amp;amp; it's ASCII representation of the network traffic to help debug some protocol issues.&lt;br /&gt;&lt;br /&gt;Here is a Java function to take a hex byte array and print it out to the STDOUT_FILENO&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; prettyPrintHex(&lt;span class="kwrd"&gt;byte&lt;/span&gt;[] data) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0, j = 0;   &lt;span class="rem"&gt;// loop counters&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; line_addr = 0;  &lt;span class="rem"&gt;// memmory address printed on the left&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    String line_to_print = &lt;span class="str"&gt;""&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (data.length == 0) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    StringBuilder _sbbuffer = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    &lt;span class="rem"&gt;//Loop through every input byte&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    String _hexline = &lt;span class="str"&gt;""&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    String _asciiline = &lt;span class="str"&gt;""&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;for&lt;/span&gt; (i = 0, line_addr = 0; i &amp;lt; data.length; i++, line_addr++) {&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;        &lt;span class="rem"&gt;//Print the line numbers at the beginning of the line&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; ((i % 16) == 0) {&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (i != 0) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;                _sbbuffer.append(_hexline);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;                _sbbuffer.append(&lt;span class="str"&gt;"\t...\t"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;                _sbbuffer.append(_asciiline + &lt;span class="str"&gt;"\n"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;            }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;            _asciiline = &lt;span class="str"&gt;""&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;            _hexline = String.format(&lt;span class="str"&gt;"%#06x "&lt;/span&gt;, line_addr);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        _hexline = _hexline.concat(String.format(&lt;span class="str"&gt;"%#04x "&lt;/span&gt;, data[i]));&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (data[i] &amp;gt; 31 &amp;amp;&amp;amp; data[i] &amp;lt; 127) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;            _asciiline = _asciiline.concat(String.valueOf((&lt;span class="kwrd"&gt;char&lt;/span&gt;) data[i]));&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;        } &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;            _asciiline = _asciiline.concat(&lt;span class="str"&gt;"."&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    &lt;span class="rem"&gt;// Handle the ascii for the final line, which may not be completely filled.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (i % 16 &amp;gt; 0) {&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;for&lt;/span&gt; (j = 0; j &amp;lt; 16 - (i % 16); j++) {&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;            _hexline = _hexline.concat(&lt;span class="str"&gt;"     "&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;        }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        _sbbuffer.append(_hexline);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;        _sbbuffer.append(&lt;span class="str"&gt;"\t...\t"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;        _sbbuffer.append(_asciiline);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;    System.&lt;span class="kwrd"&gt;out&lt;/span&gt;.println(_sbbuffer.toString());&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5828835554614962450-5840298199372233576?l=tomaranand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomaranand.blogspot.com/feeds/5840298199372233576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5828835554614962450&amp;postID=5840298199372233576' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/5840298199372233576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/5840298199372233576'/><link rel='alternate' type='text/html' href='http://tomaranand.blogspot.com/2008/03/print-hexstream-java.html' title='Print hex stream byte array &amp; ASCII representation  (Java)'/><author><name>Anand</name><uri>http://www.blogger.com/profile/08716615495361578782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5828835554614962450.post-8559470703448730325</id><published>2008-03-15T07:25:00.000-07:00</published><updated>2008-03-31T22:50:43.917-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>VM On USB: Carry your OS on USB!</title><content type='html'>Ever wanted to carry your desktop environment with you?&lt;br /&gt;&lt;br /&gt;An easy way would be to put your desktop environment(s) on a mass storage device along with the VMPlayer MSI and have a small executable that would take care of install/uninstall of VMWare Player and launching your VM(s).&lt;br /&gt;&lt;br /&gt;Here is a small tool in C# for doing this. Here is how it looks:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://tomaranand.googlepages.com/vmonusb-start-installing-vmplayer.png/vmonusb-start-installing-vmplayer-full.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px;" src="http://tomaranand.googlepages.com/vmonusb-start-installing-vmplayer.png/vmonusb-start-installing-vmplayer-full.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://tomaranand.googlepages.com/vmonusb-ready-start-vm.PNG/vmonusb-ready-start-vm-full.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px;" src="http://tomaranand.googlepages.com/vmonusb-ready-start-vm.PNG/vmonusb-ready-start-vm-full.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://tomaranand.googlepages.com/vmonusb-end-uninstalling-vmplayer.png/vmonusb-end-uninstalling-vmplayer-full.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px;" src="http://tomaranand.googlepages.com/vmonusb-end-uninstalling-vmplayer.png/vmonusb-end-uninstalling-vmplayer-full.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;These images above show the following sequence: &lt;br /&gt;&lt;br /&gt;   1. Installs VMWare Player.&lt;br /&gt;   2. Launches VM(s)&lt;br /&gt;   3. Uninstalls VmWare Player.&lt;br /&gt;&lt;br /&gt;The code follows the same sequence as well. &lt;br /&gt;&lt;br /&gt;The directory structure on the USB would look like:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://tomaranand.googlepages.com/vmonusb-usb-setup.png/vmonusb-usb-setup-full.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px;" src="http://tomaranand.googlepages.com/vmonusb-usb-setup.png/vmonusb-usb-setup-full.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are some files associated with it:&lt;br /&gt;&lt;br /&gt;USB-OS(F:)&lt;br /&gt;        |---- &lt;a href="http://tomaranand.googlepages.com/autorun.inf"&gt;autorun.inf&lt;/a&gt;&lt;br /&gt;        |---- &lt;a href="http://tomaranand.googlepages.com/config.icon"&gt;config.icon&lt;/a&gt;&lt;br /&gt;        |---- &lt;a href="http://tomaranand.googlepages.com/VMOnUSB.exe"&gt;VMOnUSB.exe&lt;/a&gt;&lt;br /&gt;        |---- &lt;a href="http://tomaranand.googlepages.com/LICENSE.txt"&gt;LICENSE.txt&lt;/a&gt;&lt;br /&gt;        |---- vmplayer-installer&lt;br /&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|----VMware Player.msi&lt;br /&gt;        |---- images&lt;br /&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|---- DamnSmallLinux3.4&lt;br /&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|---- DamnSmallLinux3.4.png&lt;br /&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|---- dsl.vmx&lt;br /&gt;&lt;br /&gt;Source can be downloaded from [&lt;a href="http://tomaranand.googlepages.com/VMOnUSB-src.zip"&gt;http://tomaranand.googlepages.com/VMOnUSB-src.zip&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;VM(s) can be downloaded from [&lt;a href="http://www.vmware.com/appliances/"&gt;http://www.vmware.com/appliances/&lt;/a&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5828835554614962450-8559470703448730325?l=tomaranand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomaranand.blogspot.com/feeds/8559470703448730325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5828835554614962450&amp;postID=8559470703448730325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/8559470703448730325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/8559470703448730325'/><link rel='alternate' type='text/html' href='http://tomaranand.blogspot.com/2008/03/vmonusb-carry-your-os-on-usb.html' title='VM On USB: Carry your OS on USB!'/><author><name>Anand</name><uri>http://www.blogger.com/profile/08716615495361578782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5828835554614962450.post-3893363769592445413</id><published>2008-02-09T17:44:00.000-08:00</published><updated>2008-02-10T14:18:48.619-08:00</updated><title type='text'>JVM for Windows Mobile</title><content type='html'>JVM can be installed on a Windows Mobile device using &lt;a href="http://www14.software.ibm.com/webapp/download/product.jsp?s=p&amp;id=PDRS-5HMUF5"&gt;WebSphere Everyplace Micro Environment&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All you need from there is the CLDC 1.1/MIDP 2.0 for Windows Mobile 5.0 Smartphone Edition/ARM executable. Install it on your computer.&lt;br /&gt;&lt;br /&gt;Then go to the installation directory and extract the only zip file there. In the extracted directory you will find docs/install.pdf. Just follow the simple steps showing you how to deploy J9 onto your phone. &lt;br /&gt;&lt;br /&gt;Now you can install Gmail on your windows mobile device (yes that was my only goal :=))&lt;br /&gt;&lt;br /&gt;To create a shortcut on your Start Menu create a .lnk file with the following contents in one line:&lt;br /&gt;&lt;br /&gt;38#"\J9\MIDP20\bin\j9midp20.exe" -classpath "\J9\MIDP20\apps\gmail\gmail-g.jar" "-Xbootclasspath:\J9\MIDP20\lib\jclMidp20\jclMidp20.jxe" javax.microedition.lcdui.AppManager "\J9\MIDP20\apps\gmail\gmail.jad"&lt;br /&gt;&lt;br /&gt;gmail-g.jar: &lt;a href="http://gmail.com/app/v1.5.0/L1/gmail-g.jar "&gt;http://gmail.com/app/v1.5.0/L1/gmail-g.jar &lt;/a&gt;&lt;br /&gt;gmail.jad: &lt;a href="http://gmail.com/app/gmail.jad?make=Generic&amp;model=Advanced+MIDP2&amp;ver="&gt;http://gmail.com/app/gmail.jad?make=Generic&amp;model=Advanced+MIDP2&amp;ver=&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5828835554614962450-3893363769592445413?l=tomaranand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomaranand.blogspot.com/feeds/3893363769592445413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5828835554614962450&amp;postID=3893363769592445413' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/3893363769592445413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/3893363769592445413'/><link rel='alternate' type='text/html' href='http://tomaranand.blogspot.com/2008/02/jvm-for-windows-mobile.html' title='JVM for Windows Mobile'/><author><name>Anand</name><uri>http://www.blogger.com/profile/08716615495361578782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5828835554614962450.post-3051193892534096625</id><published>2007-11-30T00:27:00.000-08:00</published><updated>2007-11-30T00:31:17.871-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Phone'/><title type='text'>Setting up OpenMoko</title><content type='html'>OpenMoko [&lt;a href="http://www.openmoko.org/"&gt;http://www.openmoko.org/&lt;/a&gt;] is a Linux based open software development platform.&lt;br /&gt;&lt;br /&gt;I got my OpenMoko device yesterday and tried installing it. It is a neat little device lets see where it goes after Google announced its Open Handset Alliance; Android [&lt;a href="http://code.google.com/android"&gt;http://code.google.com/android&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;So the first thing you want to do when you get your device is update the kernel and the rootfs on the phone.&lt;br /&gt;&lt;br /&gt;You will need to put the phone on uboot menu by pressing the AUX button along with the POWER button when not connected to a computer.&lt;br /&gt;&lt;br /&gt;1st thing that I did after that was to reset the timeout on the boot menu. Otherwise the phone will shutdown after 30 seconds when idle in uboot mode. Here is how you do it:&lt;br /&gt;&lt;br /&gt;Install the uucp package.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;cu -l /dev/ttyACM0&lt;br /&gt;GTA01Bv4 # setenv boot_menu_timeout 65000&lt;br /&gt;GTA01Bv4 # saveenv&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Download the latest OpenMoko image from their site @ &lt;a href="http://buildhost.openmoko.org/"&gt;http://buildhost.openmoko.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Download dfu-util from: &lt;a href="http://buildhost.openmoko.org/OM2007.1/tmp/deploy/images/dfu-util"&gt;http://buildhost.openmoko.org/OM2007.1/tmp/deploy/images/dfu-util&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;I installed the August 2007 image using the following commands.&lt;br /&gt;&lt;br /&gt;To update the kernel:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;./dfu-util -a kernel -R -D ./uImage-2.6.21.5-r3-fic-gta01.bin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To update the root filesystem: &lt;br /&gt;&lt;span style="font-style:italic;"&gt;./dfu-util -a rootfs -R -D ./OpenMoko-openmoko-devel-image-glibc-P1-August-Snapshot-20070819-fic-gta01.rootfs.jffs2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You are all set!&lt;br /&gt;&lt;br /&gt;Play with Qtopia [&lt;a href="http://www.qtopia.net/modules/mydownloads/"&gt;http://www.qtopia.net/modules/mydownloads/&lt;/a&gt;] as well. the UI for qtopia is pretty cool.&lt;br /&gt;On the Qtopia website you will see a download for NEO 1973 thats the one that you want. The commands are the same as above.&lt;br /&gt;&lt;br /&gt;For some reason the phone is not able to recognize the SIM card that I am putting in there. Trying to figure this one out :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5828835554614962450-3051193892534096625?l=tomaranand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomaranand.blogspot.com/feeds/3051193892534096625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5828835554614962450&amp;postID=3051193892534096625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/3051193892534096625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/3051193892534096625'/><link rel='alternate' type='text/html' href='http://tomaranand.blogspot.com/2007/11/setting-up-openmoko.html' title='Setting up OpenMoko'/><author><name>Anand</name><uri>http://www.blogger.com/profile/08716615495361578782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5828835554614962450.post-4401191060850140309</id><published>2007-11-25T23:12:00.000-08:00</published><updated>2008-03-31T21:31:47.678-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Coding'/><title type='text'>Using Libpcap</title><content type='html'>Libpcap (pcap) is a high level OpenSource API for packet-capturing framework. I was surprised to find out how ridiculously easy it is to use :-)&lt;br /&gt;&lt;br /&gt;libpcap can be downloaded at: &lt;a href="http://www.tcpdump.org/"&gt;http://www.tcpdump.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To do packet-sniffing using libpcap you need to:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Setup an interface to listen on. You can listen on all the available interfaces if you like.&lt;/li&gt;&lt;li&gt;Filtering network traffic.&lt;/li&gt;&lt;li&gt;Doing the real sniffing.&lt;/li&gt;&lt;/ol&gt;The people  at Berkley did a great job in making this API so easy to use.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Setting up an interface.&lt;br /&gt;&lt;/span&gt;This is very easy. You have 2 options:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;pcap_lookupdev&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;char&lt;/span&gt; *dev, errbuf[PCAP_ERRBUF_SIZE];&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;dev = pcap_lookupdev(errbuf);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (dev == NULL)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  fprintf(stderr, &lt;span class="str"&gt;"Couldn't find default device: %s\n"&lt;/span&gt;, errbuf);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;return&lt;/span&gt;(2);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;printf(&lt;span class="str"&gt;"Device: %s\n"&lt;/span&gt;, dev);&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;pcap_findalldevs&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;char&lt;/span&gt; *dev, errbuf[PCAP_ERRBUF_SIZE];&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; udev;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;pcap_if_t *alldevsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(pcap_findalldevs(&amp;amp;alldevsp, errbuf))&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  fprintf(stderr, &lt;span class="str"&gt;"Couldn't find devices: %s\n"&lt;/span&gt;, errbuf);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;return&lt;/span&gt;(3);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;char&lt;/span&gt; *trav = alldevsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;printf(&lt;span class="str"&gt;"Available Device(s): \n"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;while&lt;/span&gt;(trav != NULL)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  printf(&lt;span class="str"&gt;"\t%d) %s\n\t\t%s\n"&lt;/span&gt;,i++,trav-&amp;gt;name,trav-&amp;gt;description);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  trav = trav-&amp;gt;next;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;printf(&lt;span class="str"&gt;"Capture on Device (1 - %d): "&lt;/span&gt;, (i-1));&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;scanf (&lt;span class="str"&gt;"%d"&lt;/span&gt;,&amp;amp;udev);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;trav = alldevsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;while&lt;/span&gt;((udev-1) &amp;gt; 0)&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  trav = trav-&amp;gt;next;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  udev--;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;dev = trav-&amp;gt;name;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;printf(&lt;span class="str"&gt;"Device: %s\n"&lt;/span&gt;,dev);&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I am sure there are better ways of doing this. I thought this was the easiest to understand.&lt;br /&gt;&lt;br /&gt;Remember to free the memory: &lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;pcap_freealldevs(alldevsp);&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;One really cool thing about pcap is that it provides all the functions with a char ptr to a error string. errbuff should be of size PCAP_ERRBUF_SIZE.&lt;br /&gt;&lt;br /&gt;After this you just need to open the device for sniffing.&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; promiscuous= 1;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;pcap_t *handle = pcap_open_live(dev, BUFSIZ, promiscuous, 1000, errbuf);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (handle == NULL)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  fprintf(stderr, &lt;span class="str"&gt;"Couldn't open device %s: %s\n"&lt;/span&gt;, dev, errbuf);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;return&lt;/span&gt;(2);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Good practice to close the handle: &lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;pcap_close(handle);&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Filtering network traffic.&lt;/span&gt;&lt;br /&gt;Yes you can get all the packets and then decide what packets you want to look at OR HAVE BPF DO IT FOR YOU!!!!&lt;br /&gt;&lt;br /&gt;This is a two step process.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Compile the filter.&lt;/li&gt;&lt;li&gt;Set the filter.&lt;/li&gt;&lt;/ol&gt;Easily done :&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;char&lt;/span&gt; *FILTER = &lt;span class="str"&gt;"tcp"&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;struct&lt;/span&gt; bpf_program filter_code;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;bpf_u_int32 local_net, netmask;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="rem"&gt;/* Lookup the subnet and mask for the device */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(pcap_lookupnet(dev, &amp;amp;local_net, &amp;amp;netmask, errbuf) == -1)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;return&lt;/span&gt;(3);&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="rem"&gt;/* Compile the BPF filter expression */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(pcap_compile(handle, &amp;amp;filter_code, FILTER, 1, netmask) == -1)&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;return&lt;/span&gt;(4);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="rem"&gt;/* Apply the BPF filter */&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(pcap_setfilter(handle, &amp;amp;filter_code) == -1)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;return&lt;/span&gt;(5);&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sniff&lt;/span&gt;&lt;br /&gt;Starting sniffing is fairly easy. I am just interested in indefinitely looping (-1) for packets.&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;pcap_loop(handle, -1, packet_handler, NULL);&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;packet_handler is the callback function.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Now What&lt;br /&gt;&lt;/span&gt;cast cast cast! Do as much casting as possible :)&lt;br /&gt;Here is some snippet form the callback function:&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;span class="csharpcode"&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; packet_handler(u_char *args, &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;struct&lt;/span&gt; pcap_pkthdr *pkthdr, &lt;span class="kwrd"&gt;const&lt;/span&gt; u_char *packet)&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  printf(&lt;span class="str"&gt;"length of this packet (off wire): %d\n"&lt;/span&gt;, pkthdr-&amp;gt;len);&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;struct&lt;/span&gt; ether_header *ethheader;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;struct&lt;/span&gt; iphdr *ipheader;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;struct&lt;/span&gt; tcphdr *tcpheader;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;struct&lt;/span&gt; in_addr source, dest;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  ethheader = (&lt;span class="kwrd"&gt;struct&lt;/span&gt; ether_header *)packet;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  ipheader = (&lt;span class="kwrd"&gt;struct&lt;/span&gt; iphdr *)(packet + &lt;span class="kwrd"&gt;sizeof&lt;/span&gt;(&lt;span class="kwrd"&gt;struct&lt;/span&gt; ether_header));&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  tcpheader = (&lt;span class="kwrd"&gt;struct&lt;/span&gt; tcphdr *)(packet + &lt;span class="kwrd"&gt;sizeof&lt;/span&gt;(&lt;span class="kwrd"&gt;struct&lt;/span&gt; ether_header) + &lt;span class="kwrd"&gt;sizeof&lt;/span&gt;(&lt;span class="kwrd"&gt;struct&lt;/span&gt; iphdr));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;char&lt;/span&gt; *payload = (u_char *)(packet + &lt;span class="kwrd"&gt;sizeof&lt;/span&gt;(&lt;span class="kwrd"&gt;struct&lt;/span&gt; ether_header) + &lt;span class="kwrd"&gt;sizeof&lt;/span&gt;(&lt;span class="kwrd"&gt;struct&lt;/span&gt; iphdr) + &lt;span class="kwrd"&gt;sizeof&lt;/span&gt;(&lt;span class="kwrd"&gt;struct&lt;/span&gt; tcphdr));&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  source.s_addr = ipheader-&amp;gt;saddr;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  dest.s_addr = ipheader-&amp;gt;daddr;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  printf(&lt;span class="str"&gt;"From: %s:%i\t"&lt;/span&gt;, inet_ntoa(source), ntohs(tcpheader-&amp;gt;source));&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;  printf(&lt;span class="str"&gt;"To: %s:%i\n"&lt;/span&gt;, inet_ntoa(dest), ntohs(tcpheader-&amp;gt;dest));&lt;/pre&gt;&lt;br /&gt;&lt;pre class="alt"&gt;  ........&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now you have the payload do whatever you want to do with it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5828835554614962450-4401191060850140309?l=tomaranand.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomaranand.blogspot.com/feeds/4401191060850140309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5828835554614962450&amp;postID=4401191060850140309' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/4401191060850140309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5828835554614962450/posts/default/4401191060850140309'/><link rel='alternate' type='text/html' href='http://tomaranand.blogspot.com/2007/11/using-libpcap.html' title='Using Libpcap'/><author><name>Anand</name><uri>http://www.blogger.com/profile/08716615495361578782</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
