C struct ਖਰਾਬ SOCKS ਬੇਨਤੀ ਕਿਉਂ ਪੈਦਾ ਕਰ ਸਕਦਾ ਹੈ
ਕੰਪਾਈਲਰ ਲੇਆਉਟ ਨੂੰ ਵਾਇਰ ਫਾਰਮੈਟ ਮੰਨਣ ਦੀ ਬਜਾਏ ਸਪਸ਼ਟ ਫੀਲਡ ਚੌੜਾਈ, ਬਾਈਟ ਕ੍ਰਮ ਅਤੇ ਸਟ੍ਰੀਮ I/O ਦੀ ਜਾਂਚ ਕਰੋ।
ਵੈਧ ਪ੍ਰੌਕਸੀ ਐਡਰੈਸ ਹੱਥ ਨਾਲ ਲਿਖੇ SOCKS ਸੁਨੇਹੇ ਨੂੰ ਵੈਧ ਨਹੀਂ ਬਣਾਉਂਦਾ। C ਜਾਂ C++ struct ਭੇਜਣ ਨਾਲ ਪ੍ਰੋਟੋਕੋਲ ਵੱਲੋਂ ਕਦੇ ਨਾ ਮੰਗੀ ਗਈ ਪੈਡਿੰਗ ਜਾਂ ਹੋਸਟ-ਕ੍ਰਮ ਦੇ ਪੂਰਨ ਅੰਕ ਭੇਜੇ ਜਾ ਸਕਦੇ ਹਨ।
SOCKS5 ਡੋਮੇਨ-ਨਾਮ CONNECT ਬੇਨਤੀ ਲਈ, ਵਿਧੀ ਗੱਲਬਾਤ ਅਤੇ ਚੁਣੀ ਗਈ ਕਿਸੇ ਵੀ ਪ੍ਰਮਾਣਿਕਤਾ ਤੋਂ ਬਾਅਦ ਇਸ ਕ੍ਰਮ ਨੂੰ ਸਪਸ਼ਟ ਰੂਪ ਵਿੱਚ ਸੀਰੀਅਲਾਈਜ਼ ਕਰੋ:
- ਵਰਜਨ, ਕਮਾਂਡ, ਰਾਖਵਾਂ ਬਾਈਟ ਅਤੇ ਐਡਰੈਸ ਕਿਸਮ
- ਡੋਮੇਨ ਲੰਬਾਈ ਅਤੇ ਡੋਮੇਨ ਬਾਈਟਾਂ
- ਨੈੱਟਵਰਕ ਬਾਈਟ ਕ੍ਰਮ ਵਿੱਚ ਦੋ-ਬਾਈਟ ਮੰਜ਼ਿਲ ਪੋਰਟ
ਐਡਰੈਸ ਦੀਆਂ ਲੰਬਾਈਆਂ SOCKS ਵਰਜਨ ਅਤੇ ਐਡਰੈਸ ਕਿਸਮ 'ਤੇ ਨਿਰਭਰ ਕਰਦੀਆਂ ਹਨ। ਸਥਿਰ ਚੌੜਾਈ ਵਾਲੇ ਸੰਖਿਆਤਮਕ ਫੀਲਡਾਂ ਨੂੰ ਉਨ੍ਹਾਂ ਦੀ ਨਿਰਧਾਰਿਤ ਪੇਸ਼ਕਾਰੀ ਚਾਹੀਦੀ ਹੈ; ਡੋਮੇਨ ਸਟਰਿੰਗਾਂ ਦੀ ਆਪਣੀ ਲੰਬਾਈ ਐਨਕੋਡਿੰਗ ਹੈ। C ਸਟਰਿੰਗ ਟਰਮੀਨੇਟਰ ਵਾਇਰ ਸੁਨੇਹੇ ਵਿੱਚ ਜ਼ੀਰੋ ਜੋੜਨ ਦੀ ਆਮ ਹਦਾਇਤ ਨਹੀਂ ਹੈ।
| ਲਾਗੂ ਕਰਨ ਦਾ ਛੋਟਾ ਰਾਹ | ਜਾਂਚਣ ਵਾਲੀ ਸਮੱਸਿਆ |
|---|---|
| 8-ਬਿੱਟ ਪੁਆਇੰਟਰ ਰਾਹੀਂ 32-ਬਿੱਟ ਮੁੱਲ ਦੇਣਾ | ਇਹ ਚਾਰੇ ਬਾਈਟ ਨਹੀਂ ਕੱਢਦਾ |
| ਬਫ਼ਰ ਨੂੰ ਵੱਡੇ ਪੂਰਨ ਅੰਕ ਪੁਆਇੰਟਰ ਵਿੱਚ ਕਾਸਟ ਕਰਨਾ | ਸੰਰੇਖਣ ਅਤੇ ਬਾਈਟ ਕ੍ਰਮ ਅਜੇ ਵੀ ਸੰਭਾਲਣਾ ਪਵੇਗਾ |
| ਮੰਨ ਲੈਣਾ ਕਿ ਇੱਕ ਪੜ੍ਹਨਾ ਜਾਂ ਲਿਖਣਾ ਇੱਕ ਸੁਨੇਹਾ ਹੈ | TCP ਪ੍ਰੋਟੋਕੋਲ ਕ੍ਰਮ ਦਾ ਸਿਰਫ਼ ਇੱਕ ਹਿੱਸਾ ਭੇਜ ਸਕਦਾ ਹੈ |
ਹਰ ਫੀਲਡ ਦੀ ਤੁਲਨਾ ਇੱਛਤ ਮੰਜ਼ਿਲ ਨਾਲ ਕਰੋ ਅਤੇ ਅੰਸ਼ਿਕ I/O ਸੰਭਾਲੋ। ਦੋ ਬਾਈਟ ਮਿਲਣ ਨਾਲ ਇਹ ਸਾਬਤ ਨਹੀਂ ਹੁੰਦਾ ਕਿ ਪੂਰਾ ਜਵਾਬ ਆ ਗਿਆ ਹੈ। ਉਨ੍ਹਾਂ ਸੀਮਾਵਾਂ ਦੀ ਜਾਂਚ ਵਿਗੜੀ ਬੇਨਤੀ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਵਰਣਿਤ ਕਨੈਕਸ਼ਨ ਨੂੰ ਰੱਦ ਕਰਨ ਵਾਲੇ ਸਰਵਰ ਤੋਂ ਵੱਖ ਕਰ ਸਕਦੀ ਹੈ।