Catalyst 2960X SFP dump में क्या calculate करता है: vendor code, name और MD5, और dump की copy pass क्यों नहीं होती
एक provider का network संभालता हूं, modules का park मिला-जुला है, इसलिए बार-बार specific switches के लिए modules तैयार करने पड़ते हैं। आख़िरकार check की mechanics समझना चाहता हूं, अंदाज़े से dumps चुनना नहीं।
मेरे पास ये हैं:
- Cisco Catalyst 2960X-24PS-L, park में सबसे ज़्यादा नखरे वाला
- QTECH QSW-3750-28TX-AC और D-Link DGS-3420, इन पर वही modules आराम से चढ़ जाते हैं
- SNR-SFP+SR और SFP-10G-BX modules
जो module Catalyst पर accept होता है उसके dump में शुरुआत में vendor code का byte और उसके बाद ASCII में नाम दिखता है:
0E 43 49 53 43 4F ...
जो try किया: जो module C2960X-24PS-L पर up होता है उसका dump निकाला, और दूसरे module में उसी dump से सिर्फ़ vendor name rewrite किया। इसके बाद QTECH और D-Link पर सब कुछ up हो जाता है, पर Catalyst ऐसे module को accept नहीं करता, हालांकि बदले गए bytes donor से एक-एक करके मेल खाते हैं।
यहीं से check के तरीके पर सवाल बनता है। Cisco असल में calculate क्या करता है और किन bytes पर, module में नतीजा कहां रहता है, और काम कर रहे dump से rewrite किया गया vendor name इसके लिए काफ़ी क्यों नहीं है? मुझे logic चाहिए, आगे खुद संभाल लूंगा।
Comments 6
वहां mechanics simple है और बहुत पहले से समझी हुई है। कोई अलग field check नहीं होता, बल्कि एक जोड़ी: vendor code का byte plus vendor name के bytes। इसी sequence से MD5 निकाला जाता है, और नतीजा खुद module में रहता है, switch वही calculate करके compare करता है।
standard utilities से reproduce हो जाता है, कुछ खास नहीं चाहिए:
अपना code और अपना vendor name डालो तो वह value मिल जाती है जो module में होनी चाहिए। जो codes dumps में असल में दिखते हैं उनमें से: 02 - Finisar, 0E - Methode, 11 भी अक्सर मिलता है, पर यह किसका है यह कभी पता नहीं चला। अगर code-name जोड़ी सही बैठे और hash उससे मेल खाए, तो module C2960X-24PS-L पर pass हो जाता है।
पिछली बात पर: दिखाओ कि receiver वाले module में असल में क्या है। वहां vendor code का कौन सा byte रह गया है और उसके बगल में कौन सा नाम है? description से लगता है कि तुमने नाम transfer किया, पर code या खुद hash native module का ही रहने दिया, और तब जोड़ी बिगड़ जाती है, और Catalyst उसे बिल्कुल सही तरीके से reject करता है। तीनों चीज़ें एक साथ check करो, सिर्फ़ वह field नहीं जो switch के output में दिखता है।
Check किया, सब कुछ आपके version से मिलता है। Donor में 0E और आगे CISCO, और receiver में नाम मैंने सच में rewrite किया, पर vendor code native ही रह गया, और hash भी पुराना। दोनों combinations को xxd -r -p और md5sum से चलाया: donor की value module में जो है उससे मेल खाती है, मेरे हाथ से बनाए हुए की नहीं।
यानी जोड़ी को पूरा transfer करना पड़ता है, एक field के हिसाब से नहीं। अब कम से कम समझ आ गया कि कहां देखना है और port में module लगाने से पहले क्या-क्या मिलाना है।
एक ज़रूरी नतीजा जिसे लोग हमेशा भूल जाते हैं: अगर vendor code और name आपस में मेल नहीं खाते, तो module Catalyst पर pass नहीं होगा, चाहे switch पर unsupported modules allow ही क्यों न हों। यही वजह है कि दूसरों के dumps कभी काम करते हैं कभी नहीं - उन्हें आंशिक रूप से edit किया गया था, और check उस जोड़ी को देखता है।
यहीं से size को लेकर practical नतीजा निकलता है: 256-byte के dump में पहले 128 bytes मायने रखते हैं, आगे manufacturer का zone शुरू होता है। पूरी image खींचने की ज़रूरत नहीं, बल्कि पहला आधा हिस्सा मिला कर transfer करना पड़ता है, उन fields समेत जो switch के output में आंखों से नहीं दिखते।
वैसे, सब कुछ dump से solve नहीं होता। Medick SFP-10G-BX में memory नहीं बल्कि एक microcontroller C8051F392 बैठा है: यह A0 और A2 को emulate करता है और आराम से password या vendor query रख सकता है। वहां चाहे byte-by-byte जोड़ी मिला लो - बाहर से उसे बस accept ही नहीं करेंगे। जो tools मेरे पास काम में हैं उनमें SNR SFP Writer और SFPTotal Plus, colleagues के पास CH341 पर बनी homemade चीज़ें भी हैं।
बाद में यहां आने वालों को confuse होने से बचाने के लिए एक छोटी सी correction। इस MD5 का MSA वाले checksums से कोई लेना-देना नहीं है: SFF-8472 के CC_BASE और CC_EXT साधारण byte addition से calculate होते हैं और झटपट फिर से गिने जा सकते हैं। Vendor वाला check इनके ऊपर और अपने ही नियमों से रहता है, और module को ठीक उसी पल reject करता है जब MSA-sums के हिसाब से सब कुछ ठीक हो - इसीलिए यह एहसास होता है कि dump सही है, पर module फिर भी accept नहीं हुआ।
वैसे यहां बता दूं, Cisco सबसे बुरा case नहीं है: mechanics कम से कम समझ में आती है और reproduce होती है। सबसे मुश्किल HP और Aruba हैं, जहां memory interactively बर्ताव करती है और keys मांगती है - वहां dumps से काम नहीं चलता।