আমি আমার লিখিত স্ক্রিপ্টের প্যারামিটার হিসাবে কেবল আইপি ঠিকানা (ইনেট) ব্যবহার করার চেষ্টা করছি।
ইউনিক্স টার্মিনালে কি কেবলমাত্র আইপি ঠিকানাটি দেখার চেয়ে সহজ উপায় রয়েছে ifconfig
?
ip -o address
তুলনায় কাজ করা আরও সহজ ip address
।
আমি আমার লিখিত স্ক্রিপ্টের প্যারামিটার হিসাবে কেবল আইপি ঠিকানা (ইনেট) ব্যবহার করার চেষ্টা করছি।
ইউনিক্স টার্মিনালে কি কেবলমাত্র আইপি ঠিকানাটি দেখার চেয়ে সহজ উপায় রয়েছে ifconfig
?
ip -o address
তুলনায় কাজ করা আরও সহজ ip address
।
উত্তর:
আপনি এমন একটি স্ক্রিপ্ট লিখতে পারেন যা কেবল আইপিটি ফিরিয়ে দেয়:
/sbin/ifconfig eth0 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}'
ম্যাকের জন্য:
ifconfig | grep "inet " | grep -v 127.0.0.1 | cut -d\ -f2
বা লিনাক্স সিস্টেমের জন্য
hostname -i | awk '{print $3}' # Ubuntu
hostname -i # Debian
hostname -i
আমার এটি ফিরে আসে:::1 127.0.1.1 192.168.1.100
hostname
পোর্টেবল নয়।
এটি আপনাকে লুপব্যাক 127.0.0.1 সহ সমস্ত আইপিভি 4 ইন্টারফেস দেবে:
ip -4 addr | grep -oP '(?<=inet\s)\d+(\.\d+){3}'
এটি কেবল প্রদর্শিত হবে eth0
:
ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'
এবং এইভাবে আপনি IPv6 ঠিকানাগুলি পেতে পারেন:
ip -6 addr | grep -oP '(?<=inet6\s)[\da-f:]+'
কেবল eth0
আইপিভি 6:
ip -6 addr show eth0 | grep -oP '(?<=inet6\s)[\da-f:]+'
grep -oP
ব্যস্তবক্স v1.24.1 এ ব্যর্থ: অবৈধ বিকল্প - পি
-P
পার্ল নিয়মিত এক্সপ্রেশনগুলির জন্য আপনার স্যুইচ দরকার হয় অন্যথায় আমরা লুকবাইন্ড (?<=inet\s)
টোকেনটি ব্যবহার করতে পারি না । আপনি দৌড় দিয়ে একইরকম ফলাফল পেতে পারেন grep -oe 'inet [0-9\.]\+'
বা grep -oe 'inet6 [0-9a-f:]\+'
তবে এইভাবে আমি প্রথম শব্দটি থেকে মুক্তি পেতে পারি না। সুস man grep
রিপোর্টে -P
পতাকাটি পরীক্ষামূলক।
ip -4 a show eth0 | grep -Po 'inet \K[0-9.]*'
সাধারণত, এটি কখনই গ্যারান্টিযুক্ত নয় যে কোনও সিস্টেমে কেবল একটি আইপি ঠিকানা থাকবে, উদাহরণস্বরূপ, আপনার ইথারনেট এবং ওলান উভয় সংযোগ থাকতে পারে, এবং যদি আপনার একটি সক্রিয় ভিপিএন সংযোগ থাকে তবে আপনার আর একটি আইপি ঠিকানা থাকবে।
লিনাক্সে, hostname -I
বর্তমান আইপি ঠিকানা (এস) তালিকাভুক্ত করবে। এর উপর সর্বদা নির্ভর করে কেবলমাত্র একটি আইপি ঠিকানা ফেরত পাওয়া কিছু পরিস্থিতিতে সম্ভবত প্রত্যাশার মতো কাজ করবে না (যেমন একটি ভিপিএন লিংক রয়েছে), সুতরাং আরও নির্ভরযোগ্য উপায় ফলাফলটিকে অ্যারেতে রূপান্তরিত করবে এবং তারপরে উপাদানগুলির উপর লুপ করবে:
ips=($(hostname -I))
for ip in "${ips[@]}"
do
echo $ip
done
ওএসএক্স-এ, আপনি যদি ইন্টারফেসটি জানেন তবে আপনি এটি ব্যবহার করতে পারেন:
~$ ipconfig getifaddr en0
192.168.1.123
যা ঠিক ফিরে আসবে আইপি ঠিকানাটি ।
অথবা আপনি একটি প্রত্যয় দিয়ে শুরু করে সম্ভাব্য ইন্টারফেসের নামগুলি লুপ করতে পারেন, অর্থাত en
:
for NUMBER in $(seq 0 5); do
ip=`ipconfig getifaddr en$NUMBER`
if [ -n "$ip" ]; then
myip="$ip"
break
fi
done
echo $myip
এছাড়াও, যখন কোনও মেশিনে একাধিক ইথারনেট ইন্টারফেস থাকে বা ভিপিএন টানেল উপস্থিত থাকে তখন আইপি ঠিকানাটি পাওয়া উভয় ক্ষেত্রেই অবিচ্ছিন্ন হয়ে যায়।
আপনার যদি বাহ্যিক আইপি দরকার হয়, তবে আপনি একটি পাঠ্য-মোড পরিষেবাটি জিজ্ঞাসা করতে পারেন, উদাহরণস্বরূপ curl https://ipecho.net/plain
একটি সাধারণ পাঠ্য বহিরাগত আইপি ফিরে আসবে ।
এবং বাহ্যিক আইপি পাওয়ার আরও তাত্পর্যপূর্ণ উপায় হল একটি পরিচিত ডিএনএস সার্ভারকে জিজ্ঞাসা করা:
dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
hostname -I
এই কমান্ডটি আপনাকে উবুন্টুতে যেমন সঠিক আইপি ঠিকানা দেবে তা দেবে।
সর্বশেষ উবুন্টু সংস্করণগুলিতে ( 14.04 - 16.04 ), এই আদেশটি আমার পক্ষে কৌশলটি করেছে।
hostname -I | awk '{print $1}'
print $1
আপনাকে সঠিক ফলাফল দিতে পারে বা নাও পারে।
আপনার যদি সীমিত পরিবেশ থাকে তবে আপনি এই আদেশটি ব্যবহার করতে পারেন:
ip -4 addr show dev eth0 | grep inet | tr -s " " | cut -d" " -f3 | head -n 1
ip -o -4 addr show dev eth0 | cut -d' ' -f7 | cut -d'/' -f1
ip -4 addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
। ভি 4 এবং ভি 6 উভয়ের জন্য:ip addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
ip -4 addr show eth0 | grep inet
:ip -4 addr show | grep 192
কমান্ড ifconfig
হ্রাস করা হয় এবং আপনি ব্যবহার করা উচিতip
লিনাক্স-এ কমান্ড ।
এছাড়াও ip a
তাই এটি ব্যবহার করা আরো সহজ আইপি যেমন একই লাইনে আপনি সুযোগ দেব।
এই আদেশটি আপনাকে আপনার বৈশ্বিক (বাহ্যিক) আইপি প্রদর্শন করবে:
ip a | grep "scope global" | grep -Po '(?<=inet )[\d.]+'
সমস্ত আইপিভি 4 (এছাড়াও 127.0.0.1):
ip a | grep "scope" | grep -Po '(?<=inet )[\d.]+'
সমস্ত আইপিভি 6 (এছাড়াও :: 1):
ip a | grep "scope" | grep -Po '(?<=inet6 )[\da-z:]+'
আমরা চাই এমন আইপি (ভি 4) পেতে কেবল মাত্র 2 টি কমান্ড (ifconfig + awk) ব্যবহার করতে পারি:
eth0
ইন্টারফেস থেকে আইপি অ্যাড্রেস পাওয়ার কথা ধরে লিনাক্সে, নিম্নলিখিত কমান্ডটি চালান:
/sbin/ifconfig eth0 | awk '/inet addr/{print substr($2,6)}'
ওএসএক্স-এ, en0
ইন্টারফেস থেকে আইপি অ্যাড্রেস পাওয়ার জন্য নিম্নলিখিত কমান্ডটি চালনা করুন:
/sbin/ifconfig en0 | awk '/inet /{print $2}'
আমাদের সর্বজনীন / বাহ্যিক আইপি জানতে, এই ফাংশনটি যুক্ত করুন ~/.bashrc
whatismyip () {
curl -s "http://api.duckduckgo.com/?q=ip&format=json" | jq '.Answer' | grep --color=auto -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
}
তারপরে দৌড়াও, whatismyip
eth0
অন্য পাঠ্য ব্যতীত কেবলমাত্র আইপি ঠিকানা প্রিন্ট করতে :
ifconfig eth0 | grep -Po '(?<=inet )[\d.]+'
আপনার প্রাথমিক ইন্টারফেস নির্ধারণ করতে (কারণ এটি "eth0" নাও হতে পারে), ব্যবহার করুন:
route | grep ^default | sed "s/.* //"
উপরের দুটি লাইন একটি একক কমান্ডের মতো একত্রিত হতে পারে:
ifconfig `route | grep ^default | sed "s/.* //"` \
| grep -Po '(?<=inet )[\d.]+'
আমি সাধারণ কিছু চাইছিলাম যা বাশ ওরফে হিসাবে কাজ করেছিল। আমি খুঁজে পেয়েছি যে hostname -I
আমার জন্য সবচেয়ে ভাল কাজ করে (হোস্টনাম v3.15)। hostname -i
লুপব্যাক আইপিটি কোনও কারণে ফিরিয়ে hostname -I
দেয় তবে আমাকে wlan0 এর জন্য সঠিক আইপি দেয় এবং গ্রেপ বা অ্যাজকের মাধ্যমে আউটপুট পাইপ না করেই দেয়। একটি অপূর্ণতা হ'ল সমস্ত আইপি hostname -I
আউটপুট দেয় , যদি আপনার একাধিক থাকে।
এটি ম্যাকের কৌশলটি করবে:
ping $(ifconfig en0 | awk '$1 == "inet" {print $2}')
এটি ping 192.168.1.2
আমার মেশিনে সমাধান হয়েছে ।
প্রো টিপ : এর $(...)
অর্থ সাবসেলের মধ্যে প্রথম বন্ধনীর ভিতরে যা আছে তা চালান এবং মান হিসাবে ফিরে আসুন।
এর মধ্যে man hostname
আরও সহজ উপায় রয়েছে যা স্বয়ংক্রিয়ভাবে লুপব্যাক আইপি বাদ দেয় এবং হোস্ট আইপি অ্যাড্রেসগুলিতে নির্ধারিত সমস্তের জন্য কেবল স্থান পৃথক তালিকা প্রদর্শন করে:
root@srv:~# hostname --all-ip-addresses
11.12.13.14 192.168.15.19
root@srv:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/void
inet 11.12.13.14/32 scope global venet0:0
inet 192.168.15.19/32 scope global venet0:1
আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:
ip route | grep src
দ্রষ্টব্য: আপনার যদি ইন্টারনেটে সংযোগ থাকে তবে এটি কাজ করবে।
কয়েক উত্তর নতুন ব্যবহার করা বলে মনে হচ্ছে ip
কমান্ড (জন্য প্রতিস্থাপন ifconfig
) তাই এখানে এক যে ব্যবহারসমূহ ip addr
, grep
এবং awk
কেবল সঙ্গে যুক্ত IPv4 ঠিকানা প্রিন্ট করতে wlan0
ইন্টারফেস:
ip addr show wlan0|grep inet|grep -v inet6|awk '{print $2}'|awk '{split($0,a,"/"); print a[1]}'
সর্বাধিক কমপ্যাক্ট বা অভিনব সমাধান না হলেও এটি (তর্কযোগ্যভাবে) সহজে বুঝতে (নীচে ব্যাখ্যাটি দেখুন) সহজ এবং অন্যান্য উদ্দেশ্যে যেমন ম্যাক ঠিকানার শেষ 3 টি অক্টেট পাওয়ার জন্য এটি পরিবর্তন করা যায়:
ip addr show wlan0|grep link/ether|awk '{print $2}'|awk '{split($0,mac,":"); print mac[4] mac[5] mac[6]}'
ব্যাখ্যা: ip addr show wlan0
নাম দেওয়া নেটওয়ার্ক ইন্টারফেসের সাথে সম্পর্কিত আউটপুট তথ্য wlan0
, যা এর অনুরূপ হওয়া উচিত:
4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether dc:a6:32:04:06:ab brd ff:ff:ff:ff:ff:ff
inet 172.18.18.1/24 brd 172.18.18.255 scope global noprefixroute wlan0
valid_lft forever preferred_lft forever
inet6 fe80::d340:5e4b:78e0:90f/64 scope link
valid_lft forever preferred_lft forever
পরবর্তী grep inet
লাইন আউট ফিল্টারগুলি থাকে না "Inet" (IPv4 ও IPv6 কনফিগারেশন) এবং grep -v inet6
অবশিষ্ট লাইন যে ফিল্টার না "inet6" থাকতেই, যা এই এক মত একটি একক লাইন স্থাপিত হবে:
inet 172.18.18.1/24 brd 172.18.18.255 scope global noprefixroute wlan0
শেষ awk
অবধি, "172.18.18.1/24" ক্ষেত্রটি প্রথমটি বের করুন এবং দ্বিতীয়টি কেবলমাত্র IPv4 ঠিকানা রেখে নেটওয়ার্ক মাস্ক শর্টহ্যান্ড সরিয়ে ফেলবে।
এছাড়াও, আমি মনে করি এটি উল্লেখ করার মতো যে আপনি যদি স্ক্রিপ্টিং করেন তবে প্রায়শই এই তথ্যটি পাওয়ার জন্য অনেক ধনী এবং / বা আরও শক্তিশালী সরঞ্জাম রয়েছে, যা আপনি পরিবর্তে ব্যবহার করতে চাইতে পারেন want উদাহরণস্বরূপ, যদি নোড.জেএস ব্যবহার করে থাকে ipaddr-linux
, যদি রুবি ব্যবহার করে থাকে linux-ip-parser
, ইত্যাদি।
Https://unix.stackexchange.com/questions/119269/how-to-get-ip-address- using-shell- script দেখুন
নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
/sbin/ifconfig $(netstat -nr | tail -1 | awk '{print $NF}') | awk -F: '/inet /{print $2}' | cut -f1 -d ' '
এখানে আমার সংস্করণ, যাতে আপনি ইন্টারফেসের একটি তালিকা অগ্রাধিকার অনুসারে অর্ডার করতে পারেন:
getIpFromInterface()
{
interface=$1
ifconfig ${interface} > /dev/null 2>&1 && ifconfig ${interface} | awk -F'inet ' '{ print $2 }' | awk '{ print $1 }' | grep .
}
getCurrentIpAddress(){
IFLIST=(${@:-${IFLIST[@]}})
for currentInterface in ${IFLIST[@]}
do
IP=$(getIpFromInterface $currentInterface)
[[ -z "$IP" ]] && continue
echo ${IP/*:}
return
done
}
IFLIST=(tap0 en1 en0)
getCurrentIpAddress $@
সুতরাং আমি যদি ভিপিএন, ওয়াইফাই এবং ইথারনেটের সাথে সংযুক্ত থাকি তবে আমার ভিপিএন ঠিকানা (ইন্টারফেস টেপ 0 তে) ফিরে আসবে। স্ক্রিপ্টটি লিনাক্স এবং ওএসএক্স উভয় ক্ষেত্রেই কাজ করে এবং আপনি যদি আইফ্লাইএসটি ওভাররাইড করতে চান তবে আর্গুমেন্ট নিতে পারে
নোট করুন আপনি যদি আইপিভি 6 ব্যবহার করতে চান তবে আপনাকে 'ইনেট' দ্বারা 'ইনেট' প্রতিস্থাপন করতে হবে।
আমি সর্বদা সবচেয়ে অপ্রত্যাশিত সময়ে এটির প্রয়োজন বজায় রাখি এবং ব্যর্থ না হয়ে এসও তে এই জাতীয় থ্রেডগুলি অনুসন্ধান করতে চাই। তাই আমি netstat কমান্ড মাধ্যমে IPv4- র ঠিকানাগুলি পেতে একটি সহজ স্ক্রিপ্ট, নামক লিখেছেন echoip
- আপনি এখানে পেতে পারেন । নেটওয়ার্ক ঠিকানাগুলির জন্য ব্যাশটি দেখতে দেখতে এটি ইপেকো.নেট থেকে আপনার সর্বজনীন ঠিকানা পায়:
IPV4='\d+(\.\d+){3}'
INTERFACES=`netstat -i | grep -E "$IPV4" | cut -d ' ' -f 1`
INTERFACE_IPS=`netstat -i | grep -oE "$IPV4"`
for i in "${!INTERFACES[@]}"; do
printf "%s:\t%s\n" "${INTERFACES[$i]}" "${INTERFACE_IPS[$i]}"
done
echoip
স্ক্রিপ্ট ভালো একটি আউটপুট উৎপাদ:
$ echoip
public: 26.106.59.169
en0: 10.1.10.2
এই এক লাইনের স্ক্রিপ্টটি ব্যবহার করুন:
ifconfig | grep "inet " | grep -v 127.0.0.1|awk 'match($0, /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) {print substr($0,RSTART,RLENGTH)}'
ম্যাক এবং লিনাক্স (উবুন্টুতে পরীক্ষিত) উভয় কাজ করে।
ifconfig en0
বা ifconfig eth1
আমি awk
স্ক্রিপ্টগুলিতে ব্যবহার না করা পছন্দ করি ..ip
JSON এ আউটপুট দেওয়ার বিকল্প রয়েছে।
আপনি যদি বাইরে চলে যান $interface
তবে আপনি সমস্ত আইপি ঠিকানাগুলি পাবেন:
ip -json addr show $interface | \
jq -r '.[] | .addr_info[] | select(.family == "inet") | .local'
bash ip -j addr show eth0 | jp "[0].addr_info[?family== 'inet'].local | [0]"
রেডহাট 64 বিট-এ, আমার জন্য এই সমস্যার সমাধান।
ifconfig $1|sed -n 2p|awk '{ print $2 }'|awk -F : '{ print $2 }'
#!/bin/sh
# Tested on Ubuntu 18.04 and Alpine Linux
# List IPS of following network interfaces:
# virtual host interfaces
# PCI interfaces
# USB interfaces
# ACPI interfaces
# ETH interfaces
for NETWORK_INTERFACE in $(ls /sys/class/net -al | grep -iE "(/eth[0-9]+$|vif|pci|acpi|usb)" | sed -E "s@.* ([^ ]*) ->.*@\1@"); do
IPV4_ADDRESSES=$(ifconfig $NETWORK_INTERFACE | grep -iE '(inet addr[: ]+|inet[: ]+)' | sed -E "s@\s*(inet addr[: ]+|inet[: ]+)([^ ]*) .*@\2@")
IPV6_ADDRESSES=$(ifconfig $NETWORK_INTERFACE | grep -iE '(inet6 addr[: ]+|inet6[: ]+)' | sed -E "s@\s*(inet6 addr[: ]+|inet6[: ]+)([^ ]*) .*@\2@")
if [ -n "$IPV4_ADDRESSES" ] || [ -n "$IPV6_ADDRESSES" ]; then
echo "NETWORK INTERFACE=$NETWORK_INTERFACE"
for IPV4_ADDRESS in $IPV4_ADDRESSES; do
echo "IPV4=$IPV4_ADDRESS"
done
for IPV6_ADDRESS in $IPV6_ADDRESSES; do
echo "IPV6=$IPV6_ADDRESS"
done
fi
done
নেটেড হোস্টে আপনার বাহ্যিক আইপি ঠিকানাটি সন্ধান করার সময়, বেশ কয়েকটি উত্তর এইচটিটিপি ভিত্তিক পদ্ধতি ব্যবহারের পরামর্শ দেয় ifconfig.me
যেমন:
$ curl ifconfig.me/ip
বছরের পর বছর ধরে আমি এই সাইটগুলির অনেকগুলি আসতে এবং যেতে দেখেছি, আমি এই ডিএনএস ভিত্তিক পদ্ধতিটিকে আরও শক্তিশালী দেখতে পেয়েছি:
$ dig +short myip.opendns.com @resolver1.opendns.com
আমার এই সহজ উপাখ্যানটি আমার মধ্যে রয়েছে ~/.bashrc
:
alias wip='dig +short myip.opendns.com @resolver1.opendns.com'
এই দুটি উপায় আমার পক্ষে কাজ করেছে:
আপনার ইন্টারফেসের আইপি ঠিকানা পেতে eth0 eth নীচের উদাহরণে আপনার ইন্টারফেসের নাম দিয়ে eth0 প্রতিস্থাপন করুন।
ifconfig eth0 | grep -w "inet" | tr -s " " | cut -f3 -d" "
হোস্ট-নেম ব্যবহার করে: এটি আপনাকে আপনার ইথোর আইনে বা আইপিএড্রেস দেবে। -আমি ব্যবহার করে আপনাকে এই সমস্ত মান ইন্টারফেসের ইনট মান দিতে হবে whe
hostname -i
curl ifconfig.co
এটি আপনার সিস্টেমের কেবলমাত্র আইপি ঠিকানা প্রদান করে।