עבור לתוכן

איך אני יודע איזה Port לבחור לתוכנות שאני בונה?

Featured Replies

פורסם

אחרי מספר תגובות בפרוומים אחרים אז אני פשוט צריך תשובה לשאלה הזאת ואין צורך לקרוא את מה שהיה כתוב פה לפני שערכתי:

בעיקרון שאני בונה תוכנה אני צריך לנחש פורט ש:

ששום תוכנה במחשב שלי לא משתמשת בפורט הזה ?

או

ששום תוכנה בשום מחשב ברשת הביתית שלי לא משתמשת בפורט הזה?

ואיזה כלים יש לדעת אם פורט נמצא בשימוש ואיך אני מוצא פורט פנויי?

פורסם

אתה לא מוריד את מה שיש אחרי הנקודה. נגיד שהמחשב הוא הבנין, וכתובתו היא 192.168.60.4

שלחת דואר למחשב/בניין, אבל הדוור לא יודע לאיזה דייר/תוכנה לתת אותו. כאן מגיעים פורטים.

נניח ששלחת דואר ל192.168.60.4:80, הדוור יודע שזה אמור להגיע לשרת HTTP. שלחת דואר ל192.168.60.4:23, והדוור ממען את זה לtelnet וכן הלאה.

פורסם

ערוך בבקשה את הכותרת בהתאם לחוקי הפורום.

חוץ מזה, הועבר לפורום רשתות.

פורסם
  • מחבר

בעיקרון שאני בונה תוכנה אני צריך לנחש פורט ש:

ששום תוכנה במחשב שלי לא משתמשת בפורט הזה ?

או

ששום תוכנה בשום מחשב ברשת הביתית שלי לא משתמשת בפורט הזה?

ואיזה כלים יש לדעת אם פורט נמצא בשימוש ואיך אני מוצא פורט פנויי?

פורסם

מה אתה מנסה לעשות?

בעיקרון, לצורך הקשבה לפורטים יש תקנים. לכל פרוטוקול יש פורט שמוקצה לו. שרת HTTP אמור להקשיב לפורט 80, שרת FTP אמור להקשיב לפורט 21 וכיוצא בזה.

הנה רשימה של פורטים ושימושיהם הידועים: http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

כאן מגיעה השאלה מה אתה רוצה לעשות בעצם. אם המטרה היא להקשיב לתקשורת נכנסת בפורט קבוע (כפי שעושה שרת HTTP למשל) אתה צריך לראות להשתמש בפורט שמוקצה לאותה מטרה. לפי העניין, לפעמים אפשר ועדיף להשתמש בפורט חלופי (למשל 8080 משמש לפעמים כפורט חלופי לשרתי HTTP). אם לא מוקצה פורט לשימוש שלך, אתה יכול לבחור פורט מהטווח 49152–65535 ולהשתמש בו באופן חופשי.

לעומת זאת, אם מה שאתה רוצה לעשות זה לקבל מידע ע"פ בקשה (כמו דפדפן למשל), אתה לא רוצה להשאיר פורט קבוע פתוח. במקום זה, על כל בקשה שאתה שולח לשרת אתה מצרף מספר פורט אקראי בטווח 49152–65535, ומקשיב לאותו פורט עד שמתקבלת התשובה.

כל זה הסבר מאד כללי. אם תרצה הסברים יותר מדוייקים תצטרך להסביר מה בדיוק אתה מנסה לעשות.

פורסם
  • מחבר

אמרתי לשרת בCHAT שבניתי ככה: (שיקשיב לפורט 8000 אם אתה לא יודע C#)

קוד:


TcpListener TcpListener = new TcpListener(IPAddress.Any, 8000);

ובצד הלקוח ככה: (אמרתי לו להתחבר לאיפי הזה עם פורט 8000)





this.MyConection = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
this.MyConection.Connect("192.168.1.120", 8000);

אז אם בצד השרת הייתי אומר לו שיחכה לפורט של 80 זה גם היה טוב או שהפורט הזה במיוחד רק לדפי אינטרנט? ואם הייתי נותן לו פורט 8923838 זה יהיה טוב?

השאלה שלי זה איך אני יודע איזה פורט לתת נגיד שאני בונה תוכנה כמו פה

אז אני ישמח אם תגיד לי איזה מהאפשרות נכונה:

בעיקרון שאני בונה תוכנה אני צריך לנחש פורט ש:

ששום תוכנה במחשב שלי לא משתמשת בפורט הזה ?

או

ששום תוכנה בשום מחשב ברשת הביתית שלי לא משתמשת בפורט הזה?

פורסם

אז בעצם יש לך גם צד שרת וגם צד לקוח. בצד השרת אתה צריך פורט קבוע, ובחרת 8000. לצורך העניין זה יעבוד, אבל אם אתה מתכוון אי פעם להפיץ את התוכנה (מה שכנראה לא יקרה?) כדאי לשנות לפורט שאיננו בשימוש ע"י פרוטוקול אחר.

בצד הלקוח אתה לא צריך לעשות שום דבר בעניין, כי הסוקט עושה את העבודה במקומך. כל מה שאתה צריך זה בעצם לפנות לשרת בפורט שהוא מקשיב אליו (8000) - שזה כנראה מה שעשית, והסוקט יבחר פורט מקומי אקראי במקומך ויודיע לשרת לשלוח אליו את התשובה (בערך. הנקודה היא שאתה לא צריך לעשות שום דבר מיוחד).

ממה שהבנתי מהקוד שלך, הוא אמור לעבוד. הוא עובד?

פורסם
  • מחבר

הקוד עובד ואין לי שום בעיה איתו. סתם הבאתי אותו לצורך דוגמא לשאלה שלי.

עכשיו עוד לא קלטתי את התשובה.

1. "כדאי לשנות לפורט שאיננו בשימוש ע"י פרוטוקול אחר" מזה אומר?

2. "והסוקט יבחר פורט מקומי אקראי במקומך ויודיע לשרת לשלוח אליו את התשובה" מזה אומר?

3. אני ממש מבקש שתענו לי לזה:

אז אני ישמח אם תגיד לי איזה מהאפשרות נכונה:בעיקרון שאני בונה תוכנה אני צריך לנחש פורט ש:

ששום תוכנה במחשב שלי לא משתמשת בפורט הזה ?

או

ששום תוכנה בשום מחשב ברשת הביתית שלי לא משתמשת בפורט הזה?

פורסם

אתה לא בוחר פורט בצד לקוח. אתה בוחר פורט רק בצד שרת. גם כשאתה כותב פורט בקוד של צד לקוח, מדובר בפורט הפתוח שעל השרת. כאמור ניהול הפורטים בצד לקוח מנוהל אוטומטית ע"י הסוקט, ואתה לא צריך לדעת ממנו כלום.

כשאתה בונה תוכנה אתה לא צריך לנחש כלום. אתה צריך לבחור (לשרת) פורט בצורה מושכלת, ע"י בדיקה (בלינק שנתתי) אילו פורטים תפוסים ע"י פרוטוקול ידוע, ולהימנע מהם, לא יותר.

פורסם

אני יודע שיש רשימות ענקיות של פורטים בשימוש של תוכנות מוכרות ושירותים.

תעשה חיפוש אתה בטוח תמצא.

עריכה: מהסקרנות עשיתי חיפוש.

סמוך על ויקיפדיה שזה יהיה גם שם...

http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

עכשיו רק תבחר משהו שלא תפוס.

פורסם

השאלה שלך לא כל כך ברורה, בגלל זה מתקשים לענות לך עליה.

קודם כל חשוב לציין שלכל פאקט יש 2 פורטים. פורט מקור ופורט יעד.

בתקשורת שרת-לקוח:

פורט היעד בפאקט ששולח הלקוח - הוא הפורט שאליו התוכנה שבשרת מאזינה. (לכן מחשב פיזי אחד יכול להחזיק כמה שרתים שונים - כי כל אחד עובד בפורט אחר.)

פורט המקור בפאקט ששולח הלקוח - הוא פורט ראנדומלי בין 49152 - 65535 שזה טווח הפורטים הלא מוכרים ולא רשומים,

(אין פורט 8923838 לכן השאלה שלך לא רלוונטית.)

המטרה של פורט המקור הוא שהמחשב יוכל להבדיל בין כל הפאקטים שמגיעים אליו חזרה - איזה פורט שייך לכל תהליך במחשב.

לכן פורטים זה בעצם מספר שמצורף לכתובת IP, כי להפריד בין פאקטים שמגיעים לאותו מחשב - כל אחד לאיזה תהליך במחשב הוא שייך.

עד כאן, התשובה הנכונה היא "ששום תוכנה במחשב שלי לא משתמשת בפורט הזה".

אבל! קיים מנגנון שנקרא NAT (שבצורה הרלוונטית לנו בעצם נקרא PAT, או NPAT).

רק למקרה שאתה לא מכיר, מה שזה עושה זה מחליף את הכתובת Source IP הפנימית שיוצאת מהרשת, לכתובת Source IP חוקית שמתקבלת מהISP.

במקרה שיש NAT (כמעט בכל הרשתות בעולם), המנגנון מנתב את הפאקטים לכל מחשב לפי פורט המקור (אותו פורט ראנדומלי) שאיתו יצא הפאקט מהמחשב הלקוח.

לכל חשוב שכל פאקט יצא עם פורט מקור ייחודי. מכיוון שיש טווח רחב של פורטים לא רשומים ולא מוכרים, זו לא בעיה.

לכן שתי התשובות נכונות, תלוי אם יש NAT באותה רשת, או לא.

עריכה:

כמובן שכמו שyonizaf ציין, כל מנגנון בחירת אותו פורט ראנדומלי זה לא משהו שאתה בתור כותב התוכנה מתעסק איתו, אלא מע"ה של מחשב הלקוח.

כשאתה בוחר בפורט לתוכנה שאתה בונה, אתה בעצם בוחר את פורט היעד של הפאקטים של מחשב הלקוח.

שזה חשוב שלא יהיה עוד פורט כזה על אותו מחשב.

ברגע שבונים תוכנה רצינית, או ממציאים פרוטוקול גדול, אז רושמים את הפורט הזה בIANA (הגוף שאחראי על רישום הפורטים והכתובות)

ואז זה ניהיה פורט רשום, ואז אף אחד לא יכול להשתמש בו.

אם לא, אז פשוט נותנים אפשרות לבחור פורט (כמו שבהרבה תוכנות יש לך אפשרות לבחור פורט לעבוד איתו.)

פורסם

הכי טוב לתת למשתמש לבחור פורט, פשוט, קל וחוסך כאב ראש אם יש במקרה 2 קליינטים שמאזינים על אותו פורט.

פורסם
  • מחבר

אם יש לי 2 מחשבים ברשת ביתית ושתיהם עובדים כשרתים ושתיהם מחכים לחיבורים מפורט 3890493 (סתם דוגמא עכשיו). זה אפשרי?

פורסם

אם ה-IP הפנימי שלהם שונה (מן הסתם כן) אז כן.

הבעייה שיכולה להיות היא אם יש תוכנה נוספת במחשב שמאזינה \ שולחת על אותו פורט. שוב, ישנם תוכנות לא סטנדרטיות שיתכן שאתה

משתמש בהן שמשתמשות דווקא בפורט שאתה מקצה לתוכנה שאתה כותב (או שאתה יודע) - אבל מה הסיכוי. אם אתה הולך להפיץ את התוכנה שלך, מן הראוי בתור מתכנת לכסות את המצב הזה ולאפשר למשתמש להזין את הפורט החביב עליו.

פורסם

חוץ מזה, יש את בעיית ה-NAT ש-RLM ציין. אם שני השרתים צריכים להיות פתוחים לעולםם החיצון, אז מערכת ה-NAT צריכה למפות את הפורטים של שני השרתים הללו לפורטים שונים.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים