LINUX 网络小程序

From:http://blog.csdn.net/davidge333/article/details/5250566

//获取本机IP地址函数

 

  1. QString GetLocalIp() 
  2.  
  3.     int sock_get_ip; 
  4.     char ipaddr[50]; 
  5.  
  6.     struct   sockaddr_in *sin; 
  7.     struct   ifreq ifr_ip;    
  8.  
  9.     if ((sock_get_ip=socket(AF_INET, SOCK_STREAM, 0)) == -1) 
  10.     { 
  11.          printf("socket create failse...GetLocalIp!/n"); 
  12.          return ""
  13.     } 
  14.     
  15.     memset(&ifr_ip, 0, sizeof(ifr_ip));    
  16.     strncpy(ifr_ip.ifr_name, "eth0", sizeof(ifr_ip.ifr_name) - 1);    
  17.   
  18.     if( ioctl( sock_get_ip, SIOCGIFADDR, &ifr_ip) < 0 )    
  19.     {    
  20.          return "";    
  21.     }      
  22.     sin = (struct sockaddr_in *)&ifr_ip.ifr_addr;    
  23.     strcpy(ipaddr,inet_ntoa(sin->sin_addr));        
  24.      
  25.     printf("local ip:%s /n",ipaddr);     
  26.     close( sock_get_ip ); 
  27.      
  28.     return QString( ipaddr ); 
 

//修改本机IP地址的函数

  1. int SetLocalIp( const char *ipaddr ) 
  2.  
  3.     int sock_set_ip; 
  4.      
  5.     struct sockaddr_in sin_set_ip; 
  6.     struct ifreq ifr_set_ip; 
  7.  
  8.     bzero( &ifr_set_ip,sizeof(ifr_set_ip)); 
  9.   
  10.     if( ipaddr == NULL ) 
  11.         return -1; 
  12.  
  13.     if(sock_set_ip = socket( AF_INET, SOCK_STREAM, 0 ) == -1); 
  14.     { 
  15.         perror("socket create failse...SetLocalIp!/n"); 
  16.         return -1; 
  17.     } 
  18.   
  19.     memset( &sin_set_ip, 0, sizeof(sin_set_ip)); 
  20.     strncpy(ifr_set_ip.ifr_name, "eth0", sizeof(ifr_set_ip.ifr_name)-1);    
  21.      
  22.     sin_set_ip.sin_family = AF_INET; 
  23.     sin_set_ip.sin_addr.s_addr = inet_addr(ipaddr); 
  24.     memcpy( &ifr_set_ip.ifr_addr, &sin_set_ip, sizeof(sin_set_ip)); 
  25.  
  26.     if( ioctl( sock_set_ip, SIOCSIFADDR, &ifr_set_ip) < 0 ) 
  27.     { 
  28.         perror( "Not setup interface/n"); 
  29.         return -1; 
  30.     } 
  31.  
  32.     //设置激活标志 
  33.     ifr_set_ip.ifr_flags |= IFF_UP |IFF_RUNNING; 
  34.  
  35.     //get the status of the device 
  36.     if( ioctl( sock_set_ip, SIOCSIFFLAGS, &ifr_set_ip ) < 0 ) 
  37.     { 
  38.          perror("SIOCSIFFLAGS"); 
  39.          return -1; 
  40.     } 
  41.  
  42.     close( sock_set_ip ); 
  43.     return 0; 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值