Java SOCKS വിലാസത്തിലെ ഋണ സംഖ്യകൾ ഋണ IP അല്ല
Java byte API ഉപയോഗിച്ച് SOCKS വിലാസ ഫീൽഡുകൾ പാഴ്സ് ചെയ്യുമ്പോൾ അവയെ unsigned പ്രോട്ടോക്കോൾ മൂല്യങ്ങളായി വായിക്കുക.
Java-യിൽ byte signed ആണ്. അതിനാൽ വയർ മൂല്യം 217 ആയ octet, byte array-ൽ നിന്ന് നേരിട്ട് പ്രിന്റ് ചെയ്യുമ്പോൾ ഋണ മൂല്യമായി കാണാം. ഇതിനർത്ഥം പ്രോക്സി അസാധുവായ ഋണ IP വിലാസം അയച്ചു എന്നല്ല.
സംഭരിച്ച മൂല്യം unsigned പൂർണ്ണസംഖ്യയാക്കി മാറ്റുക, ഉദാഹരണത്തിന് Byte.toUnsignedInt(value) ഉപയോഗിച്ച്, അല്ലെങ്കിൽ ഫീൽഡ് വായിക്കുമ്പോൾ DataInputStream.readUnsignedByte() ഉപയോഗിക്കുക. നെറ്റ്വർക്ക് ക്രമത്തിലുള്ള പോർട്ടിന്, ഏതെങ്കിലും byte-നെ signed ദശാംശ സംഖ്യയായി കണക്കാക്കുന്നതിന് പകരം രേഖപ്പെടുത്തിയ രണ്ട്-byte മൂല്യം വായിക്കുക.
പ്രാതിനിധ്യത്തെ ഫ്രെയിമിംഗിൽ നിന്ന് വേർതിരിക്കുക. സോക്കറ്റ് വായന ആവശ്യപ്പെട്ടതിനേക്കാൾ കുറഞ്ഞ byte നൽകിയേക്കാം. മുഴുവൻ ഫീൽഡും വായിച്ച ശേഷം SOCKS പതിപ്പും വിലാസ തരവും അനുസരിച്ച് വ്യാഖ്യാനിക്കുക. SOCKS5 വിലാസങ്ങളിൽ IPv4 വിലാസം, IPv6 വിലാസം അല്ലെങ്കിൽ നീളം-പ്രിഫിക്സുള്ള ഡൊമെയ്ൻ നാമം ഉണ്ടാകാം; നിശ്ചിത നാല്-byte അനുമാനം ഇവയിൽ ഒരു രൂപം മാത്രമേ ഉൾക്കൊള്ളൂ.
ഋണമായി തോന്നുന്ന octet ശരിയാക്കുന്നത് പ്രദർശന പ്രശ്നം പരിഹരിക്കുന്നു. എന്നാൽ തെറ്റായ ഓഫ്സെറ്റിൽ നിന്ന് വായന തുടങ്ങിയതോ വിലാസത്തിന്റെ നടുവിൽ നിന്നതോ ആയ parser-നെ അത് ശരിയാക്കുന്നില്ല.