myip
যে নামটির নাম রয়েছে , এটি সর্বত্র কাজ করা উচিত:
alias myip="python -c 'import socket; print([l for l in ([ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith(\"127.\")][:1], [[(s.connect((\"8.8.8.8\", 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]]) if l][0][0])'"
- বর্তমান আইপিভি 4 ঠিকানা সন্ধানের জন্য পাইথন 2.x, পাইথন 3.x, আধুনিক এবং পুরাতন লিনাক্স ডিস্ট্রোস, ওএসএক্স / ম্যাকোস এবং উইন্ডোজের সাথে সঠিকভাবে কাজ করে।
- একাধিক আইপি ঠিকানা, আইপিভি,, কোনও কনফিগার করা আইপি ঠিকানা বা কোনও ইন্টারনেট অ্যাক্সেস সহ মেশিনগুলির জন্য সঠিক ফলাফলটি ফিরিয়ে দেবে না।
উপরের মত একই, তবে কেবল পাইথন কোড:
import socket
print([l for l in ([ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")][:1], [[(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]]) if l][0][0])
- কোনও আইপি ঠিকানা কনফিগার করা না থাকলে এটি একটি ব্যতিক্রম ছুঁড়ে দেবে।
ইন্টারনেট সংযোগ ছাড়াই ল্যানগুলিতেও কাজ করবে এমন সংস্করণ:
import socket
print((([ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")] or [[(s.connect(("8.8.8.8", 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]]) + ["no IP found"])[0])
(ধন্যবাদ @ সিপিপিজ্জা )
পটভূমি :
ব্যবহার socket.gethostbyname(socket.gethostname())
এখানে কাজ করে না, কারণ আমি যে কম্পিউটারগুলিতে ছিলাম তার একটিতে /etc/hosts
সদৃশ এন্ট্রি এবং রেফারেন্সগুলি ছিল। socket.gethostbyname()
শুধুমাত্র শেষ প্রবেশটি ফেরত দেয়/etc/hosts
।
এটি ছিল আমার প্রথম প্রয়াস, যা দিয়ে শুরু হওয়া সমস্ত ঠিকানাগুলি আগাছা ছড়িয়ে দেয় "127."
:
import socket
print([ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")][:1])
এটি লিনাক্স এবং উইন্ডোজে পাইথন 2 এবং 3 এর সাথে কাজ করে তবে বেশ কয়েকটি নেটওয়ার্ক ডিভাইস বা আইপিভি 6 ব্যবহার করে না। তবে এটি সাম্প্রতিক লিনাক্সের ডিস্ট্রোজে কাজ করা বন্ধ করে দিয়েছে, তাই পরিবর্তে আমি এই বিকল্প কৌশলটি চেষ্টা করেছি। এটি 8.8.8.8
বন্দরে গুগল ডিএনএস সার্ভারের সাথে সংযোগ স্থাপনের চেষ্টা করে 53
:
import socket
print([(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1])
তারপরে আমি উপরোক্ত দুটি কৌশলকে এক-লাইনারে সংযুক্ত করেছিলাম যেখানে সর্বত্র কাজ করা উচিত myip
এবং এই উত্তরের শীর্ষে উপনাম এবং পাইথন স্নিপেট তৈরি করেছি ।
আইপিভি of-এর ক্রমবর্ধমান জনপ্রিয়তা এবং একাধিক নেটওয়ার্ক ইন্টারফেস সহ সার্ভারের জন্য, আইপি ঠিকানা সন্ধানের জন্য তৃতীয় পক্ষের পাইথন মডিউল ব্যবহার করা সম্ভবত এখানে তালিকাভুক্ত যে কোনও পদ্ধতির চেয়ে বেশি শক্তিশালী এবং নির্ভরযোগ্য।