{"id":202,"date":"2013-08-03T07:54:33","date_gmt":"2013-08-03T06:54:33","guid":{"rendered":"http:\/\/zsteva.info\/?p=202"},"modified":"2013-08-03T08:03:06","modified_gmt":"2013-08-03T07:03:06","slug":"detekcija-mreze-u-kojoj-ste","status":"publish","type":"post","link":"http:\/\/zsteva.info\/blog\/2013\/08\/detekcija-mreze-u-kojoj-ste\/","title":{"rendered":"Detekcija mreze u kojoj ste"},"content":{"rendered":"<p>Ponekad nam je u scriptama potrebno znati u kojoj smo mrezi, da li smo sa laptopom kod kuce, na poslu ili u kafi\u0107u. Detekcija nije previshe komplikovana, ali ako \u017eelimo proveriti sve mogu\u0107nosti onda to ve\u0107 nije jedna komanda. Sa WIFIem je relativno jednostavno ali ako detektujete i ethernet konekciju onda to jo\u0161 dodatko komplikuje situaciju.<\/p>\n<p>Meni je pre jednog godinu dana bilo potrebno da mogu da radim predprocesiranje ssh config fajla kako bih mogao da podesim IP adrese servera zavisno da li sam u LANu u jednoj firmi ili u drugoj ili kod ku\u0107e. Pa sam napakovao scriptu koja poku\u0161ava da detektuje sve situacije i korisniku dostavi jednostavan string iz koga grepom mo\u017ee da proveri skoro sve mogucnosti u samo par linija.<\/p>\n<p><code>#!\/bin\/bash<\/p>\n<p># Fake ifupdown environment<br \/>\nexport IFACE=\"$1\"<br \/>\nexport LOGICAL=\"$1\"<\/p>\n<p>[ \"$2\" != 'up' ] && exit 0<\/p>\n<p>[ \"$IFACE\" != \"lo\" ] || exit 0<\/p>\n<p>(<\/p>\n<p>IPADDR=$(\/sbin\/ifconfig $IFACE | sed -e '\/inet addr:\/!d;s\/^.*inet addr:\\([0-9\\.]\\+\\) .*$\/\\1\/')<\/p>\n<p>ESSID=$(\/sbin\/iwconfig $IFACE 2> \/dev\/null | sed -e '\/ESSID:\/!d;s\/^.*ESSID:\"\\([^\"]*\\)\".*$\/\\1\/')<\/p>\n<p>APMAC=$(\/sbin\/iwconfig $IFACE 2> \/dev\/null | sed -e '\/Access Point:\/!d;s\/^.*Access Point:\\s*\\(.*\\)\\s*$\/\\1\/' -e 's\/\\s*$\/\/' | tr 'A-Z' 'a-z')<\/p>\n<p>GATEWAY=$(\/sbin\/route -n | egrep '^0\\.0\\.\\0\\.0 ' | sed -e 's\/ \\+\/ \/g' | cut -d ' ' -f 2)<\/p>\n<p>GATEWAYMAC=\"\"<\/p>\n<p>if ping -n -w 3 -c 3 $GATEWAY > \/dev\/null 2>&1; then<br \/>\n\tGATEWAYMAC=$(\/usr\/sbin\/arp -n $GATEWAY | tail -1 | sed -e 's\/ \\+\/ \/g' | cut -d ' ' -f 3 | sed -e '\/^[A-Za-z0-9:]\\+$\/!d' | tr 'A-Z' 'a-z')<br \/>\nfi<\/p>\n<p>CONNPARM=\";IPADDR=${IPADDR};ESSID=${ESSID};APMAC=${APMAC};GATEWAY=${GATEWAY};GATEWAYMAC=${GATEWAYMAC};\"<\/p>\n<p>sudo -u zsteva bash -c \"echo '${CONNPARM}' > \/home\/zsteva\/.connparam\"<br \/>\n) &<\/p>\n<p>exit 0<br \/>\n<\/code><\/p>\n<p>U liniji sudo -u treba zameniti svoj username i lokaciju gde \u0107e nam se nalaziti connparam fajl, u kojem \u0107e biti snimljeni parametri koje kasnije mo\u017eemo gde god nam je potrebno da iskoristimo. A samu scriptu postaviti u <strong>\/etc\/NetworkManager\/dispatcher.d\/<\/strong> kako bi je NetworkManager pozvao kad se naka\u010dimo na neku mre\u017eu.<\/p>\n<p>U .connparam fajlu zavr\u0161i  linija nalik:<\/p>\n<p><code>;IPADDR=192.168.1.152;ESSID=HG532e-1EFF19;APMAC=4c:8b:ef:06:d9:d8;GATEWAY=192.168.1.1;GATEWAYMAC=4c:8b:ef:06:d9:d2;<\/code><\/p>\n<p>Obi\u010dnim <strong>case<\/strong> blokom u <strong>bash<\/strong>-u mo\u017eemo proveriti bilo koji elemenat u ovoj liniji i tako  prepoznati mre\u017eu u kojoj smo.<\/p>\n<p>Primer:<br \/>\n<code>        CONNPARAM=$(cat ~\/.connparam)<\/p>\n<p>        (<br \/>\n               case \"$CONNPARAM\" in<br \/>\n               *\\;ESSID=wifi.yyy\\;*)<br \/>\n                       echo \"#define LOC_LOC4 1\"<br \/>\n                       echo \"#define LOC_LOC5 1\"<br \/>\n                       ;;<br \/>\n               *\\;ESSID=wifi.xxx\\;*)<br \/>\n                       echo \"#define LOC_LOC1 1\"<br \/>\n                       ;;<br \/>\n               *\\;GATEWAYMAC=11:22:33:44:55:66\\;*)<br \/>\n                       echo \"#define LOC_LOC2 1\"<br \/>\n                       ;;<br \/>\n               esac<br \/>\n                cat ~\/.ssh\/config_template<br \/>\n        ) | cpp > ~\/.ssh\/config<br \/>\n<\/code><\/p>\n<p>Ovo je primer kojim predprocesiram ssh config template fajl.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ponekad nam je u scriptama potrebno znati u kojoj smo mrezi, da li smo sa laptopom kod kuce, na poslu ili u kafi\u0107u. Detekcija nije previshe komplikovana, ali ako \u017eelimo proveriti sve mogu\u0107nosti onda to ve\u0107 nije jedna komanda. Sa &hellip; <a href=\"http:\/\/zsteva.info\/blog\/2013\/08\/detekcija-mreze-u-kojoj-ste\/\">Continue reading <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":[],"categories":[6],"tags":[130,48,22,39],"_links":{"self":[{"href":"http:\/\/zsteva.info\/blog\/wp-json\/wp\/v2\/posts\/202"}],"collection":[{"href":"http:\/\/zsteva.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/zsteva.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/zsteva.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/zsteva.info\/blog\/wp-json\/wp\/v2\/comments?post=202"}],"version-history":[{"count":4,"href":"http:\/\/zsteva.info\/blog\/wp-json\/wp\/v2\/posts\/202\/revisions"}],"predecessor-version":[{"id":206,"href":"http:\/\/zsteva.info\/blog\/wp-json\/wp\/v2\/posts\/202\/revisions\/206"}],"wp:attachment":[{"href":"http:\/\/zsteva.info\/blog\/wp-json\/wp\/v2\/media?parent=202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/zsteva.info\/blog\/wp-json\/wp\/v2\/categories?post=202"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/zsteva.info\/blog\/wp-json\/wp\/v2\/tags?post=202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}