یک فهرست پروکسی رایگان، برگه راهاندازیای که بخش IT فرستاده و صفحه راهنمای یک افزونه مرورگر، همه آدرسی نشان میدهند که به یک عدد ختم میشود: 8080. یک هفته بعد Jenkins را روی لپتاپ خود نصب میکنید و اجرا نمیشود، چون پورت 8080 از قبل در حال استفاده است. یک عدد دو بار سر راهتان قرار گرفته و هیچکدام از دو پیام نمیگوید معنایش چیست.
در این نوشته توضیح میدهیم 8080 برای چه کاری ثبت شده است، چرا هم پروکسیها و هم سرورهای توسعه آن را انتخاب میکنند و 3128، 1080، 443، 8000 و 8888 چه معنایی دارند. سپس دو حالت «اتصال برقرار نمیشود» را از هم جدا میکنیم و نشان میدهیم برنامهای را که 8080 را در اختیار گرفته چگونه پیدا کنید.
پورت 8080 چیست؟
پورت عددی است که به رایانه میگوید اتصال را به کدام برنامه بدهد. آدرس IP رایانه را پیدا میکند و پورت، برنامه روی آن رایانه را. ایده کلی را در تفاوت TCP و UDP توضیح دادهایم؛ این نوشته درباره شمارههای مشخص است.
فهرست رسمی را IANA (Internet Assigned Numbers Authority) نگه میدارد. در فهرست پورتهای IANA، 8080 برای TCP و UDP با نام http-alt و توضیح «HTTP Alternate (see port 80)» ثبت شده است. برخی وبسایتها میگویند 8080 هیچ تخصیص رسمی ندارد؛ فهرست IANA خلاف این را نشان میدهد.
RFC 6335 شمارههای پورت را به سه بازه تقسیم میکند. پورتهای 0 تا 1023 پورتهای سیستمی (System Ports) هستند و 80 و 443 در همین بازه قرار دارند. پورتهای 1024 تا 49151 پورتهای کاربری (User Ports) هستند که آنها را هم IANA تخصیص میدهد؛ 8080، 3128 و 1080 در این بازهاند. پورتهای 49152 تا 65535 پویا هستند و هرگز به سرویسی تخصیص داده نمیشوند.
چرا 8080 هم پورت پروکسی است و هم پورت دوم وبسرور؟
روی یک آدرس IP، در هر لحظه فقط یک برنامه میتواند روی یک پورت مشخص گوش دهد. اگر یک وبسرور پورت 80 را گرفته باشد، وبسرور دوم باید عدد دیگری انتخاب کند و 8080 بهراحتی «80 دیگر» خوانده میشود.
بحث مجوزها هم به همین نتیجه میرسد. در Linux، گرفتن پورتی زیر 1024 به مجوزی به نام CAP_NET_BIND_SERVICE نیاز دارد که در عمل یعنی دسترسی root (capabilities(7)). برنامهای که قرار است با کاربر عادی اجرا شود عددی بالای 1023 برمیدارد و برای ترافیک وب، 8080 انتخاب بدیهی است.
Jenkins روی 8080 گوش میدهد، مگر اینکه با --httpPort پورت دیگری تعیین کنید. فایل RUNNING.txt در Tomcat از 8080 بهعنوان پورت HTTP نام میبرد که Tomcat هنگام راهاندازی میکوشد آن را بگیرد. مستندات Docker مثال -p 8080:80 را به کار میبرد که پورت 8080 رایانه شما را به پورت 80 درون کانتینر میرساند (انتشار پورت در Docker).
پروکسیهای HTTP هم به زبان HTTP صحبت میکنند، به همین دلیل بسیاری از آنها هم روی 8080 گوش میدهند. این یک عادت است نه یک قاعده: هیچ چیز در فهرست IANA پورت 8080 را به پروکسیها گره نمیزند.
شماره پورت در انتهای آدرس چگونه کار میکند؟
پورت تعیین میکند اتصال شما کدام در را بزند:
- آدرس بدون پورت. آدرس
http://به پورت 80 و آدرسhttps://به پورت 443 میرود. RFC 9110 این پیشفرضها را تعیین میکند و به همین دلیل این عددها را بهندرت میبینید. - پورت پس از دونقطه.
example.com:8080به همان سرور میرسد، اما برنامهای پاسخ میدهد که روی پورت 8080 گوش میدهد. - localhost:8080.
localhostهمان دستگاهی است که از آن استفاده میکنید، پس این آدرس به برنامهای روی رایانه خودتان میرسد. - تنظیم پروکسی. وقتی آدرس و پورت پروکسی تنظیم شده باشد، مرورگر هر درخواست را نخست به آن پورت میفرستد و پروکسی آن را به مقصد میرساند.
- هیچ برنامهای گوش نمیدهد. اگر هیچ برنامهای روی پورت گوش ندهد، رایانه اتصال را رد میکند. بیشتر پیامهای «اتصال برقرار نمیشود» از همینجا آغاز میشوند.
پورتهای رایج پروکسی و معنای آنها
IANA عددی را به یک سرویس اختصاص میدهد اما جلوی استفاده دیگران از آن برای کاری دیگر را نمیگیرد، به همین دلیل جدول زیر ثبت IANA و کاربرد روزمره را جدا نگه میدارد.
| پورت | ثبت در IANA | کجا میبینید | درباره پروکسی چه میگوید |
|---|---|---|---|
| 80 | http | پیشفرض آدرسهای http:// | چیز زیادی نمیگوید؛ از ارائهدهنده بپرسید |
| 443 | https (HTTP روی TLS) | پیشفرض آدرسهای https:// | پروکسی هم میتواند اینجا گوش دهد؛ در شبکههای سختگیر به کار میآید |
| 1080 | socks | سرورهای SOCKS، بر پایه RFC 1928 | معمولاً SOCKS5؛ جایش در خانه پروکسی HTTP نیست |
| 3128 | ndl-aas (Active API Server Port) | پیکربندی پیشنهادی Squid | احتمالاً پروکسی HTTP به سبک Squid؛ این ثبت متعلق به Squid نیست |
| 8000 | irdmi | سرور آزمایشی پایتون، برخی ارائهدهندگان پروکسی | فقط همان چیزی که ارائهدهنده میگوید |
| 8080 | http-alt (HTTP Alternate) | Jenkins، Tomcat، مثالهای Docker، بسیاری از پروکسیهای HTTP | اغلب پروکسی HTTP، اما تضمینی نیست |
| 8888 | ddi-tcp-1 (NewsEDGE server) | ابزارهای محلی گوناگون | فقط همان چیزی که ارائهدهنده میگوید |
پورت 3128 چیست؟
پورت 3128 را بیشتر مردم با Squid میشناسند؛ Squid یک پروکسی کشکننده متنباز است که مدرسهها و شرکتها اجرا میکنند. مستندات http_port در Squid هیچ مقدار پیشفرضی ذکر نمیکند، http_port 3128 را پیشنهاد میدهد و میگوید Squid معمولاً روی 3128 گوش میدهد. این عدد از راه همین پیکربندی نمونه رواج یافت.
در فهرست IANA، پورت 3128 به ndl-aas تعلق دارد که هیچ ربطی به Squid ندارد. عدد 3128 در تنظیم پروکسی مدرسه یا محل کار به احتمال زیاد یعنی Squid یا یک پروکسی HTTP مشابه، اما فقط مدیر شبکه میتواند این را تأیید کند. چنین پروکسیای برای افراد درون شبکه کار میکند: یک فوروارد پروکسی (فوروارد پروکسی و ریورس پروکسی). نصب Squid روی سرور خودتان و باز کردن 3128 فقط برای آدرسهای IP مجاز را در راهنمای راهاندازی پروکسی Squid توضیح دادهایم.
پورتهای 1080 و 443: SOCKS و ترافیک رمزگذاریشده وب
RFC 1928، استاندارد SOCKS5 از مارس 1996، میگوید سرویس SOCKS طبق عرف روی پورت TCP شماره 1080 قرار دارد و IANA هم 1080 را با نام socks فهرست کرده است. آدرسی که به 1080 ختم میشود به احتمال زیاد یک سرور SOCKS است (پروکسی SOCKS5 چیست؟) و جایش در خانه پروکسی HTTP ویندوز یا مرورگر نیست. پروکسی SOCKS5 محصول ما برای این نوع ترافیک است و مقایسه آن با HTTP در تفاوت پروکسی SOCKS و HTTP آمده است.
پورت 443 پیشفرض آدرسهای https:// است، پس تقریباً هر صفحه امنی از آن استفاده میکند و پروکسی هم میتواند روی آن گوش دهد. این در شبکههای محدود اهمیت دارد: برخی فایروالهای محل کار و مدرسه فقط اجازه خروج ترافیک به پورتهای 80 و 443 را میدهند و در این حالت پروکسی روی 8000 یا 8080 به timeout میخورد (پروکسی و فایروال). برای ترافیک وب، پروکسی HTTPS نوعی است که مرورگرها و تنظیم پروکسی ویندوز مستقیم آن را میفهمند.
پورتهای 8000 و 8888 چه معنایی دارند؟
هیچکدام برای پروکسی ثبت نشدهاند. IANA پورت 8000 را با نام irdmi و 8888 را با نام ddi-tcp-1 فهرست کرده و در مدخل 8888 آمده است که استفاده غیرمجاز از این پورت گزارش شده است. روی رایانه یک توسعهدهنده، 8000 اغلب از پایتون میآید که وبسرور داخلی آن بهطور پیشفرض روی همین پورت گوش میدهد. ارائهدهندگان پروکسی این عددها را به انتخاب خود به کار میبرند؛ در مثالهای این وبلاگ، نقطه اتصال HTTP ما pr.proxynet.io:8000 است.
آیا شماره پورت نوع پروکسی را تعیین میکند؟
نه. نرمافزاری که روی پورت گوش میدهد نوع را تعیین میکند؛ عدد فقط برچسبی است که ارائهدهنده انتخاب کرده است. یک ارائهدهنده میتواند روی یک میزبان، HTTP و SOCKS5 را از راه پورتهای مختلف ارائه دهد: در مثالهای ما pr.proxynet.io:8000 پروکسی HTTP و pr.proxynet.io:1080 پروکسی SOCKS5 است.
اگر پورت SOCKS5 را در خانه پروکسی HTTP ویندوز بنویسید، سرور اتصال را میبندد. وقتی تنظیم پروکسی HTTP را به یک پورت SOCKS5 محلی نشانه رفتیم، کروم خطای ERR_EMPTY_RESPONSE را نشان داد و curl پیام Proxy CONNECT aborted را گزارش کرد. تشخیص مشکل در خطای پروکسی و پاسخ ندادن سرور پروکسی آمده است و اینکه ارائهدهندهتان هر پورت را کجا نشان میدهد در نوشته نشانی سرور پروکسی چیست و کجا پیدا میشود؟ آمده است.
«پورت 8080 در حال استفاده است» و «اتصال برقرار نمیشود»: دو حالت متفاوت
نخست روشن کنید در کدام سو هستید: به یک پروکسی وصل میشوید یا برنامهای را روی رایانه خودتان اجرا میکنید.
از پروکسیای استفاده میکنید که به 8080 ختم میشود
مرورگر نتوانسته به پروکسی در آن آدرس و پورت برسد. آدرس، پورت و نوع پروکسی را دوباره از پنل ارائهدهندهتان کپی کنید و مطمئن شوید پلن شما فعال است. همان تنظیمها را از راه اشتراک اینترنت همراه گوشی بیازمایید تا ببینید آیا شبکه محلی پورت را مسدود میکند. بررسیهای کامل در خطای پروکسی و پاسخ ندادن سرور پروکسی آمده است.
برنامهای روی رایانه شما نمیتواند پورت 8080 را بگیرد
پیامهایی مانند «Port 8080 was already in use»، «address already in use» یا EADDRINUSE یعنی برنامه دیگری پورت را در اختیار دارد و هر پورت در هر لحظه فقط یک برنامه را میپذیرد. علتهای معمول:
- نسخهای قدیمی هنوز اجرا میشود و پس از بستن پنجرهاش در پسزمینه مانده است.
- سرویسی همراه ویندوز آغاز میشود. نصبکنندههای Jenkins و Tomcat میتوانند سرویسی ثبت کنند که هنگام روشن شدن رایانه 8080 را میگیرد.
- یک کانتینر Docker آن را گرفته است. کانتینری که با
-p 8080:...اجرا شده، تا زمانی که در حال اجراست پورت را نگه میدارد. - ویرایشگر کد شما هنوز سرور پروژهتان را در ترمینالی که فراموشش کردهاید اجرا میکند.
دو راه دارید: برنامهای را که پورت را گرفته، پس از اینکه فهمیدید چیست، متوقف کنید، یا برنامه تازه را به عدد دیگری مانند 8081 ببرید. در Jenkins این کار با گزینه --httpPort انجام میشود؛ در Tomcat باید عدد 8080 را در conf/server.xml تغییر دهید، همان کاری که RUNNING.txt هنگام اشغال بودن پورت توصیه میکند.
پیشرفته: کدام برنامه از پورت 8080 استفاده میکند؟
این بخش برای خوانندگانی است که با پنجره فرمان راحتاند؛ میتوانید از آن بگذرید. این فرمانها فقط رایانه خودتان را بررسی میکنند.
# Windows (Command Prompt): the last column is the process ID (PID)
netstat -ano | findstr :8080
tasklist /FI "PID eq 1234"
# macOS and Linux
lsof -i :8080در خروجی netstat سطری را پیدا کنید که LISTENING دارد، برای نمونه TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 6508. آخرین عدد، PID برنامهای است که پورت را در اختیار دارد. PID را بهجای 1234 در فرمان tasklist بگذارید تا نام برنامه را ببینید، یا آن را در ستون PID زبانه Details در Task Manager پیدا کنید. راهنمای netstat در Microsoft گزینه -o را که PID را به خروجی میافزاید توضیح میدهد.
در macOS و Linux، فرمان lsof -i :8080 نام برنامه و PID را فهرست میکند (راهنمای lsof)؛ سرویسی که با حساب کاربری دیگری اجرا میشود ممکن است فقط با sudo دیده شود. پیش از بستن هر برنامه بررسی کنید که چیست: یک PID ناشناخته ممکن است پایگاه دادهای باشد که برنامه دیگری به آن نیاز دارد.
کاربردها
- وارد کردن پروکسی در مرورگر: آدرس و پورت در دو خانه جداگانه نوشته میشوند (تنظیم پروکسی در ویندوز و کروم).
- تنظیم پروکسی روی سرور Linux: نشانی URL پروکسی پورت را در خود دارد، اما curl مدخلهایی از
no_proxyرا که همراه پورت نوشته شدهاند نادیده میگیرد (تنظیمات پروکسی در Linux). - پروکسی در کد: libcurl وقتی آدرس پروکسی پورت نداشته باشد، پورت 1080 را فرض میکند (وب اسکرپینگ با PHP).
- بررسی پروکسی تازه: آدرس و پورت را نخست بیرون از مرورگر بیازمایید (چگونه پروکسی را آزمایش کنیم).
- شبکههای محل کار و مدرسه: عدد 3128 یا 8080 در تنظیمات شبکه معمولاً به فوروارد پروکسیای اشاره دارد که بخش IT اداره میکند (راهاندازی پروکسی Squid).
- اسکریپتهای محلی پایتون: اسکریپتی که نمیتواند به
localhost:8000برسد، خطای طولانی چاپ میکند (خطای max retries exceeded).
اشتباهات رایج
- پروکسی HTTP دانستن هر 8080. این عدد یک عادت است؛ نوع پروکسی را پنل به شما میگوید.
- نوشتن پورت SOCKS در خانه HTTP. آدرسی با پورت 1080 در تنظیم پروکسی ویندوز به اتصال بستهشده میانجامد.
- افزودن
:8080به خانه آدرس. وقتی خانه جداگانهای برای پورت هست، خانه آدرس فقط نام میزبان یا IP را میپذیرد. - اعتماد به سطر
IP:8080از یک فهرست رایگان. هیچکس به شما نمیگوید چه کسی این سرورها را اداره میکند یا چه چیزی را ثبت میکنند (پروکسی رایگان امن است؟). - خاموش کردن فایروال برای رفع تداخل پورت. تداخل میان دو برنامه روی رایانه شماست؛ فایروال نقشی در آن ندارد.
- باور به اینکه IANA پورت 3128 را به Squid داده است. فهرست IANA پورت 3128 را با نام
ndl-aasثبت کرده است.
راهنمای انتخاب
| نیاز | پیشنهاد |
|---|---|
| ارائهدهنده پورتی به شما داده و مطمئن نیستید کجا باید نوشته شود | آن را همراه نوع پروکسیاش وارد کنید؛ پیدا کردن نشانی پروکسی را ببینید |
| مرورگر به پروکسیای که به 8080 ختم میشود وصل نمیشود | آدرس، پورت و پلن را با پنل مقایسه کنید؛ سپس خطای پروکسی و پاسخ ندادن سرور |
| Jenkins، Tomcat یا Docker میگوید پورت 8080 در حال استفاده است | برنامه را با فرمانهای بخش پیشرفته پیدا کنید؛ متوقفش کنید یا به 8081 بروید |
| پروکسی روی 8000 یا 8080 در محل کار یا مدرسه به timeout میخورد | شبکه ممکن است فقط 80 و 443 را مجاز بداند؛ از مدیر شبکه بپرسید (پروکسی و فایروال) |
| یک بازی یا پیامرسان به SOCKS نیاز دارد | از پورت SOCKS مانند 1080 همراه پروکسی SOCKS5 استفاده کنید |
| میخواهید سرویسی را در خانه روی 8080 برای دیگران اجرا کنید | این کار هدایت پورت در مودم است (تفاوت TCP و UDP) |
سطر IP:8080 را در یک فهرست رایگان پیدا کردهاید | هیچ رمز یا اطلاعات شخصی از آن نفرستید (پروکسی رایگان امن است؟) |
پرسشهای متداول
تفاوت پورت 8080 و پورت 80 چیست؟
پورت 80 پیشفرض آدرسهای http:// است، پس مرورگر بیآنکه به آن گفته شود از آن استفاده میکند. پورت 8080 جایگزین ثبتشده برای همان ترافیک است و باید در آدرس نوشته شود، مانند example.com:8080. ترافیک همان HTTP است؛ فقط درِ ورود فرق میکند.
پورت 8080 را چگونه باز کنم؟
«باز کردن پورت» دو معنای متفاوت دارد. اگر برنامهای روی رایانه شما باید از دستگاههای دیگر خانه اتصال بپذیرد، آن را در فایروال ویندوز مجاز کنید. اگر افرادی در اینترنت باید به آن برسند، به قاعده هدایت پورت (Port Forwarding) در مودم هم نیاز دارید. استفاده از پروکسی به هیچکدام نیاز ندارد، چون رایانه شما اتصال را به سمت بیرون آغاز میکند؛ مراحل تنظیم مودم در تفاوت TCP و UDP آمده است.
localhost:8080 یعنی چه؟
یعنی برنامهای که روی پورت 8080 همان دستگاهی گوش میدهد که از آن استفاده میکنید، مانند یک وبسرور محلی، پنل Jenkins یا برنامهای درون کانتینر. دستگاه دیگری نمیتواند از همین آدرس استفاده کند، چون آنجا localhost به خود آن دستگاه اشاره دارد.
آیا پورتهای 8000 و 8888 پورت پروکسی هستند؟
از نظر ثبت نه: IANA پورت 8000 را با نام irdmi و 8888 را با نام ddi-tcp-1 فهرست کرده است. برخی ارائهدهندگان باز هم از آنها استفاده میکنند و این مشکلی ندارد. پورتی که ارائهدهندهتان میدهد همان پورتی است که کار میکند.
پورت 443 چیست و آیا پروکسی میتواند روی آن کار کند؟
پورت 443 پیشفرض آدرسهای https:// است. پروکسی مانند هر پورت دیگری میتواند روی 443 هم گوش دهد و این در شبکههایی که فقط اجازه خروج ترافیک به 80 و 443 را میدهند کمک میکند. از ارائهدهندهتان بپرسید آیا این گزینه را ارائه میدهد.
آیا باز گذاشتن پورت 8080 امن است؟
خطر یک پورت باز به اندازه خطر برنامه پشت آن است. سرور توسعه یا پنل مدیریتی که روی 8080 از اینترنت در دسترس باشد، یا پروکسی بدون رمز، به غریبهها امکان استفاده از آن را میدهد. ابزارهای محلی را محلی نگه دارید، قاعدههای هدایت پورت مودم را که دیگر لازم ندارید حذف کنید و از هر چیزی که در دسترس دیگران میگذارید با رمز محافظت کنید.
خلاصه
پورت 8080 در IANA با نام http-alt، یعنی پورت جایگزین ترافیک وب، ثبت شده است و به همین دلیل هم سرورهای توسعه و هم پروکسیهای HTTP از آن استفاده میکنند. شماره پورت هرگز نوع پروکسی را تعیین نمیکند: 3128 عادتی برگرفته از Squid است، 1080 پورت ثبتشده SOCKS است و پورتی که باید وارد کنید همان است که در پنل ارائهدهندهتان آمده. برای پیام «اتصال برقرار نمیشود»، نخست روشن کنید به یک پروکسی وصل میشوید یا برنامهای را روی رایانه خودتان اجرا میکنید، چون راهحلها فرق دارند. اگر پروکسیهایی با پورتهای جداگانه HTTP و SOCKS5 لازم دارید، خدمات پروکسی ما را ببینید.




