के साथ सी में आईसीएमपी अनुरोध कैसे प्राप्त करें। यह एक असाइनमेंट है, इसे कच्चे सॉकेट के साथ होना चाहिए। मुझे एक साधारण आईसीएमपी पिंग प्रोग्राम करने की ज़रूरत है। मैंने इसे आधार http://www.pdbuchan.com/rawsock/icmp4.c के रूप में उपयोग किया। लाइन 127 पर wlan0 है, मैं eth0 का उपयोग कर रहा हूँ।कच्चे सॉकेट
`
struct sockaddr_in rec;
unsigned char * pkt = (unsigned char *) malloc (IP_MAXPACKET * sizeof (unsigned char));
if (recvfrom (sd, (void*)pkt, IP4_HDRLEN + ICMP_HDRLEN+datalen , 0, NULL, (socklen_t*)sizeof (struct sockaddr)) < 0) {
perror ("recvfrom() failed ");
exit (EXIT_FAILURE);
}
struct ip *ip = (struct ip *)pkt;
struct icmphdr *icmp = (struct icmphdr *)(pkt + IP4_HDRLEN);
printf("%s %s %d\n",(char*)inet_ntoa(*(struct in_addr*)&ip->ip_dst),
(char*)inet_ntoa(*(struct in_addr*)&ip->ip_src),
icmp->type);
free (pkt);
` समस्या यह है कि ip_dst और ip_src मेरी मशीनों के आईपी के रूप में दिखाया जा रहा है, और 0 के रूप में ICMP प्रकार और नहीं 8. Wireshark दोनों ICMP जबाब पता चलता है: लाइन 290 में मैं इस कोडित और अनुरोध करें। शायद मेरा रिकॉर्फ़ गलत है, लेकिन मैंने लिनक्स के बारे में कुछ सुना है, टीसीपी/आईपी पैकेट को संभाला जा सकता है। यदि यह सच है, तो इसके लिए क्या कामकाज है?
संपादित करें: मैंने यह raw socket listener चेक किया लेकिन यह मेरी समस्या का समाधान नहीं किया।
निर्माण मेरे द्वारा पोस्ट किए गए लिंक पर है। यह उस साइट के उदाहरणों से है। मैंने इस कोड को उस icmp4.c – liwing