{"id":963,"date":"2008-08-31T21:02:35","date_gmt":"2008-08-31T18:02:35","guid":{"rendered":"http:\/\/www.imacandi.net\/sin\/blog\/?p=963"},"modified":"2008-08-31T21:02:35","modified_gmt":"2008-08-31T18:02:35","slug":"geek-stuff-integer-to-ip-address","status":"publish","type":"post","link":"https:\/\/www.imacandi.net\/sin\/blog\/2008\/08\/31\/geek-stuff-integer-to-ip-address.html","title":{"rendered":"[geek stuff] integer to ip address"},"content":{"rendered":"<p>Mai acu vreo saptamana asa, vine un gigel si intreaba pe NANOG cum poate converti un integer la o adresa IP, de exemplu din 1089055123 sa faca 64.233.169.147. trecand pe langa modalitatea matematica de a face aceasta conversie, o gramada de oameni au venit cu idei diferite despre cum poti realiza asta in diverse limbjae de programare, de la shell scripting la postscript. Enjoy!<\/p>\n<p><strong>bash<\/strong><\/p>\n<p style=\"padding-left: 30px;\">bash# inttoip(){ echo $[$1&gt;&gt;24].$[($1&gt;&gt;16)&amp;255].$[($1&gt;&gt;8)&amp;255].$[$1&amp;255]; }<br \/>\nbash# inttoip 1089055123<br \/>\n64.233.169.147<\/p>\n<p><strong>bc<\/strong><\/p>\n<p style=\"padding-left: 30px;\">$ bc<br \/>\nbc 1.06<br \/>\nCopyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.<br \/>\nThis is free software with ABSOLUTELY NO WARRANTY.<br \/>\nFor details type `warranty&#8217;.<br \/>\nobase=256<br \/>\n1089055123<\/p>\n<p style=\"padding-left: 30px;\">064 233 169 147<\/p>\n<p><strong>shell<\/strong><\/p>\n<p style=\"padding-left: 30px;\"># ping -c 1 1089055123 | head -n 1 | awk &#8216;{{{print $3}}}&#8217; | sed &#8216;s\/((.*))\/1\/&#8217;<br \/>\n64.233.169.147<\/p>\n<p><strong>REXX<\/strong><\/p>\n<p style=\"padding-left: 30px;\">PARSE VALUE D2X(ARG(1)) WITH a 3 b 5 c 7 d .<br \/>\nSAY X2D(a)&#8221;.&#8221;X2D(b)&#8221;.&#8221;X2D(c)&#8221;.&#8221;X2D(d)<\/p>\n<p><strong>PHP<\/strong><\/p>\n<p style=\"padding-left: 30px;\">echo long2ip(&#8216;1089055123&#8217;);<\/p>\n<p><strong>C<\/strong><\/p>\n<p style=\"padding-left: 30px;\">#include &lt;stdio.h&gt;<br \/>\nmain(int argc, char *argv[])<br \/>\n{<br \/>\nunion {<br \/>\nunsigned int i;<br \/>\nunsigned char c[4];<br \/>\n} ip;<br \/>\nint i = 0;<br \/>\nip.i = 1089055123;<br \/>\n\/* endian-neutral iteration: *\/<br \/>\nprintf(&#8220;%d.%d.%d.%dn&#8221;, ip.c[i++], ip.c[i++], ip.c[i++], ip.c[i++]);<br \/>\nreturn 0;<br \/>\n}<\/p>\n<p><strong>Perl (two liner)<\/strong><\/p>\n<p style=\"padding-left: 30px;\">sub ntoa_in_one_line { join(&#8220;.&#8221;, unpack(&#8220;CCCC&#8221;, pack(&#8220;N&#8221;, $_[0]))); }<br \/>\nprint ntoa_in_one_line(1089055123) . &#8220;n&#8221;;<\/p>\n<p><strong>awk<\/strong><\/p>\n<p style=\"padding-left: 30px;\">dec2ip<br \/>\nawk &#8216;{ print int($1 \/ 16777216) &#8220;.&#8221; int($1 % 16777216 \/ 65536) &#8220;.&#8221; int($1 % 65536 \/ 256) &#8220;.&#8221; int($1 % 256) }&#8217;<\/p>\n<p style=\"padding-left: 30px;\">ip2dec<br \/>\nawk &#8216;{ split($1, a, &#8220;.&#8221;); print a[1]*16777216 + a[2]*65536 + a[3]*256 + a[4] }&#8217;<\/p>\n<p><strong>Ruby<\/strong><\/p>\n<p style=\"padding-left: 30px;\">require &#8220;ipaddr&#8221;<br \/>\nprint &#8220;#{IPAddr.new(167772215,Socket::AF_INET)}n&#8221;<\/p>\n<p><strong>Perl (one liner)<\/strong><\/p>\n<p style=\"padding-left: 30px;\">$ perl -e &#8216;use IO::Socket; print inet_ntoa(pack(&#8220;N&#8221;,2066563929)).&#8221;n&#8221;;&#8217;<br \/>\n123.45.67.89<\/p>\n<p><strong>ITS TECO<\/strong><\/p>\n<p style=\"padding-left: 30px;\">1089055123u14&lt;q1&amp;377.\u0000j46i0jq1\/400.u1&gt;d$$<\/p>\n<p><strong>PostScript (in cazul in care vreti sa faca imprimanta calculele)<br \/>\n<\/strong><\/p>\n<p style=\"padding-left: 30px;\">##### BEGIN of ntoa.ps #####<br \/>\n%!<br \/>\n\/ntoa {<br \/>\n3 { dup 256 idiv exch 256 mod exch } repeat 256 mod<br \/>\n} def<\/p>\n<p style=\"padding-left: 30px;\">\/printa {<br \/>\n3 string cvs show 3 { (.) show 3 string cvs show } repeat<br \/>\n} def<\/p>\n<p style=\"padding-left: 30px;\">\/Helvetica findfont 36 scalefont setfont 36 444 moveto<\/p>\n<p style=\"padding-left: 30px;\">1089055123 ntoa printa<\/p>\n<p style=\"padding-left: 30px;\">showpage<br \/>\n###### END of ntoa.ps ######<\/p>\n<p>Fun, ain&#8217;t it, no ?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mai acu vreo saptamana asa, vine un gigel si intreaba pe NANOG cum poate converti un integer la o adresa IP, de exemplu din 1089055123 sa faca 64.233.169.147. trecand pe langa modalitatea matematica de a face aceasta conversie, o gramada de oameni au venit cu idei diferite despre cum poti realiza asta in diverse limbjae &hellip; <a href=\"https:\/\/www.imacandi.net\/sin\/blog\/2008\/08\/31\/geek-stuff-integer-to-ip-address.html\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">[geek stuff] integer to ip address<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"ngg_post_thumbnail":0,"footnotes":""},"categories":[2],"tags":[7],"class_list":["post-963","post","type-post","status-publish","format-standard","hentry","category-diverse","tag-computers"],"_links":{"self":[{"href":"https:\/\/www.imacandi.net\/sin\/blog\/wp-json\/wp\/v2\/posts\/963","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.imacandi.net\/sin\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.imacandi.net\/sin\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.imacandi.net\/sin\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.imacandi.net\/sin\/blog\/wp-json\/wp\/v2\/comments?post=963"}],"version-history":[{"count":0,"href":"https:\/\/www.imacandi.net\/sin\/blog\/wp-json\/wp\/v2\/posts\/963\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.imacandi.net\/sin\/blog\/wp-json\/wp\/v2\/media?parent=963"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.imacandi.net\/sin\/blog\/wp-json\/wp\/v2\/categories?post=963"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.imacandi.net\/sin\/blog\/wp-json\/wp\/v2\/tags?post=963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}