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:

  1. Phiên bản, lệnh, byte dành riêng và loại địa chỉ
  2. Độ dài tên miền và các byte tên miền
  3. 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 khaiVấn đề cần kiểm tra
Gán giá trị 32 bit qua con trỏ 8 bitNó không phát ra đủ bốn byte
Ép bộ đệm thành con trỏ số nguyên lớn hơnCă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ệpTCP 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.

Bài viết liên quan