Giải pháp để lấy Docker Http Request Message

Tác giả:Ninabadass, Tạo: 2022-04-27 10:55:50, Cập nhật: 2022-04-27 10:57:37

Giải pháp để lấy Docker Http Request Message

Khi thử nghiệm và gỡ lỗi mã chiến lược, hoặc chạy bot trong một thị trường thực tế, giao diện nền tảng thường được báo cáo với lỗi. Tại thời điểm này, bạn cần truy vấn tài liệu API giao diện nền tảng, tìm kiếm thông tin báo cáo lỗi có liên quan và luôn cần cung cấp các thông báo yêu cầu lỗi, khi truy vấn dịch vụ kỹ thuật API nền tảng, để phân tích nguyên nhân của lỗi.

Trong bài viết này, chúng ta sẽ thảo luận về hai giải pháp.

1. Sử dụng Python Scapy (bắt gói) để in thư yêu cầu được gửi

Đầu tiên, cài đặtscapy.

pip3 install scapy 

Sau đó, tạo ra một chiến lược Python:

from scapy.all import *

def Method_print(packet):
    ret = "\n".join(packet.sprintf("{Raw:%Raw.load%}").split(r"\r\n"))
    Log(ret)

sniff(
    iface='eth0',
    prn=Method_print,
    lfilter=lambda p: "GET" in str(p) or "POST" in str(p),
    filter="tcp")

Sau đó tạo một bot sử dụng chiến lược, và bot sẽ bắt các gói http được gửi bởi máy chủ docker (https không thể bắt được các gói, và chúng tôi có một số xử lý cho điều đó).

Chạy packet capture bot, và sau đó bạn có thể sử dụng công cụ gỡ lỗi để gửi yêu cầu để cho bot chụp gói. trong công cụ gỡ lỗi, chúng tôi viết mã có thể gửi yêu cầu.

function main(){
    // The base address should be set to the address of other http protocols. If the address of a platform is not set, it is generally https, so the packet cannot be captured.
    exchange.SetBase("http://www.baidu.com")    
    
    // POST request 
    exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
    
    // GET request 
    exchange.SetContractType("swap")
    exchange.GetTicker()
}

Thông tin được in bởi bot của gói bắt:img

Chúng ta có thể sao chép các tin nhắn yêu cầu và xem xét: GET yêu cầu thông báo:

GET 
/api/swap/v3/instruments/BTC-USD-SWAP/ticker 
HTTP/1.1 
Host: www.baidu.com 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 Accept-Encoding: gzip 

Host: www.baidu.comlà những gì chúng tôi đã sửa đổi để bắt được các gói, mà có thể bị bỏ qua; đúng một nên đượcHost: www.okex.com. Bạn có thể thấy liên kết trong thông báo yêu cầu là:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, đó là yêu cầu dữ liệu thị trường hợp đồng vĩnh cửu crypto-margined (BTC).

Thông báo yêu cầu POST:

POST 
/api/swap/v3/order 
HTTP/1.1 
Host: www.baidu.com 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 
Content-Length: 25 
Content-Type: application/json; charset=UTF-8 
Ok-Access-Key: d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 
Ok-Access-Passphrase: abc123 
Ok-Access-Sign: h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0= 
Ok-Access-Timestamp: 2020-09-23T08:43:49.906Z Accept-Encoding: gzip 

{"aaa":"111","bbb":"222"}

Bạn có thể thấy đường dẫn yêu cầu là:/api/swap/v3/order. Chìa khóa truy cập được xác minh:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4(đối với bản demo, không phải KEY thực sự) Chữ ký của yêu cầu này:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0=Mật khẩu API KEY:abc123(đối với bản demo) Dữ liệu cơ quan yêu cầu:{"aaa":"111","bbb":"222"}.

Do đó, chúng ta có thể quan sát các tin nhắn yêu cầu, và phân tích các nguyên nhân của lỗi gặp phải bởi giao diện.

2. Yêu cầu của người nghe địa phương

Giải pháp thứ hai, mà không tạo ra một bot, là sử dụngNetcatmà đi kèm với hệ thống Mac:https://baike.baidu.com/item/Netcat/9952751?fr=aladdinNghe yêu cầu và in tin nhắn.

Trong thiết bị đầu cuối, sử dụng lệnhnc -l 8080để điều hành Netcat.

Như hình trên:img

Tương tự, chúng ta triển khai một docker trên máy này, và sau đó trong công cụ gỡ lỗi, sử dụng mã sau đây để gửi yêu cầu.

function main(){
    exchange.SetBase("http://127.0.0.1:8080")    // here we modify the base address to the local, port 8080, and then Netcat can listen to the requests 
    // POST request
    exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
    
    // GET request 
    exchange.SetContractType("swap")
    exchange.GetTicker()
}

Thông báo yêu cầu POST được in trên thiết bị đầu cuối:img

Thông báo yêu cầu GET được in trên thiết bị đầu cuối:img


Thêm nữa