সম্পাদিত ( 2014-06-01 2018-01-09)
অনেক ইন্টারফেস এবং প্রতিটি ইন্টারফেসে অনেকগুলি আইপি কনফিগার করা শক্তিশালী কনফিগারেশনের জন্য, আমি সঠিক ইন্টারফেস এবং আইপি-র ভিত্তিতে, অনুসন্ধানের জন্য একটি খাঁটি বাশ স্ক্রিপ্ট লিখেছি (উপর ভিত্তি করে নয় 127.0.0.1
) । আমি এই উত্তরের একেবারে নীচে এই স্ক্রিপ্টটি পোস্ট করছি।default route
ইন্ট্রো
যেমন উভয় ওস আছে সজোরে আঘাত ডিফল্টরূপে ইনস্টল করা, ম্যাক এবং লিনাক্স উভয়ের জন্য একটি বাশ টিপ রয়েছে:
স্থানীয় সমস্যাটি এর ব্যবহার দ্বারা প্রতিরোধ করা হয়েছে LANG=C
:
myip=
while IFS=$': \t' read -a line ;do
[ -z "${line%inet}" ] && ip=${line[${#line[1]}>4?1:2]} &&
[ "${ip#127.0.0.1}" ] && myip=$ip
done< <(LANG=C /sbin/ifconfig)
echo $myip
এটিকে একটি ক্রিয়াকলাপে স্থাপন করা:
সংক্ষিপ্ত:
getMyIP() {
local _ip _line
while IFS=$': \t' read -a _line ;do
[ -z "${_line%inet}" ] &&
_ip=${_line[${#_line[1]}>4?1:2]} &&
[ "${_ip#127.0.0.1}" ] && echo $_ip && return 0
done< <(LANG=C /sbin/ifconfig)
}
সাধারণ ব্যবহার:
getMyIP
192.168.1.37
অভিনব পরিপাটি:
getMyIP() {
local _ip _myip _line _nl=$'\n'
while IFS=$': \t' read -a _line ;do
[ -z "${_line%inet}" ] &&
_ip=${_line[${#_line[1]}>4?1:2]} &&
[ "${_ip#127.0.0.1}" ] && _myip=$_ip
done< <(LANG=C /sbin/ifconfig)
printf ${1+-v} $1 "%s${_nl:0:$[${#1}>0?0:1]}" $_myip
}
ব্যবহার:
getMyIP
192.168.1.37
বা, একই ফাংশন চলছে, কিন্তু একটি যুক্তি দিয়ে:
getMyIP varHostIP
echo $varHostIP
192.168.1.37
set | grep ^varHostIP
varHostIP=192.168.1.37
নোট: যুক্তি ছাড়াই, STDOUT, আইপি এবং একটি নিউলাইন , এই যুক্তির সাহায্যে এই ফাংশন আউটপুটটি কিছুই মুদ্রিত হয় না, তবে আর্গুমেন্ট নামে একটি ভেরিয়েবল তৈরি হয় এবং নিউলাইন ছাড়াই আইপি ধারণ করে ।
নোটা 2: এটি দেবিয়ান , ল্যাসি হ্যাকড নাস এবং ম্যাক্সওয়ে পরীক্ষা করা হয়েছিল। এটি যদি আপনার পরিবেশের অধীনে কাজ না করে তবে আমি ফিড-ব্যাক দ্বারা খুব আগ্রহী হব!
এই উত্তরের পুরানো সংস্করণ
(কারণ উপর ভিত্তি করে মোছা sed
, না bash
।)
সতর্কতা: লোকেলগুলি নিয়ে একটি সমস্যা আছে!
দ্রুত এবং ছোট:
myIP=$(ip a s|sed -ne '/127.0.0.1/!{s/^[ \t]*inet[ \t]*\([0-9.]\+\)\/.*$/\1/p}')
বিস্ফোরিত (খুব কাজ;)
myIP=$(
ip a s |
sed -ne '
/127.0.0.1/!{
s/^[ \t]*inet[ \t]*\([0-9.]\+\)\/.*$/\1/p
}
'
)
সম্পাদনা:
যেভাবে! এটি ম্যাক ওএসে কাজ করছে না বলে মনে হচ্ছে ...
ঠিক আছে, এটি আমার লিনাক্সের মতো ম্যাক ওএসেও একই রকম কাজ বলে মনে হচ্ছে :
myIP=$(LANG=C /sbin/ifconfig | sed -ne $'/127.0.0.1/ ! { s/^[ \t]*inet[ \t]\\{1,99\\}\\(addr:\\)\\{0,1\\}\\([0-9.]*\\)[ \t\/].*$/\\2/p; }')
ফাটানো:
myIP=$(
LANG=C /sbin/ifconfig |
sed -ne $'/127.0.0.1/ ! {
s/^[ \t]*inet[ \t]\\{1,99\\}\\(addr:\\)\\{0,1\\}\\([0-9.]*\\)[ \t\/].*$/\\2/p;
}')
আমার স্ক্রিপ্ট (জানুয়ারী 2018):
এই স্ক্রিপ্টটি প্রথমে আপনার ডিফল্ট রুট এবং ইন্টারফেসের জন্য ব্যবহৃত হবে, তারপরে গেটওয়ের স্থানীয় আইপ ম্যাচিং নেটওয়ার্ক অনুসন্ধান করবে এবং ভেরিয়েবলগুলি পপুলেট করবে। শেষ দুটি লাইন কেবল মুদ্রণ করুন, এরকম কিছু:
Interface : en0
Local Ip : 10.2.5.3
Gateway : 10.2.4.204
Net mask : 255.255.252.0
Run on mac : true
অথবা
Interface : eth2
Local Ip : 192.168.1.31
Gateway : 192.168.1.1
Net mask : 255.255.255.0
Run on mac : false
ঠিক আছে, এটি এখানে:
#!/bin/bash
runOnMac=false
int2ip() { printf ${2+-v} $2 "%d.%d.%d.%d" \
$(($1>>24)) $(($1>>16&255)) $(($1>>8&255)) $(($1&255)) ;}
ip2int() { local _a=(${1//./ }) ; printf ${2+-v} $2 "%u" $(( _a<<24 |
${_a[1]} << 16 | ${_a[2]} << 8 | ${_a[3]} )) ;}
while IFS=$' :\t\r\n' read a b c d; do
[ "$a" = "usage" ] && [ "$b" = "route" ] && runOnMac=true
if $runOnMac ;then
case $a in
gateway ) gWay=$b ;;
interface ) iFace=$b ;;
esac
else
[ "$a" = "0.0.0.0" ] && [ "$c" = "$a" ] && iFace=${d##* } gWay=$b
fi
done < <(/sbin/route -n 2>&1 || /sbin/route -n get 0.0.0.0/0)
ip2int $gWay gw
while read lhs rhs; do
[ "$lhs" ] && {
[ -z "${lhs#*:}" ] && iface=${lhs%:}
[ "$lhs" = "inet" ] && [ "$iface" = "$iFace" ] && {
mask=${rhs#*netmask }
mask=${mask%% *}
[ "$mask" ] && [ -z "${mask%0x*}" ] &&
printf -v mask %u $mask ||
ip2int $mask mask
ip2int ${rhs%% *} ip
(( ( ip & mask ) == ( gw & mask ) )) &&
int2ip $ip myIp && int2ip $mask netMask
}
}
done < <(/sbin/ifconfig)
printf "%-12s: %s\n" Interface $iFace Local\ Ip $myIp \
Gateway $gWay Net\ mask $netMask Run\ on\ mac $runOnMac