**پینگ** یک نرم‌افزار مدیریت شبکه رایانه ای است که برای آزمایش دسترسی به یک میزبان در شبکه پروتکل اینترنت (IP) استفاده می‌شود. این برنامه تقریباً برای همه سیستم عامل‌هایی که دارای قابلیت شبکه هستند، از جمله بیشتر نرم‌افزارهای مدیریت شبکه تعبیه شده، در دسترس است.

پینگ **مدت زمان رفت و برگشت** پیام‌های ارسالی از میزبان به رایانه مقصد که به منبع برمیگردند را اندازه‌گیری می‌کند.

این نام از "اصطلاحات سونار" است که نبض صدا را می‌فرستد و برای بازگشت گوش می‌دهد تا اشیا را در زیر آب تشخیص دهد.

پینگ با ارسال بسته‌های درخواست اکو "پروتکل پیام کنترل اینترنت (ICMP)" به میزبان هدف و انتظار برای پاسخ اکو ICMP کار می‌کند. این برنامه خطاها، اتلاف بسته‌ها و خلاصه آماری نتایج را گزارش می‌دهد، و به‌طور معمول شامل حداقل، حداکثر، میانگین زمان رفت و برگشت و انحراف معیار میانگین می‌باشد.

گزینه‌های خط فرمان ابزار پینگ و خروجی آن بین پیاده‌سازی‌های متعدد متفاوت است. گزینه‌ها ممکن است شامل اندازه بار حمل، تعداد آزمایش‌ها، محدودیت‌هایی برای تعداد هاپ‌های شبکه (TTL) که کاوشگرها عبور می‌کنند، فاصله بین درخواست‌ها و زمان انتظار برای پاسخ باشد. بسیاری از سیستم‌ها برای تست در شبکه‌های پروتکل اینترنت نسخه 6 (IPv6) که ICMPv6 را پیاده‌سازی می‌کنند، یک برنامه همراه ping6 ارائه می‌دهند.

تاریخچه
-------

این ابزار پینگ توسط مایک مووس در دسامبر ۱۹۸۳ در آزمایشگاه تحقیقات بالستیک، آزمایشگاه تحقیقات ارتش ایالات متحده، نوشته شده‌است. اظهارات دیوید میلز در مورد استفاده از بسته‌های echo ICMP برای تشخیص و اندازه‌گیری شبکه IP , Muuss را وادار به ایجاد یک ابزار برای عیب‌یابی مشکلات شبکه می‌کرد. نویسنده آن را به دلیل صدایی که سونار می‌سازد، اینگونه نامگذاری کرده‌است، زیرا روش آن مشابه با اکو محل سونار است. بسته اینترنت Groper که مخفف آن PING نامیده می‌شود و بیش از ۳۰ سال است که استفاده می‌شود.

اولین نسخه منتشر شده نرم‌افزار دامنه عمومی بود. تمام نسخه‌های بعدی تحت مجوز BSD مجوز گرفته‌اند.

پینگ اولین بار در 4.3BSD قرار گرفت.

نسخه "FreeDOS" توسط Erick Engelke ساخته شده و تحت GPL مجوز دارد.

تیم کرافورد نسخه "ReactOS" را توسعه داد. تحت مجوز MIT مجوز دارد.

RFC 1122 باعث می‌شود که هر میزبان باید درخواست‌های پژواک ICMP را پردازش کند و در ازای آن پاسخ‌های اکو را صادر کند.

مثال استعلام
------------

در زیر خروجی اجرای پینگ در Linux برای ارسال پنج کاوشگر (فاصله ۱ ثانیه به‌طور پیش فرض، تنظیم از طریق -i گزینه) به میزبان هدف "**www.example.com"** وجود دارد:

```
$ ping -c 5 www.example.com
PING www.example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: icmp\_seq=0 ttl=56 time=11.632 ms
64 bytes from 93.184.216.34: icmp\_seq=1 ttl=56 time=11.726 ms
64 bytes from 93.184.216.34: icmp\_seq=2 ttl=56 time=10.683 ms
64 bytes from 93.184.216.34: icmp\_seq=3 ttl=56 time=9.674 ms
64 bytes from 93.184.216.34: icmp\_seq=4 ttl=56 time=11.127 ms

--- www.example.com ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 9.674/10.968/11.726/0.748 ms

```
در خروجی هر پیام کاوشگر و نتایج بدست آمده لیست می‌شود. در آخر، آمار کل آزمون را لیست می‌کند.

در این مثال، کوتاهترین زمان رفت و برگشت ۹٫۶۷۴ میلی ثانیه، متوسط ۱۰٫۹۶۸ میلی ثانیه و حداکثر مقدار آن ۷٫۷۲۶ میلی ثانیه بوده‌است. اندازه‌گیری دارای انحراف استاندارد ۰٫۷۴۸ میلی ثانیه بود.

نشانه‌های خطا
-------------

در موارد عدم پاسخ از میزبان هدف، بیشتر پیاده‌سازی‌ها هیچ چیزی را نشان نمی‌دهند یا به صورت دوره ای اعلان‌ها را دربارهٔ زمان پایان چاپ می‌کنند.

نتایج احتمالی پینگ نشان دهنده یک مشکل شامل موارد زیر است:

* H, !N or !P – میزبان، شبکه یا پروتکل غیرقابل دسترسی است
* S –  مسیر منبع ناموفق بود
* F –  تکه‌تکه شدن لازم است
* U or !W –  شبکه / میزبان مقصد ناشناخته است
* I –  میزبان منبع جدا شده‌است
* A –  ارتباط با شبکه مقصد از نظر مدیریت ممنوع است
* Z –  ارتباط با میزبان مقصد از نظر مدیریت ممنوع است
* Q –  برای این ToS شبکه مقصد غیرقابل دسترسی است
* T –  برای این ToS میزبان مقصد غیرقابل دسترسی است
* X –  ارتباطات از نظر اداری ممنوع است
* V –  نقض اولویت میزبان
* C –  قطع اولویت در اثر

در صورت بروز خطا، میزبان هدف یا روتر میانی یک پیام خطای ICMP را برمی‌گرداند، به عنوان مثال «میزبان غیرقابل دسترسی» یا «TTL در انتقال بیش از حد است».

علاوه بر این، این پیام‌ها شامل هشت بایت پیام اصلی (در این مورد هدر درخواست اکو ICMP، از جمله مقدار خاموش کننده) است، بنابراین برنامه پینگ می‌تواند پاسخ‌ها را با درخواست‌های اصلی مطابقت دهد.

قالب پیام
---------

### بسته ICMP

دیتاگرام IPv4|  | بیت 0 – ۷ | بیت 8 – ۱۵ | بیت 16 – ۲۳ | بیت 24 – ۳۱ |
| --- | --- | --- | --- | --- |
| سرتیتر{{سخ}} (20 بایت) | نسخه / IHL | نوع خدمات (ToS) | طول |
| شناسایی | *پرچم‌ها* و *جبران‌ها* |
| زمان زندگی (TTL) | پروتکل | سربرگ چک کردن سربرگ |
| آدرس IP منبع |
| نشانی آی پی مقصد |
| سربرگ ICMP{{سخ}} (8 بایت) | نوع پیام | کد | مجموع ارقام |
| داده‌های سرصفحه |
| محموله ICMP{{سخ}} (*اختیاری*) | داده‌های محموله |

دیتاگرام IPv6|  | بیت 0 – ۳ | بیت 4 – ۷ | بیت‌های 8 – ۱۱ | بیت 12 – ۱۵ | بیت 16 – ۲۳ | بیت 24 – ۳۱ |
| --- | --- | --- | --- | --- | --- | --- |
| سرتیتر{{سخ}} (40 بایت) | نسخه | کلاس ترافیک | برچسب جریان |
| طول محموله | سربرگ بعدی | حد هاپ |
| آدرس منبع |
| آدرس مقصد |
| سربرگ ICMP6{{سخ}} (8 بایت) | نوع پیام | کد | مجموع ارقام |
| داده‌های سرصفحه |
| محموله ICMP6{{سخ}} (*اختیاری*) | داده‌های محموله |

ترکیب عمومی بسته ICMP:

* سربرگ IPv4 (به رنگ آبی): *پروتکل* روی 1 (ICMP) و *نوع سرویس* روی ۰ تنظیم شده‌است.
* سربرگ IPv6 (به رنگ آبی): عنوان *بعدی* روی ۵۸ تنظیم شده‌است (ICMP6)
* سربرگ ICMP (با رنگ قرمز):
	+ نوع پیام ICMP (8 بیت)
	+ کد (۸ بیت)
	+ Checksum (16 بیت)، ۱۶ بیتی مکمل یک مجموعه مکمل بسته‌است. برای IPv4، این از پیام ICMP با شروع با قسمت Type (سربرگ IP موجود نیست). برای IPv6 این از پیام ICMP محاسبه می‌شود که با یک «عنوان شبه» IPv6 اضافه می‌شود.
	+ قسمت Header Data (32 بیت) که در این حالت (درخواست و پاسخ ICMP)، از شناسه (۱۶ بیت) و شماره توالی (۱۶ بیت) تشکیل خواهد شد.
* ***محموله* ICMP**: محموله برای انواع مختلف پاسخ‌ها، می‌تواند یک طول دلخواه باشد.
* با این حال، بسته‌های شامل "IP و ICMP" باید کمتر از حداکثر واحد انتقال شبکه باشد در غیر اینصورت ممکن است خطر تکه‌تکه شدن (**تقسیم ip**) رخ دهد.

### درخواست اکو

درخواست echo ("پینگ") یک پیام ICMP / ICMP6 است.

| ۰۰ | ۰۱ | ۰۲ | ۰۳ | ۰۴ | ۰۵ | ۰۶ | ۰۷ | ۰۸ | ۰۹ | ۱۰ | ۱۱ | ۱۲ | ۱۳ | ۱۴ | ۱۵ | ۱۶ | ۱۷ | ۱۸ | ۱۹ | ۲۰ | ۲۱ | ۲۲ | ۲۳ | ۲۴ | ۲۵ | ۲۶ | ۲۷ | ۲۸ | ۲۹ | ۳۰ | ۳۱ |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| نوع = 8 (IPv4، ICMP) 128 (IPv6، ICMP6) | کد = ۰ | مجموع ارقام |
| مشخص کننده | شماره ترتیب |
| ظرفیت ترابری |

مشتری می‌تواند از شناسه و شماره توالی برای مطابقت دادن پاسخ با درخواستی که باعث پاسخ شده‌است استفاده کند. در عمل، اکثر سیستم‌های لینوکس از یک شناسه منحصر به فرد برای هر فرایند پینگ استفاده می‌کنند. ویندوز از یک شناسه ثابت که بین نسخه‌های ویندوز متفاوت است و از یک شماره توالی که فقط در زمان راه اندازی مجدد تنظیم می‌شود، استفاده می‌کند.

### پاسخ اکو

پاسخ اکو یک پیام ICMP است که در پاسخ به درخواست اکو تولید می‌شود. این برای همه میزبانها اجباری است و باید شامل محموله دقیق دریافت شده در درخواست باشد.

| ۰۰ | ۰۱ | ۰۲ | ۰۳ | ۰۴ | ۰۵ | ۰۶ | ۰۷ | ۰۸ | ۰۹ | ۱۰ | ۱۱ | ۱۲ | ۱۳ | ۱۴ | ۱۵ | ۱۶ | ۱۷ | ۱۸ | ۱۹ | ۲۰ | ۲۱ | ۲۲ | ۲۳ | ۲۴ | ۲۵ | ۲۶ | ۲۷ | ۲۸ | ۲۹ | ۳۰ | ۳۱ |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| نوع = 0 (IPv4، ICMP) 129 (IPv6، ICMP6) | کد = ۰ | مجموع ارقام |
| مشخص کننده | شماره ترتیب |
| ظرفیت ترابری |

* *"شناسه* و *شماره توالی"* می‌تواند توسط مشتری استفاده شود تا هر درخواست اکو را با پاسخ خود مرتبط کند.

### ظرفیت ترابری

میزان بار بسته به‌طور کلی با کارکترهای ASCII پر می‌شود، همان‌طور که خروجی ابزار tcpdump در ۳۲ بایت آخر مثال زیر نشان می‌دهد (پس از هدر هشت بایت ICMP با شروع 0x0800):

```
16:24:47.966461 IP (tos 0x0, ttl 128, id 15103, offset 0, flags [none],
proto: ICMP (1), length: 60) 192.168.146.22 > 192.168.144.5: ICMP echo request,
id 1, seq 38, length 40
  0x0000: 4500 003c 3aff 0000 8001 5c55 c0a8 9216 E..<:..... \U....
  0x0010: c0a8 9005 0800 4d35 0001 0026 6162 6364 ......M5... &abcd
  0x0020: 6566 6768 696a 6b6c 6d6e 6f70 7172 7374 efghijklmnopqrst
  0x0030: 7576 7761 6263 6465 6667 6869 uvwabcdefghi
```
محموله می‌تواند شامل یک مهر زمان باشد که زمان انتقال و یک شماره توالی را نشان می‌دهد، که در این مثال یافت نمی‌شود.

محموله ممکن است شامل یک **بسته جادویی** برای پروتکل Wake-on-LAN باشد، اما کم‌ترین حالت محموله بیش از آن است که نشان داده شود. اگر میزبان به حالت "خواب زمستانی یا hibernation" رفته باشد، اکو معمولاً هیچ پاسخی دریافت نمی‌کند، اما اگر رابط آن برای پذیرش درخواست‌های بیدارسازی پیکربندی شود، میزبان از حالت خواب بیدار می‌شود. اگر میزبان قبلاً فعال و پیکربندی شده باشد تا بتواند به بسته‌های ورودی "ICMP درخواست اکو" پاسخ دهد، پاسخ برگردانده شده باید شامل همان محموله باشد. با تکرار یک درخواست جدید، پس از مدتی تأخیر، برای اینکه میزبان بتواند خدمات شبکه خود را از سر بگیرد، و همین‌طور برای تشخیص اینکه میزبان از راه دور بیدار شده‌است یا خیر، استفاده شود.

ملاحظات امنیتی
--------------

برای انجام یک حمله منع سرویس، یک مهاجم درخواست‌های پینگ را در سریع‌ترین زمان ممکن ارسال می‌کند، تا قربانیان را با درخواست‌های اکو ICMP غافلگیر کند. به این روش "**سیل پینگ یا ping flood**" گفته می‌شود.

از درخواست‌های پینگ به چندین آدرس و همین‌طور رفت و برگشت پینگ، می‌توان برای به دست آوردن لیستی از همه میزبانهای شبکه استفاده کرد.

* fping
* hping
* Keepalive
* nping
* Ping of death
* Ping-pong scheme
* Security through obscurity
* Smurf attack
* Traceroute

پیوند به بیرون
--------------

* پینگ | اسناد مایکروسافت



1. 1 2  Mike Muuss. "The Story of the PING Program". U.S. Army Research Laboratory. Archived from the original on 25 October 2019. Retrieved 8 September 2010. My original impetus for writing PING for 4.2a BSD UNIX came from an offhand remark in July 1983 by Dr. Dave Mills … I named it after the sound that a sonar makes, inspired by the whole principle of echo-location … From my point of view PING is not an acronym standing for Packet InterNet Grouper, it's a sonar analogy. However, I've heard second-hand that Dave Mills offered this expansion of the name, so perhaps we're both right.
2. ↑  "man page ping section 8". *www.manpagez.com*.
3. ↑  "ibiblio.org FreeDOS Package -- ping (Networking)". *www.ibiblio.org*.
4. ↑  "GitHub - reactos/reactos: A free Windows-compatible Operating System". 8 August 2019.
5. ↑  "RFC 1122 - Requirements for Internet Hosts -- Communication Layers". p. 42. Retrieved 2012-03-19. Every host MUST implement an ICMP Echo server function that receives Echo Requests and sends corresponding Echo Replies.
6. ↑  "ICMP: Internet Control Message Protocol". *repo.hackerzvoice.net*. 13 January 2000. Archived from the original on 4 August 2016. Retrieved 4 December 2014.
7. ↑  "RFC 792 - Internet Control Message Protocol". Tools.ietf.org. Retrieved 2014-02-02.
8. ↑  "RFC Sourcebook's page on ICMP". Archived from the original on 6 July 2018. Retrieved 20 December 2010.
9. ↑  "RFC 4443 - Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification". Retrieved 10 April 2020.