ইউনিক্স শেল ব্যবহার করে হোস্টনাম থেকে আইপি ঠিকানা পাওয়ার সহজ উপায়


12

হোস্টনাম থেকে আইপি ঠিকানা পাওয়ার সহজতম উপায় কী?

আমি চেষ্টা করার চেষ্টা করছিলাম pingএবং আউটপুট থেকে এটি বিশ্লেষণ করছিলাম । তবে এটি খুব সুন্দর বলে মনে হচ্ছে না এবং সম্ভবত সমস্ত সিস্টেমে একইভাবে কাজ করবে না।

আমি কিছুটা আশেপাশে অনুসন্ধান করেছি এবং এর সাথে সমাধানগুলি পেয়েছি nslookup, তবে এটি হোস্টনামের জন্য কাজ করে না /etc/hosts


আমি এখনও কিছুটা ভাবছি কেন ইউনিক্স শেলগুলি প্রোগ্রামিং ভাষা হিসাবে বিবেচনা করা হয় না ...
অ্যালবার্ট

কারণ শেলটি traditionতিহ্যগতভাবে স্ক্রিপ্টিং হিসাবে দেখা হয়, প্রোগ্রামিং নয়;)
টিনো

উত্তর:


5

আপনি স্ট্যান্ডার্ড সিস্টেম কল দিয়ে এটি করতে পারেন। পার্লের একটি উদাহরণ এখানে:

use strict; use warnings;
use Socket;
use Data::Dumper;

my @addresses = gethostbyname('google.com');
my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses];
print Dumper(\@ips);

আউটপুট উত্পাদন করে:

$VAR1 = [
          '74.125.127.104',
          '74.125.127.103',
          '74.125.127.105',
          '74.125.127.106',
          '74.125.127.147',
          '74.125.127.99'
        ];

(কমান্ড-লাইনে একই স্ক্রিপ্টটি এইভাবে লেখা যেতে পারে perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print Dumper(\@ips)':)

আপনি এটি অন্যান্য ভাষায়ও একইভাবে করতে পারেন - সিস্টেম কল man -s3 gethostbynameইত্যাদির ম্যান পৃষ্ঠাটি দেখুন etc.


শীতল, যে কাজ করে। এসপি।, perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("www.google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print $ips[0]'
অ্যালবার্ট

খুব আশ্চর্যের বিষয় যে এই উত্তরটি কয়েকটি প্রোগ্রাম কোড ... :) দেখতে প্রায় একটি স্ট্যাকওভারফ্লো উত্তর বলে মনে হচ্ছে। সার্ভারফল্টে আসলেই অন্তর্ভুক্ত নয়। তবে আমি যেভাবেই হোক উত্তরটি গ্রহণ করব।
অ্যালবার্ট

@Albert: ভাল ন্যায্য হতে: 1. প্রশ্ন তাই মূলত 2. পোস্ট করে এবং সান ফ্রান্সিসকো চলে আসেন হয়েছিল, এবং ডেটা চাহিদার সঙ্গে বিশ্লেষণ হতে খুঁজছেন ধরণ কিছু ; কিছু লোক পার্লকে শেল স্ক্রিপ্টের আরও ভাল ফর্ম হিসাবে বিবেচনা করে: ডি
ইথার

@ ইথার sed -e '/some people consider Perl a better form/s/better/worse/'এসসিএনআর
টিনো

11

host <hostname>

উদা:

serv ~ $ host stackoverflow.com
stackoverflow.com has address 69.59.196.211

সম্পাদন করা

লিনাক্সে (এবং কয়েকটি ওএস এক্স রূপে, কমপক্ষে), আপনি ব্যবহার করতে সক্ষম হতে পারেন resolveipযা মাইএসকিউএল সার্ভার প্যাকেজের অংশ:

/etc/hosts:
 ...
 127.0.0.1     localhost localhost.localdomain foo
 ...

serv ~ $ resolveip foo
IP address of foo is 127.0.0.1

এছাড়াও কাজ করে না। (হোস্ট ইন ইন /etc/hosts।) চেষ্টা করুন host localhost
অ্যালবার্ট

serv ~ $ host localhost \n localhost has address 127.0.0.1

এইচ এম, ভাল, এখানে নেই। আমি কৌতূহলী যে কেন এটি আপনার পক্ষে কাজ করে। বা কেন এটি আমার পক্ষে হয় না।
অ্যালবার্ট

2
আমার সম্পাদনা দেখুন - আপনি চেষ্টা করতে পারেন resolveip

এইচএম, resolveipআমার ডেবিয়ানে ডিফল্টরূপে ইনস্টল করা নেই।
অ্যালবার্ট

9

এই প্রাচীন পোস্টটিতে অনেকগুলি সৃজনশীল সমাধান রয়েছে বলে মনে হয়।

যদি আমারও নিশ্চিত হওয়া দরকার যে এটি /etc/hostsঅ্যাক্সেস পেয়েছে তবে আমি ব্যবহারের প্রবণতা রাখি

getent hosts somehost.com

এটি কাজ করে, যদি কমপক্ষে use /etc/nsswitch.conf 'ফাইলগুলি ব্যবহার করার জন্য কনফিগার করা থাকে (সাধারণত এটি হয়)।


খুব ভাল, এবং IPv6 এর জন্যও কাজ করে।
টিনো

এবং সিসলিনাক্স ইনস্টল করার দরকার নেই!
ক্লাউডিয়ু

আকর্ষণীয় যে কয়েকটি আইপি-র ক্ষেত্রে এটি ahostsমাল্টি-লাইন তথ্য ফেরত দেওয়ার সময় কিছুই দেয় না ।
akostadinov

7

আইপিভি 4-এর জন্য একটি স্ট্যান্ডার্ড প্রোগ্রাম রয়েছে যা বাক্সের বাইরে / ইত্যাদি / হোস্ট সহ রেজোলভার ব্যবহার করে কাজ করে:

host="localhost"
ip="`gethostip -d "$host"`"

এটি দেবিয়ার অংশ, এটি দিয়ে এটি ইনস্টল করুন:

apt-get install syslinux

আইপিভি 4 এর চেয়ে অন্যান্য প্রোটোকলের জন্য (আইপিভি 6 এর মতো) আমি বর্তমানে একটি অনুরূপ সরঞ্জাম জানি না। আপডেট: এর কারণে আমি কেবল একটি ছোট্ট সরঞ্জাম লিখেছি যা খুব সহজেই আইপিভি 6 সমাধান করতে সক্ষম:

https://github.com/hilbix/misc/blob/master/src/ipof.c

এটি যেমন দ্রুত এবং নোংরা শেল ব্যবহারের জন্য ভাবা হয় তবে এটি gethostipআইপিভি 6 কেও অনুমতি দেয়:

ip="`ipof -6 -- heise.de`"

এটি ইন্টারেক্টিভভাবেও ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ:

ipof -a -d -x -v -h -

আছে HTH


এই উত্তরটি দিতে এখানে এসেছেন, পরিবর্তে আপনাকে ভোট দিয়েছিল।
এখন

4

না কেন dig +short hostname?

(ক্যোয়ারী ডিএনএস)


এটি আমলে নেয় না /etc/hosts
জান্নে পিক্কারাইনেন

নাম রেজোলিউশনের জন্য ডিএনএস একটি চূড়ান্ত উত্স হিসাবে বিবেচিত হবে এবং আপনি যদি হোস্ট ফাইলটি ওভাররাইড করতে ব্যবহার করেন তবে তা ঠিক। তবে এটি একটি ওভাররাইড,
চূড়ান্ত

আমি জানি, তবে মূল প্রশ্নটি চাইছিল / ইত্যাদি / হোস্টগুলি :)
জান্নে পিক্কারাইনেন

পুরু নিশ্চিত; আমার পড়ার বোধগম্যতা ব্যর্থ ...
gWaldo

3

ঠিক আছে, আমার বর্তমান সমাধান:

ping -c1 -n www.google.com | head -n1 | sed "s/.*(\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)).*/\1/g"

এটি কেবলমাত্র আইপি দেয় না: পিং www.l.google.com (72.14.234.104): 56 ডেটা বাইট
ফেডেরিকো ক্লেজ কুলোকা

হ্যাঁ, sedপ্রতিটি সিস্টেমে কিছুটা আলাদা আচরণ করা হয় বলে মনে হয়। :) কি বিরক্তিকর. আমি এটি কিছুটা পরিবর্তন করেছি, আমি মনে করি এটি এখন সর্বত্র কাজ করা উচিত।
অ্যালবার্ট

0

কিছু ইউনিয়নে, নিম্নলিখিতগুলি কাজ করবে:

arp <hostname>

ম্যাক ওএস এক্সে উদাহরণস্বরূপ, আমি এটি পেয়েছি:

arp My-iMac.local
My-iMac.local (192.168.1.2) -- no entry

ঠিক আছে, এটি এন্ট্রিটি সন্ধান করে তবে এটি কেবল তার ম্যাকের তালিকাবদ্ধ করে, এটির আইপি নয়। :)
অ্যালবার্ট

আহ, arp -n hostnameআইপি দেখায়
অ্যালবার্ট

কেবলমাত্র, এই উপায়টি নেটওয়ার্কের বাইরে সার্ভারগুলির জন্য কাজ করে না। : পি
অ্যালবার্ট

0

ব্যবহার pingকরা ততটা খারাপ নয় যেহেতু সাধারণত আপনার কোনও শক্তিশালী নির্ভরতা থাকে না।

লিনাক্স সিস্টেমে আমি যে ফাংশনটি ব্যবহার করেছি তা এখানে:

getip () { ping -c 1 -t 1 $1 | head -1 | cut -d ' ' -f 3 | tr -d '()' ; }

-1
nmap -sP 192.168.1.0/24|grep SEARCHED_HOSTNAME|sed -n 's/.*[(]\([0-9\.]*\)[)].*/\1/p'
  • Nmap আপনার সাবনেট (192.168.1.0 বা যাই হোক না কেন) অ্যাড্রেসগুলি থেকে পান
  • গ্রেপ দিয়ে আপনি যে হোস্টনামটির সন্ধান করছেন কেবল তার লাইন পান
  • সেডের সাথে প্রথম বন্ধনীগুলির ভিতরে কেবল আইপি ঠিকানা পান

2
বিভিন্ন স্যুইচ সম্পর্কে আরও কিছু তথ্য এবং কেন ব্যবহৃত হবে আপনার উত্তরটি যুক্ত করবে
ডেভ এম

কমপক্ষে চারটি ভিন্ন কারণে এই উত্তরটি কার্যকর হচ্ছে না। আপনি যে আইপি ঠিকানাগুলির মধ্যে উত্তর খুঁজে পাবেন তার ব্যাপ্তি সম্পর্কে অনুমান করা। প্রয়োজনের তুলনায় অনেক বেশি নেটওয়ার্ক ট্র্যাফিক তৈরি করার কারণে এটি অদক্ষ। এটি কেবলমাত্র আইপি ঠিকানাগুলির জন্য কাজ করে যা প্রোবের প্রতিক্রিয়া জানায়। এটি ধরে নিয়েছে যে বিপরীত ডিএনএসে ফরোয়ার্ড ডিএনএসের মতো ঠিক একই ম্যাপিং রয়েছে।
ক্যাস্পারড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.