ºìÁªLinuxÃÅ»§
Linux°ïÖú

ѧϰ--ԭʼÌ×½Ó×Ö

·¢²¼Ê±¼ä:2006-05-12 12:48:32À´Ô´:ºìÁª×÷Õß:koov
ԭʼÌ×½Ó×Ö¿ÉÒÔ·ÃÎÊICMPºÍICMPµÈЭÒé°ü£¬¿ÉÒÔ¶ÁдÄں˲»´¦ÀíµÄIPÊý¾Ý°ü¡£¿ÉÒÔ´´½¨×Ô¶¨ÒåµÄIPÊý¾Ý°üÊײ¿¡£Ò»¾ä»°£¬Ê¹ÓÃԭʼÌ×½Ó×Ö¿ÉÒÔ

±àд»ùÓÚIPЭÒéµÄͨѶ³ÌÐò¡£

1.´´½¨Ô­Ê¼Ì×½Ó×Ö
¾ßÌå¸ñʽÈçÏ£º
int sockfd;
sockfd = socktet(AF_INET, SOCK_RAW, IPPROTO_ICMP);
µÚÒ»¸ö²ÎÊý£ºÐ­Òé×å AF_INET ´ú±íTCP/IPЭÒé
µÚ¶þ¸ö²ÎÊý£ºSOCKETÀàÐÍ
µÚÈý¸ö²ÎÊý£ºÐ­ÒéÀàÐÍ
×¢Òâ:
@Èç¹ûÖ¸¶¨Ð­ÒéΪ0ʱ£¬Ô­Ê¼Ì×½Ó×Ö¿ÉÒÔ½ÓÊÕÄں˴«µÝ¸øԭʼÌ×½Ó×ÖµÄÈκÎIPÊý¾Ý°ü£¬ÇÒÖ»Óг¬¼¶Óû§²Å¿ÉÒÔ´´½¨Ô­Ê¼Ì×½Ó×Ö¡£
@µ±ÐèÒª±àд×Ô¼ºµÄIPÊý¾Ý°üÊײ¿Ê±£¬¿ÉÒÔÔÚԭʼÌ×½Ó×ÖÉÏÉèÖÃÌ×½Ó×ÖÑ¡ÏîIP_HDRINCL¡£ÔÚ²»ÉèÖÃÕâ¸öÑ¡ÏîµÄÇé¿öÏ£¬IPЭÒé×Ô¶¯Ìî³äIPÊý¾Ý°üµÄÊײ¿¡£

int on = 1;
if(setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) < 0)
{
fprintf(stderr, "setsockopt IP_HDRINCL ERROR! \n");
exit(1);
}


ԭʼÌ×½Ó×ÖÖ±½ÓʹÓÃIPЭÒéµÄÌ×½Ó×Ö£¬ËùÒÔÊÇ·ÇÃæÏòÁ¬½ÓµÄ¡£ÔÚÕâ¸öÌ×½Ó×ÖÉÏ¿ÉÒÔµ÷ÓÃconnectºÍbindº¯Êý£¬·Ö±ðÖ´Ðа󶨶Է½ºÍ±¾µØµØÖ·¡£
˵Ã÷£º

bindº¯Êý£ºµ÷ÓÃbindº¯Êýºó£¬·¢ËÍÊý¾Ý°üµÄÔ´IPµØÖ·½«ÊÇbindº¯ÊýÖ¸¶¨µÄµØÖ·¡£ÈçÊDz»µ÷ÓÃbind£¬ÔòÄں˽«ÒÔ·¢½Ó¿ÚµÄÖ÷IPµØÖ·Ìî³ä¡£Èç¹ûÉèÖÃÁËIP_HDRINCL,ÄÇô±ØÐëÊÖ¹¤Ìî³äÿ¸ö·¢ËÍÊý¾Ý°üµÄÔ´IPµØÖ·¡£

connetcº¯Êý£ºµ÷ÓÃconnectº¯Êýºó£¬¿ÉÒÔÓÃwriteºÍsend·¢ËÍÊý¾Ý°ü¡£Äں˽«ÓÃÕâ¸ö°ó¶¨µÄµØÖ·Ìî³äIPÊý¾Ý°üµÄÄ¿µÄIPµØÖ·¡£

·¢ËÍÊý¾Ý°ü

ʹÓÃԭʼÌ×½Ó×Ö·¢ËÍÊý¾Ý°ü±ØÐë×ñÑ­ÒÔϹæÔò£º
1.Èç¹ûûÓÐÓÃconnectº¯Êý°ó¶¨¶Ô·½µØַʱ£¬ÔòӦʹÓÃsendto»òsendmsgº¯Êý·¢ËÍÊý¾Ý°ü£¬ÔÚº¯Êý²ÎÊýÖÐÖ¸¶¨¶Ô·½µØÖ·¡£Èç¹ûµ÷ÓÃÁËconnectº¯Êý£¬Ôò¿ÉÒÔÖ±½ÓʹÓÃsend,write»òwritevÀ´·¢ËÍÊý¾Ý°ü¡£

2.Èç¹ûûÓÐÉèÖÃIP_HDRINCLÑ¡Ïîʱ£¬°üÄÚ¿ÉдµÄÄÚÈÝΪÊý¾Ý²¿·Ö£¬Äں˽«×Ô¶¯´´½¨IPÊײ¿¡£Èç¹ûÉèÖÃÁËIP_HDRINCLÑ¡ÏÔò°üÄÚÒªÌî³äµÄÄÚÈÝΪIPÊý¾Ý°üºÍÊײ¿¡£ÄÚºËÖ»¸ºÔðÌî³äÏÂÃæÁ½¸öÓò£º
?Èç¹û½«IPÊý¾Ý°üµÄ±êʶÓòÉèÖÃΪ0£¬Äں˽«ÉèÖÃÕâ¸öÓò
?ÄÚºË×ÜÊǼÆËãºÍÌî³äIPÊý¾Ý°üÊײ¿µÄУÑéºÍ¡£

×¢Ò⣺IPÊý¾Ý°üÊײ¿¸÷¸öÓòµÄÄÚÈݶ¼ÊÇÍøÂç×Ö½Ú˳Ðò¡£

½ÓÊÕÊý¾Ý°ü

ÄÚºË×ñÑ­ÒÔϹæÔò½ÓÊÕÊý¾Ý°ü£º
1.UDPºÍTCPÊý¾Ý°ü´Ó²»´«Ë͸øÒ»¸öԭʼÌ×½Ó×Ö¡£Èç¹ûÒª²é¿´ÕâÁ½ÀàÊý¾Ý°ü£¬Ö»ÄÜͨ¹ýÖ±½Ó·ÃÎÊÊý¾ÝÁ´Â·²ãÀ´ÊµÏÖ¡£
2.´ó¶àÊýICMPÊý¾Ý°üµÄÒ»¸ö¿½±´´«Ë͸øÆ¥ÅäµÄԭʼÌ×½Ó×Ö¡£
3.Äں˴¦ÀíµÄËùÓÐÆäËüÀàÐ͵ÄÊý¾Ý°üµÄÒ»¸ö¿½±´¶¼´«¸øÆ¥ÅäµÄԭʼÌ×½Ó×Ö¡£
4.ËùÓÐÄں˲»ÄÜʶ±ðµÄЭÒéÀàÐ͵ÄIPÊý¾Ý°ü¶¼´«Ë͸øÆ¥ÅäµÄԭʼÌ×½Ó×Ö¡£¶ÔÓÚÕâЩIPÊý¾Ý°ü£¬ÄÚºËÖ»×ö±ØÒªµÄ¼ìÑ鹤×÷¡£

ÔÚ½«Ò»¸öIPÊý¾Ý°ü´«Ë͸øԭʼÌ×½Ó×Ö֮ǰ£¬ÄÚºËÐèҪѡÔñÆ¥ÅäµÄԭʼÌ×½Ó×Ö
1.Êý¾Ý°üµÄЭÒéÓò±ØÐëÓë½ÓÊÕԭʼÌ×½Ó×ÖµÄЭÒéÀàÐÍÆ¥Åä¡£
2.Èç¹ûԭʼÌ×½Ó×Öµ÷ÓÃÁËbindº¯Êý°ó¶¨Á˱¾µØIPµØÖ·£¬ÄÇôµ½´ïµÄIPÊý¾Ý°üµÄÔ´IPµØÖ·±ØÐëºÍ¶Ô·½µÄIPÏàÆ¥Åä¡£
3.Èç¹ûԭʼÌ×½Ó×Öµ÷ÓÃconnectº¯ÊýÖ¸¶¨Á˶Է½µÄIPµØÖ·£¬Ôòµ½´ïµÄIPÊý¾Ý°üµÄÔ´IPµØÖ·ÃØÐëÓëÕâËüÏàͬ¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ