প্রথমে / ইত্যাদি / হোস্ট ব্যবহার করে হোস্টের নামগুলি সমাধান করার জন্য লিনাক্স কমান্ড লাইন ইউটিলিটি


36

সেখানে সমাধানে হোস্ট নামের (বিভিন্ন কমান্ড লাইন ইউটিলিটি হয় host, dig, nslookup), কিন্তু তারা সব ব্যবহার নেমসার্ভার একচেটিয়াভাবে, যখন সাধারণ চেহারা অ্যাপ্লিকেশন /etc/hosts(আমি বিশ্বাস করি gethostbyname ব্যবহার করে) প্রথম।

হোস্টের নামগুলি যা সাধারণ অ্যাপ্লিকেশনটির মতো আচরণ করে তা সমাধান করার জন্য একটি কমান্ড লাইন ইউটিলিটি রয়েছে, এভাবে /etc/hostsপ্রথমে অনুসন্ধান করা হয় এবং কেবলমাত্র একটি নেমসার্ভার জিজ্ঞাসা করে?

(আমি সচেতন যে এটি সম্ভবত 3 টি লাইনের মতো হবে তবে কিছুটা পোর্টেবল শেল স্ক্রিপ্টের ভিতরে আমার এটি দরকার need


আপনি কি আপনার পরিস্থিতিটি আরও কিছুটা ব্যাখ্যা করতে পারেন? নেই awk '/hostname/ { print $1 }' /etc/hostsসহায়তা প্রয়োজন?
কোয়ান্টা

@ কোয়ান্টা আসলে বর্তমান সমাধানটি / ইত্যাদি / হোস্টগুলিতে গ্রেপ / সেড ম্যাজিক। আমি ফ্যালব্যাক দিয়ে আরও সাধারণ করতে চেয়েছিলাম।
জুলান

উত্তর:


56

এটি সহজেই এর সাথে অর্জন করা যায় getent:

getent hosts 127.0.0.1

getentকনফিগার করা যেকোন ধরণের ডেটার জন্য অনুসন্ধান করবে nsswitch.conf


আমার আলপাইন ডকার পাত্রে এই সরঞ্জামটি আমি ব্যবহার করি যার মতো digবা অন্য কোনও প্রক্রিয়া নেই nslookup
ব্রুনো ব্রোনোস্কি

26

একটি সরঞ্জাম যা কাজ করবে তা হ'ল getent। তাই আপনি যদি ব্যবহার করতে পারে getent hosts www.google.com, অথবা getent hosts localhost। এটি আপনার নাম পরিষেবা স্যুইচ কনফিগারেশনে উল্লিখিত ডাটাবেসগুলি থেকে এন্ট্রি পুনরুদ্ধার করবে /etc/nsswitch.conf


1
হ্যাঁ, তবে তা ডিএনএসে ফিরে আসবে না।
ধীরে ধীরে

না, এটি এটি nsswitch.conf ক্রমে সমাধান করে।
সিজেসি

@ স্লোপোইজন, আপনার এনএসসিউইচ কনফিগারেশনটি একবার দেখুন। আমার সিস্টেমে files dnsহোস্টগুলির জন্য রয়েছে, যার অর্থ / ইত্যাদি / হোস্টগুলি পরামর্শ নেওয়া হয় এবং তারপরে ডিএনএস রেজলভার। আপনার কনফিগারেশন আলাদা হতে পারে।
জোরেডেচি

@ সিজেসি, এটি করে। আমি মনে করি না আমি এটি সঠিকভাবে চেষ্টা করেছি।
স্লোপোইজন

@ জোরেদাছে, আমি এতে বেশ মুগ্ধ getent। এই আদেশটি অন্তর্ভুক্ত করার জন্য ধন্যবাদ।
স্লোপোইজন

8

আপনি জেথোস্টবাইয়ের নাম () (অবহিত) মোড়ক ব্যবহার করতে পারেন:

python -c 'import socket;print socket.gethostbyname("www.google.com")'

বা একটি গেটাড্রিনফো () র‍্যাপারের মতো:

python -c 'import socket;print socket.getaddrinfo("www.google.com","http")[0][4][0]'

নোট করুন যে getaddrinfo সমস্ত দাবী তালিকা হিসাবে ফিরিয়ে দেবে। কমান্ডের শেষ অংশটি কেবল প্রথম টিপল নির্বাচন করে। এটি IPv6 ঠিকানাগুলিও ফিরিয়ে দিতে পারে।


1
এটি কাজ করবে, তবে এটি কিছু সময়ের জন্য অপ্রচলিত। Linux.die.net/man/3/gethostbyname দেখুন ।
কাইল স্মিথ 21

আপনাকে ধন্যবাদ, আমি এটি সম্পর্কে জানতাম না। ;)
মিরসিয়া ভুটকোভিচি

একটি upvote আছে। অন্য কোনও আধা-বহনযোগ্য ওয়ান-লাইনারের প্রস্তাব দেওয়া হয়নি।
ব্যবহারকারী 239558

যদি এটি অন্য কারও কাছে মূল্যবান হয় তবে আমি কয়েকটি কমান্ড-লাইন বিকল্প দিয়ে পাইথন 3 সংস্করণ তৈরি করেছি: github.com/acdha/unix_tools/blob/master/bin/getaddrinfo
ক্রিস অ্যাডামস

6

resolveip এই করবে।

অদ্ভুতভাবে, এটি আরএইচইল এবং উবুন্টুতে থাকা মাইএসকিএল-সার্ভার প্যাকেজগুলির অংশ।


6

স্ক্রিপ্ট লিখতে আপনি [আপনার প্রিয় ভাষাটি এখানে] ব্যবহার করতে পারেন যা getnameinfo কল করে । বাইনারিগুলি (পিংয়ের মতো) এটি করা উচিত, যাতে আপনি নিশ্চিত হন যে আপনি একই চিকিত্সা পেয়েছেন।


6

getent ahostsউদাহরণস্বরূপ ব্যবহার করুন :

$ getent ahosts www.google.com | sed -n 's/ *STREAM.*//p'
216.58.210.196
2a00:1450:4006:803::2004

আপনি সমস্ত আইপিভি 4 এবং আইপিভি 6 অ্যাড্রেস পাবেন, গ্লিবিসি রিসলভারের মাধ্যমে (এইভাবে /etc/hostsপ্রথমে সাধারণভাবে কনফিগার করা হিসাবে ব্যবহার করুন /etc/nsswitch.conf)।

ব্যবহার করবেন না getent hosts, কারণ এটি আপনাকে আইপিভি 6 বা আইপিভি 4 অ্যাড্রেস দেবে (উভয়ই নয়) এবং নির্বাচিত প্রোটোকলটি এমনটি নাও হতে পারে যা কাজ করে না। প্রকৃতপক্ষে, আইপিভি 6 অ্যাড্রেসগুলি সাধারণত অগ্রাধিকার দেওয়া হয় তবে কয়েকটি স্থানে আইপিভি 6 তথ্য রাউটারগুলির দ্বারা ফিল্টার করা হয় (সমর্থিত নয়)।



2

আপনি সত্যিই হ্যাকি এবং ব্যবহার করতে পারেন arp:

arp -n somehostname | tr -d '()' | awk '{print $2}'

তবে এটি সত্যিই কুৎসিত হবে তাই আপনার এটি করা উচিত নয়।


2

getent hostsভেঙ্গে গেছে. এটি আইপিভি 6 ঠিকানা পছন্দ করে, আইপিভি 4 gai.confপছন্দ করার জন্য কনফিগার করা উচিত তবে ....

পার্ল এর gethostbynameমধ্যে নজির ব্যবহার করে/etc/nsswitch.conf

hosts: files dns

সুতরাং এই মত getent hostsকাজ করে আমার জন্য কাজ করা উচিত।

এছাড়াও:

perl -e 'use Socket; print inet_ntoa(inet_aton("www.google.com")) . "\n";'

কাজ করা উচিত.


5
এটি ভাঙা হয়নি, এটি কেবল গেটাড্রিনফো ব্যবহার করে না (যা /etc/gai.conf পড়ে)। Getaddrinfo ব্যবহার করতে, চালান getent ahosts
ক্রেগ 65535

1

এটা চেষ্টা কর:

if [ `grep -c "hostname" /etc/hosts` -ge 1 ]; then
    ip=`awk '/hostname/ { print $1 }' /etc/hosts`
else
    ip=`host hostname | awk '/hostname has address/ { print $4 }'`
fi

-1

নিম্নলিখিত কমান্ডটি ডিএনএস / ইত্যাদি / হোস্টের মাধ্যমে সরাসরি ডিএনএস সার্ভার লুচিংয়ের মাধ্যমে অনুসন্ধান সম্পাদন করবে।

ping -W2 -c1 google.com | grep PING | sed -r "s/^[^\(]*\(([\.0-9]*)\).*/\1/"

এই কমান্ডটি 2 সেকেন্ডের অপেক্ষার সময় একবারে একটি ডোমেনকে পিন করার চেষ্টা করবে (এই ক্ষেত্রে, google.com), পিং কমান্ডের প্রথম লাইনটি পাবেন যা "পিং গুগল.কম (216.58.199.36) 56 (84) লিখে থাকবে ) ডেটা বাইটস ", তারপরে প্রথম বন্ধনীগুলির সেটটি সনাক্ত করতে স্ট্রিম এডিটর (সেড) ব্যবহার করুন এবং এর মধ্যে ডেটা বের করুন যা আমরা খুঁজছি সেই IP ঠিকানা।

দ্রষ্টব্য: ইউআরএলটিতে প্রথম বন্ধনী (ওরফে সার্কুলার বন্ধনী) থাকলে রেজেক্স এক্সপ্রেশন কাজ করবে না, তবে এটি বিরল ঘটনা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.