2011-06-24 7 views
6

के साथ नेटवर्क पैकेट जेनरेट करने के लिए कैसे करें मैं एक नेटवर्क पैकेट जेनरेट करना चाहता हूं (उदाहरण के लिए) पोर्ट 123 को एनटीपी सर्वर पर भेजूं ताकि मैं लौटा पैकेट प्राप्त कर सकूं और पार्स कर सकूं। लक्ष्य बेहतर ढंग से समझना है कि पैकेट कैसे उत्पन्न होते हैं, पढ़ते हैं, और नेटवर्क सिस्टम द्वारा जवाब दिया जाता है।सी/सी ++

(1) क्या पैकेट उत्पन्न करने के लिए एक स्ट्रक्चर का उपयोग किया जाना चाहिए?

(2) मुझे यकीन नहीं है कि संरचना के भीतर विभिन्न क्षेत्रों को सही तरीके से कैसे पॉप्युलेट करना है; उदाहरण के लिए, क्या स्रोत और गंतव्य आईपी पते हेक्स मानों के साथ सेट किए जाने चाहिए? या क्या एक और मानव-अनुकूल तरीका है?

(3) फिर, जब फ़ील्ड आबादी हो जाए, तो क्या एक एनटीपी सर्वर पर यूडीपी कनेक्शन पर प्रेषण()/लिखने() के माध्यम से संरचना भेजी जा सकती है? (या टीसीपी, प्रोटोकॉल की मांग करनी चाहिए)

क्या मेरा दृष्टिकोण उचित है? मैं एनटीपी आरएफसी पढ़ रहा हूं, लेकिन मुझे अभी भी यकीन नहीं है कि मेरे क्लाइंट को सर्वर पर क्या भेजना चाहिए (जैसे आईपी एड्रेस; क्या इसे नेटवर्क लेयर हेडर द्वारा ख्याल नहीं रखा जाना चाहिए?) मैंने इस एनटीपी को मॉडल किया है आरएफसी 5905 के परिशिष्ट ए में "प्रेषण" उदाहरण के बाद संरचना। अगर मेरा प्रश्न खराब शब्द या बहुत लंबा है तो मैं क्षमा चाहता हूं। किसी भी मदद के लिए पहले से ही शुक्रिया। कोड उदाहरण नीचे आरएफसी 5905.

typedef unsigned long ipaddr;  //32 bits (4 bytes) 
typedef signed char s_char;  //character type as number, -128..127 
typedef unsigned int tdist;  //character type as number, 0..255 
typedef unsigned long long tstamp; //64 bits (8 bytes) 
typedef unsigned long digest;  //32 bits (4 bytes) 

struct Ntp { 
    ipaddr dstaddr; 
    ipaddr srcaddr; 
    char version; 
    char leap; 
    char mode; 
    char stratum; 
    char poll; 
    s_char precision; 
    tdist rootdelay; 
    tdist rootdisp; 
    char refid; 
    tstamp reftime; 
    tstamp org; 
    tstamp rec; 
    tstamp xmt; 
    int  keyid; 
    digest dgst; 
} Ntp; 

int main() 
{ 
    struct Ntp packet; 

    //packet.dstaddr=WHAT_GOES_HERE; 
    //... 
    //... 
    //packet.dgst=WHAT_GOES_HERE; 

    return 0; 
} 
+2

क्या आप सुनिश्चित हैं कि आपकी 'एनटीपी' संरचना अप्रत्याशित तरीकों से गद्दी नहीं है? –

+1

"क्या स्रोत और गंतव्य आईपी पते हेक्स मानों के साथ सेट किए जाने चाहिए" - निश्चित रूप से नहीं, हालांकि आईपीवी 6 का उपयोग करते समय उन्हें प्राथमिकता दी जाएगी। सी में दशमलव अक्षर, decimals पार्सिंग फ़ंक्शन और आईपी पार्सिंग फ़ंक्शन (प्लेटफ़ॉर्म-निर्भर, अपने ओएस मैन्युअल की जांच करें) है। –

+1

आपको तार पर भेजे गए किसी भी बहु-बाइट मात्रा के एंडियन-नेस को समायोजित करने की आवश्यकता हो सकती है, जो एक ही लिखने में पूरी संरचना भेजने से बचने का एक और कारण है। –

उत्तर

2

आप अनुभव लेखन नेटवर्क प्रोटोकॉल का एक बहुत है लगता नहीं है में उदाहरण कोड से उधार लेता है। एक संरचना घोषित करना और इसे लिखना रास्ता नहीं है। मैं भी http://fixunix.com/ntp/257876-any-samples-ntp-sntp-client-code.html की ओर आकर्षित और विशेष रूप से निम्नलिखित बातों कॉल:

  • तुम क्यों रोल करना चाहते हैं अपने खुद के रूप में मौजूदा संकुल में से एक को चलाने के लिए की तुलना में?

  • एनटीपी क्लाइंट लिखने में एक मुद्दा सही समय मिल रहा है।

  • दूसरा नेटवर्क के बाकी हिस्सों को खराब नहीं कर रहा है या सर्वर पर एक अनुचित लोड नहीं डाल रहा है।

किसी भी मामले में, के रूप में धागा मैं इशारा आप के लिए, आप के लिए SNTP उपयोग करने के लिए और NTP टारबॉल में SNTP संदर्भ कार्यान्वयन पर एक नज़र रखना चाहिए जिस तरह से इंगित करें और आप यह पता लगाने में मदद करना चाहते में चर्चा क्या आपको करना चाहिए

+0

उत्तर के लिए धन्यवाद; मेरा लक्ष्य बेहतर ढंग से समझना है कि नेटवर्क पर सिस्टम (सबसे बुनियादी स्तर पर) द्वारा पैकेट कैसे भेजे जाते हैं, पढ़ते हैं और जवाब देते हैं। मैं सार्वजनिक रूप से उपयोग करने योग्य क्लाइंट बनाने की कोशिश नहीं कर रहा हूं - मैं बस एक पैकेट सफलतापूर्वक भेजना चाहता हूं जो प्रोटोकॉल का पालन करता है। इस मामले में एनटीपी; मैंने इसे चुना क्योंकि मैंने सोचा [शायद गलती से] कि यह एक और यथार्थवादी लक्ष्य होगा। मुझे लगता है कि मेरा प्रश्न सही मायने में मेरे लक्ष्य का विज्ञापन नहीं करता है और मैं किसी भी भ्रम के लिए क्षमा चाहता हूं; आपकी रचनात्मक प्रतिक्रिया के लिए धन्यवाद - मैं तदनुसार अपना प्रश्न संपादित करूंगा। – shelladept

संबंधित मुद्दे