Vì sao một struct C có thể tạo ra yêu cầu SOCKS sai
Hãy kiểm tra độ rộng trường tường minh, thứ tự byte và I/O luồng thay vì coi cách trình biên dịch bố trí là định dạng trên đường truyền.
Một địa chỉ proxy hợp lệ không làm cho thông điệp SOCKS viết tay trở nên hợp lệ. Gửi một struct C hoặc C++ có thể gửi phần đệm hoặc số nguyên theo thứ tự máy chủ mà giao thức chưa từng yêu cầu.
Đối với yêu cầu SOCKS5 CONNECT có tên miền, hãy tuần tự hóa rõ ràng trình tự này sau khi thương lượng phương thức và bất kỳ xác thực nào được chọn:
- Phiên bản, lệnh, byte dành riêng và loại địa chỉ
- Độ dài tên miền và các byte tên miền
- Cổng đích hai byte theo thứ tự byte mạng
Độ dài địa chỉ phụ thuộc vào phiên bản SOCKS và loại địa chỉ. Các trường số có độ rộng cố định cần cách biểu diễn được quy định; chuỗi tên miền có cách mã hóa độ dài riêng. Ký tự kết thúc chuỗi C không phải là chỉ dẫn chung để thêm số không vào thông điệp trên đường truyền.
| Lối tắt khi triển khai | Vấn đề cần kiểm tra |
|---|---|
| Gán giá trị 32 bit qua con trỏ 8 bit | Nó không phát ra đủ bốn byte |
| Ép bộ đệm thành con trỏ số nguyên lớn hơn | Căn chỉnh và thứ tự byte vẫn cần được xử lý |
| Cho rằng một lần đọc hoặc ghi là một thông điệp | TCP chỉ có thể truyền một phần trình tự giao thức |
So sánh từng trường với đích dự định và xử lý I/O một phần. Nhận được hai byte không chứng minh rằng toàn bộ phản hồi đã đến. Việc kiểm tra các ranh giới đó có thể phân biệt một yêu cầu méo mó với một máy chủ từ chối kết nối được mô tả đúng.