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

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

הפרידו גם בין ייצוג לבין מסגור. קריאה מהתקן socket יכולה להחזיר פחות בייטים מהמבוקש. קראו את השדה כולו, ואז פרשו אותו לפי גרסת SOCKS וסוג הכתובת. כתובות SOCKS5 יכולות להכיל כתובת IPv4, כתובת IPv6 או שם תחום עם קידומת אורך; הנחה קבועה של ארבעה בייטים מכסה רק אחת מהצורות האלה.

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

מאמרים קשורים