مثال 55 پایتون – برنامه ای به پایتون بنویسید که آدرس آی پی را با استفاده از stdlib پایتون پیدا کند.
کد برنامه
1 2 3 4 5 |
def get_ip(): local_ips = [ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")][:1] public_ip = [(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] return local_ips[0] if local_ips else public_ip print(get_ip()) |
توضیح کد
این کد به منظور دریافت IP دستگاه (در صورت وجود) ایجاد شده است. حالا بکارگیری متغیرها و نحوه کارکرد این کد را توضیح میدهیم:
- تابع
get_ip
ایجاد شده است تا IP دستگاه را برگرداند. - در این تابع، ابتدا متغیر
local_ips
تعریف شده است. این متغیر حاوی IPهای محلی (local IPs) است. برای این کار، ازsocket.gethostbyname_ex(socket.gethostname())[2]
استفاده میشود. این دستور تمامی IP های مربوط به دستگاه را از طریق نام دستگاه (hostname) به دست میآورد. سپس با استفاده از (list comprehensions)، IPهایی که با “127.” شروع نمیشوند، استخراج میشوند. تنها اولین آیتم این لیست ([:1]
) در متغیرlocal_ips
ذخیره میشود. اگر هیچ IP محلی وجود نداشته باشد، این متغیر خالی باقی میماند. - سپس متغیر
public_ip
ایجاد میشود. برای این کار، از یک اتصال UDP به آدرس 8.8.8.8 و درگاه 53 (از دامنهنامه Google) استفاده میشود. با این اتصال، IP عمومی دستگاه برای این اتصال UDP بدست میآید. مقدار این IP در متغیرpublic_ip
ذخیره میشود. - در نهایت، با چک کردن
local_ips
، اگر آن مقدار وجود داشته باشد، اولین IP محلی برگردانده میشود، در غیر این صورتpublic_ip
(یعنی آخرین IP ایجاد شده) برگردانده میشود. - در نهایت، تابع
get_ip
فراخوانی شده و IP دستگاه (در صورت وجود) چاپ میشود.
مقداد علی بخشی هستم. موسیقی دان، برنامه نویس، متخصص هوش مصنوعی، علم داده، متخصص بلاکچین و توسعه دهنده ربات های هوشمند.
دانش آموخته مقطع ارشد و دکتری دانشکده فنی دانشگاه تهران هستم. با سابقه تدریس درس برنامه نویسی در دانشگاه (پردیس بین الملل کیش دانشگاه تهران)