4
ফোকাস
1271
অনুসারী

HTTP অনুরোধ বার্তা পাঠাতে হোস্টের জন্য সমাধান পান

তৈরি: 2020-09-23 16:24:42, আপডেট করা হয়েছে: 2023-09-27 19:37:55
comments   0
hits   1510

HTTP অনুরোধ বার্তা পাঠাতে হোস্টের জন্য সমাধান পান

HTTP অনুরোধ বার্তা পাঠাতে হোস্টের জন্য সমাধান পান

কৌশল কোড পরীক্ষা এবং ডিবাগ করার সময়, বা বাস্তব বাজারে রোবট চালানোর সময়, আমরা এই সময়ে এক্সচেঞ্জ ইন্টারফেস এপিআই ডকুমেন্টেশন এবং প্রাসঙ্গিক ত্রুটি তথ্য পরীক্ষা করতে হবে এক্সচেঞ্জ API প্রযুক্তিগত গ্রাহক পরিষেবা যখন একটি ত্রুটি রিপোর্ট করা হয় তখন ত্রুটির কারণ বিশ্লেষণ করতে ব্যবহৃত হয়।

এই সময়ে, আপনি যদি বার্তা তথ্য দেখতে না পারেন, তাহলে এই নিবন্ধে, আমরা দুটি সমাধান নিয়ে আলোচনা করব।

1. প্যাকেটগুলি ক্যাপচার করতে এবং পাঠানো অনুরোধ বার্তাগুলি প্রিন্ট করতে পাইথনের স্ক্যাপি লাইব্রেরি ব্যবহার করুন৷

প্রথমে ইন্সটল করুনscapyমডিউল

pip3 install scapy 

তারপর একটি পাইথন নীতি তৈরি করুন:

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")

তারপরে একটি রোবট তৈরি করুন যা এই কৌশলটি ব্যবহার করে, এবং রোবট হোস্টের সার্ভারের পাঠানো HTTP প্যাকেটগুলি দখল করবে (যদি https ধরা না যায় তবে এর জন্য কিছু প্রক্রিয়াকরণ রয়েছে)।

এই প্যাকেট ক্যাপচার রোবট চালানোর পরে, আপনি একটি অনুরোধ পাঠাতে এবং রোবট ক্যাপচার প্যাকেট করতে ডিবাগিং টুল ব্যবহার করতে পারেন। ডিবাগিং টুলে আমরা অনুরোধ পাঠাতে কোড লিখি।

function main(){
    // 要把基地址设置为其它http协议的地址,如果不设置交易所的地址一般都是https,这样是抓不到包的
    exchange.SetBase("http://www.baidu.com")    
    
    // POST 请求
    exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
    
    // GET 请求
    exchange.SetContractType("swap")
    exchange.GetTicker()
}

প্যাকেট ক্যাপচার রোবট দ্বারা মুদ্রিত তথ্য: HTTP অনুরোধ বার্তা পাঠাতে হোস্টের জন্য সমাধান পান

আমরা এটি অনুলিপি করতে পারি এবং বার্তাটি দেখতে পারি: অনুরোধ বার্তা পান:

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.comবাও ধরার জন্য এটি পরিবর্তন করা হয়েছে, তাই এটিকে উপেক্ষা করা উচিতHost: www.okex.com আপনি দেখতে পারেন যে অনুরোধ বার্তার লিঙ্কটি হল:/api/swap/v3/instruments/BTC-USD-SWAP/ticker, বিটিসি-ভিত্তিক চিরস্থায়ী চুক্তির বাজার তথ্যের জন্য অনুরোধ করা হয়।

অনুরোধ বার্তা পোস্ট করুন:

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"}

আপনি দেখতে পারেন যে অনুরোধের পথ হল:/api/swap/v3/order。 যাচাইকৃত অ্যাক্সেস কী:d487230f-ccccc-aaaaa-bbbbb-268fef99cfe4 (শুধুমাত্র প্রদর্শনের উদ্দেশ্যে, একটি আসল কী নয়) এই অনুরোধের জন্য স্বাক্ষর:h1x6f80rhhkELobJcO1rFyMgUUshOlmgjRBHD+pLvG0= API KEY পাসফ্রেজ:abc123 (প্রদর্শনের জন্য) অনুরোধ করা শরীরের তথ্য:{"aaa":"111","bbb":"222"}

এইভাবে, আপনি অনুরোধের বার্তাটি পর্যবেক্ষণ করতে পারেন এবং ইন্টারফেসের অনুরোধটি একটি ত্রুটির সম্মুখীন হওয়ার কারণ বিশ্লেষণ করতে পারেন।

2. স্থানীয় পর্যবেক্ষণ অনুরোধ

দ্বিতীয় পদ্ধতিতে একটি রোবট তৈরির প্রয়োজন নেই, অ্যাপলের ম্যাকের সাথে আসা একটি ব্যবহার করুনNetcat : https://baike.baidu.com/item/Netcat/9952751?fr=aladdin। অনুরোধ এবং প্রিন্ট বার্তা জন্য শুনুন.

টার্মিনালে, কমান্ডটি ব্যবহার করুনnc -l 8080, নেটক্যাট চালান।

ছবিতে দেখানো হয়েছে: HTTP অনুরোধ বার্তা পাঠাতে হোস্টের জন্য সমাধান পান

একইভাবে, আমরা স্থানীয় মেশিনে একটি হোস্ট স্থাপন করি, এবং তারপর ডিবাগিং টুলে অনুরোধ পাঠাতে নিম্নলিখিত কোডটি ব্যবহার করি।

function main(){
    exchange.SetBase("http://127.0.0.1:8080")    // 这里把基地址改为本机,端口8080,Netcat 就可以监听到请求了
    // POST 请求
    exchange.IO("api", "POST", "/api/swap/v3/order", "aaa=111&bbb=222")
    
    // GET 请求
    exchange.SetContractType("swap")
    exchange.GetTicker()
}

POST অনুরোধের বার্তা টার্মিনালে মুদ্রিত: HTTP অনুরোধ বার্তা পাঠাতে হোস্টের জন্য সমাধান পান

টার্মিনালে মুদ্রিত GET অনুরোধ বার্তা: HTTP অনুরোধ বার্তা পাঠাতে হোস্টের জন্য সমাধান পান