কোনও আইপি ঠিকানা শেল স্ক্রিপ্টিং ব্যবহার করে কোনও ফাইল উপস্থিত রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন?


14

আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা কিছু আউটপুট উত্পন্ন করে। আমি যে কোনও আইপি ঠিকানার মতো আউটপুটটি চেক করতে চাই

159.143.23.12
134.12.178.131
124.143.12.132

if (IPs are found in <file>)
then // bunch of actions //
else // bunch of actions //

কি fgrepএকটি ভাল ধারণা?

আমার কাছে বাশ পাওয়া যায়।


গ্রেপ, ইগ্রেপ, আড্ডা, বা সেড, আপনার যা পছন্দ তা ব্যবহার করুন
ইজাজ আহমদ খান

আপনি কি সিনট্যাক্স সাহায্য করতে পারেন দয়া করে? আমার অর্থ এটি কীভাবে এলোমেলো আইপি অনুসন্ধান করে। প্যাটার্নটি কীভাবে বর্ণনা করবেন? আমি কোনও নির্দিষ্ট ঠিকানা নয়, কোনও আইপি ঠিকানা খুঁজছি।
কোশুর

5
এটি কি কোয়াড-দশমিক স্বরলিপিতে কেবল আইপিভি 4 ঠিকানা? এগুলি কি লেখা যায় 0010.0000.0000.0001? ফাইলটিতে অন্যথায় সংস্করণ নম্বরগুলির মতো আইপি ঠিকানাগুলির মতো দেখতে এমন জিনিস থাকতে পারে ( soft-1.2.1100.1.tar.gz, নেটওয়ার্ক স্পেসিফিকেশন (10.0.0.0/24), 1.2.3.4.5)? আপনি কি এমন কোনও সমাধান গ্রহণ করবেন যা 333.444.555.666 তে ইতিবাচক? অথবা 0377.0377.0377.0377(একটি বৈধ কোয়াড-অক্টাল আইপি ঠিকানা)?
স্টাফেন চেজেলাস

যদি bashউপলভ্য awkথাকে তবে সাধারণত হয়, তাই এটি আপনার পক্ষে কাজ করতে পারে: awk '/([0-9]{2,3}\.){3}/ {print $5 "\t" $1}'(এই ওয়ান-লাইনার হোস্ট এক্সএফআর তালিকার আউটপুটটিকে /etc/hostsবিন্যাসে অনুবাদ করে ))
মার্ক হাডসন

উত্তর:


27

হ্যাঁ, আপনার কাছে ব্যবহার করার মতো অনেকগুলি বিকল্প / সরঞ্জাম রয়েছে। আমি এটি চেষ্টা করেছি, এটি কাজ করে:

ifconfig | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"

যাতে আপনি grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"আপনার আউটপুট থেকে আইপি ঠিকানাগুলি গ্রেপ করতে ব্যবহার করতে পারেন ।


ধন্যবাদ। এইটা কাজ করে. আপনি কিছুটা ব্যাখ্যা করতে পারেন? এটি কি নিয়মিত প্রকাশ?
কোশুর

হ্যাঁ এটি গ্রেপ সহ ব্যাশে ব্যবহৃত একটি নিয়মিত প্রকাশ, আপনি কেবল বিন্দু দ্বারা পৃথক তিনটি অঙ্কের প্যাটার্নটি সন্ধান করছেন। আপনি টানা 2 অঙ্কের জন্য {1,2 in তে নম্বর পরিবর্তন করে খেলতে পারেন
ইজাজ আহমেদ খান

একজন "\b([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9][0-9]?"সিআইডিআর খুঁজতেও ব্যবহার করতে পারেন (তারা বৈধ বলে ধরে
নিচ্ছেন

2

এই উত্তরের উপর ভিত্তি করে আমার উত্তর শুরু:

হ্যাঁ, আপনার কাছে ব্যবহার করার মতো অনেকগুলি বিকল্প / সরঞ্জাম রয়েছে। আমি এটি চেষ্টা করেছি, এটি কাজ করে:

ifconfig | গ্রেপ -ওই "\ বি ([0-9] {1,3}।) {3} [0-9] {1,3} \ b" a যাতে আপনি গ্রেপ -oE "\ বি ব্যবহার করতে পারেন ([0- 9] আপনার আউটপুট থেকে আইপি ঠিকানাগুলি গ্রেপ করতে {3} [0-9] {1,3} \ b "। 3} [0-9]।

এবং উত্তরটি পূর্ণ দৈর্ঘ্যের আইপিভি 6 ইত্যাদিতে রূপান্তর করা হচ্ছে ...:

fgrep -oE "\b([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}\b" -- file

আপনি যদি সেখানে / এনএন রাখতে চান তবে:

fgrep -oE "\b([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}(/[0-9]{1,3}){0,1}\b" -- file

এবং আইপিভি 6 এর সংক্ষিপ্ত সংস্করণ রয়েছে যা '::' অন্তর্ভুক্ত করে।

আরও IPv6 জবাবের জন্য আপনি এখানে দেখতে পারেন: /programming/


fgrepgrepপ্যাটার্ন মিলটি উপেক্ষা করে এমন বৈকল্পিকের পুরানো নাম । আমি তোমাদের ব্যবহার করার সুপারিশ চাই grep(অথবা এমনকি egrepপরিবর্তে), আপনি পরিষ্কারভাবে করছি বিশেষ করে অনুপস্থিত প্যাটার্ন ম্যাচিং।
রোয়াইমা

2

যদি আপনার ফাইলটিকে বলা হয় যেমন ipsআপনি কিছু লিখতে পারেন:

while read -r ip
    do
        if [[ $ip == "$1" ]]; then
            shift
            printf '%s\n' 'action to take if match found'
        else
            printf '%s\n' 'action to take if match not found'
        fi
    done < ips

স্ক্রিপ্ট অনুসরণ করে আপনি পরামিতিগুলি পাস করতে পারেন pass

./myscript 159.143.23.12 134.12.178.131 124.143.12.132 124.143.12.132

1

স্মার্টোজে পরীক্ষিত (সোলারিসের একটি রূপ) আশা করি অন্যান্য * নিক্স পরিবেশে কাজ করা উচিত:

egrep '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])'

উদাহরণ:

$ cat >file.txt
IP1: 192.168.1.1
IP2: 261.480.201.311
IP3: 1012.680.921.3411

$ egrep '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])' file.txt
IP1: 192.168.1.1

এই প্যাটার্নটি কেবল বৈধ আইপিভি 4 এর সাথে মেলে , x.x.x.xযেখানে x0-255 এর মধ্যে রয়েছে। আপনার যদি কেবল মিলে যাওয়া আইপিটি বের করার দরকার -oহয় তবে উপরের কমান্ডটিতে একটি বিকল্প যুক্ত করুন । আপনি এই কমান্ডটি ব্যাশ স্ক্রিপ্টে এবং সম্ভবত অন্যান্য শেল স্ক্রিপ্টগুলিতে এম্বেড করতে পারেন। এবং, যদি egrepব্যর্থ হয়,try grep -E ...

এটি (ব্যাশ) শেল স্ক্রিপ্টে ব্যবহার করা:

ip=$(egrep -o '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])' file.txt) echo $ip


এটি একটি সেন্টোস 6 সিস্টেমে ভাল কাজ করেছে, গ্রেপ 2.6.3
ডেভিড রামিরেজ

0

আপনার যদি কোনও ফাইলে আইপিগুলির তালিকা থাকে তবে প্রতি লাইনে একটি করে grepইতিমধ্যে সুবিধাজনক -fবিকল্প রয়েছে:

$ man fgrep | grep file= -A1
       -f FILE, --file=FILE
              Obtain patterns from FILE, one per line.  The empty file contains zero patterns, and therefore matches nothing.  (-f is specified by POSIX.)

স্ট্রিংগুলির কারণে এটি অন্য একটি আইপি তৈরির জন্য বিকল্পের পরে অন্য সংখ্যার দ্বারা কয়েকটি মিথ্যা ইতিবাচক কারণ হতে পারে। আপনি যে বিষয়টি করতে পারেন তার উপর নির্ভর করে আপনি উদ্বেগের সিদ্ধান্ত নিতে পারেন বা নাও করতে পারেন depending


0

আমি মনে করি যে আমার অন্য পোস্টের উত্তরটি এখানে আরও উপযুক্ত। এই পোস্টটি এবং এটির মতো অন্যদের জন্য ধন্যবাদ আমি এটিকে সামনে নিয়ে এসেছি, যা সঠিক আইপি ফর্ম্যাটটির সন্ধান করে, তারপরে 256 বা তার বেশি সংখ্যক লাইনগুলি থেকে মুক্তি পেয়ে যায়। পরিবর্তে কোনও আউটপুট না দেখতে আইপি-কে এমন কোনও জায়গায় প্রতিস্থাপন করুন যা বৈধ নয় is

echo '255.154.12.231' | grep -E '(([0-9]{1,3})\.){3}([0-9]{1,3}){1}' | grep -vE '25[6-9]|2[6-9][0-9]|[3-9][0-9][0-9]'

প্রথম গ্রেপ সম্ভবত এই পোস্টে পাওয়া গেছে এবং এটি XXXX ফর্ম্যাটে 0-999 থেকে যে কোনও সংখ্যার জন্য পরীক্ষা করে

দ্বিতীয় গ্রেপ 256-999 সংখ্যাযুক্ত লাইনগুলি সরিয়ে দেয়, সুতরাং কেবলমাত্র বৈধ বিন্যাসের আইপি রেখে যায়, তাই আমি ভেবেছিলাম

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

echo ' 1234.5.5.4321 ' | grep -Eo ' (([0-9]{1,3})\.){3}([0-9]{1,3}){1} ' | grep -vE '25[6-9]|2[6-9][0-9]|[3-9][0-9][0-9]' | sed 's/ //'

echo ' 234.5.5.432 ' | grep -Eo ' (([0-9]{1,3})\.){3}([0-9]{1,3}){1} ' | grep -vE '25[6-9]|2[6-9][0-9]|[3-9][0-9][0-9]' | sed 's/ //'
echo ' 234.5.5.100 ' | grep -Eo ' (([0-9]{1,3})\.){3}([0-9]{1,3}){1} ' | grep -vE '25[6-9]|2[6-9][0-9]|[3-9][0-9][0-9]' | sed 's/ //'

প্রথম এবং দ্বিতীয় কোনও আউটপুট দেবে না, তৃতীয়টি এবং স্পেসগুলি ছিনিয়ে নেওয়া হবে।


ধরুন আমার কাছে 10.0.0.1 থেকে 10.0.1.244 পর্যন্ত 500 টি ঠিকানা রয়েছে। আপনার দ্বিতীয়টি grep"500" এর কারণে সেই লাইনটি ফেলে দেবে। (প্রশ্নটি কখনও বলেনি যে ফাইলে আইপি ঠিকানা (এস), যদি তারা নিজেরাই এক লাইনে থাকে)) অন্যদিকে, এটি 1234.1.1.1 এবং 1.1.1.1234 গ্রহণ করবে। তবে এ থেকে দূরে, খারাপ নয়।
জি-ম্যান

-1

কিছু যে আউটপুট পুনর্নির্দেশ outputFile

grepএটি কেবল নিদর্শন হিসাবে যেমন,

grep -sE "159.143.23.12|134.12.178.131|124.143.12.132" <outputFile>

4
দ্রষ্টব্য যে .এটি একটি নিয়মিত অভিব্যক্তি অপারেটর এবং এটির আক্ষরিক চিকিত্সা করার জন্য পালিয়ে যাওয়া দরকার
স্টাফেন চেজেলাস

1
সেগুলি নিদর্শন নয়, সেগুলি আক্ষরিক। ওপি "যে কোনও আইপি" নির্দিষ্ট করেছে বলে কোনও কার্যকর উত্তর নয়।
মার্ক হাডসন

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