å¨è¿è¡Linuxç½ç»ç¼ç¨æ¶ï¼ç»å¸¸ç¨å°æ¬æºIPå°åãæ¬æç½åä¸ä¸å¸¸è§æ¹æ³ï¼ä»¥å¤ä¸æ¶ä¹éã
è·åæ¬æºIPå°åï¼æ¯ä¸ä¸ªç¸å½çµæ´»çæä½ï¼åå æ¯ç½ç»å°åç设置é常çµæ´»èä¸é½æ¯å
许ç¨æ·è¿è¡ä¸ªæ§å设置çãæ¯å¦ä¸å°è®¡ç®æºä¸å¯ä»¥æå¤åç©çç½å¡æè
èæç½å¡ï¼ä¸ä¸ªç½å¡ä¸å¯ä»¥ç»å®å¤ä¸ªIPå°åï¼ç¨æ·å¯ä»¥ä¸ºç½å¡è®¾ç½®å«åï¼å¯ä»¥éå½åç½å¡ãç¨æ·è®¡ç®æºæå¨ç½ç»ææç»ææªç¥ï¼ä¸»æºå设置æ¯ä¸ä¸ªå¯é项ï¼å¹¶ä¸åæ ·å¯ä»¥ä¸ºä¸ä¸ªè®¡ç®æºç»å®å¤ä¸ªä¸»æºåçï¼è¿äºä¿¡æ¯é½ä¼æå½±åãè±ç¦»äºç½ç»è¿æ¥ï¼åç¬çç½ç»å°å没æä»»ä½æä¹ãç¼ç¨ä¸éå°å¿
é¡»è·å计ç®æºIPçåºæ¯ï¼åºè¯¥èèå°è¿ä¸é项æ¾å°é
ç½®æ件ä¸ï¼ç±ç¨æ·èªå·±æ¥è®¾ç½®ã
åèç½ç»å书æ¬ï¼ç¼ç¨è·åæ¬æºIPå°å大约æ以ä¸å ç§æ¹æ³ã
æ¹æ³ä¸ï¼ioctl()è·åæ¬å°IPå°å
Linux ä¸ å¯ä»¥ä½¿ç¨ioctl()å½æ°ä»¥åç»æä½ struct ifreqåç»æä½struct ifconfæ¥è·åç½ç»æ¥å£çåç§ä¿¡æ¯ã
å
·ä½è¿ç¨æ¯å
éè¿ictolè·åæ¬å°çæææ¥å£ä¿¡æ¯ï¼åæ¾å°ifconfç»æä¸ï¼åä»å
¶ä¸ååºæ¯ä¸ªifreq表示çipä¿¡æ¯ï¼ä¸è¬æ¯ä¸ªç½å¡å¯¹åºä¸ä¸ªIPå°åï¼å¦ï¼âeth0â¦ãeth1â¦â)ã
å
äºè§£ç»æä½ struct ifreqåç»æä½struct ifconfï¼
//ifconfé常æ¯ç¨æ¥ä¿åæææ¥å£ä¿¡æ¯ç
//if.h
struct ifconf
{
int ifc_len; /* size of buffer */
union
{
char *ifcu_buf; /*input from user->kernel*/
struct ifreq *ifcu_req; /* return from kernel->user*/
} ifc_ifcu;
};
#define ifc_buf ifc_ifcu.ifcu_buf /*buffer address */
#define ifc_req ifc_ifcu.ifcu_req /*array of structures*/
//ifreqç¨æ¥ä¿åæ个æ¥å£çä¿¡æ¯
//if.h
struct ifreq {
char ifr_name[IFNAMSIZ];
union {
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
short ifru_flags;
int ifru_metric;
caddr_t ifru_data;
} ifr_ifru;
};
#define ifr_addr ifr_ifru.ifru_addr
#define ifr_dstaddr ifr_ifru.ifru_dstaddr
#define ifr_broadaddr ifr_ifru.ifru_broadaddr
温馨提示:答案为网友推荐,仅供参考