首先是获取mac地址
QString Setting::__GetLocalMac()
{
int sock_mac;
{
int sock_mac;
struct ifreq ifr_mac;
char mac_addr[30];
char mac_addr[30];
sock_mac = socket( AF_INET, SOCK_STREAM, 0 );
if( sock_mac == -1)
{
LOGGER->Log(LOGGER_ERROR,"create socket falise...mac");
return "";
}
if( sock_mac == -1)
{
LOGGER->Log(LOGGER_ERROR,"create socket falise...mac");
return "";
}
memset(&ifr_mac,0,sizeof(ifr_mac));
strncpy(ifr_mac.ifr_name, "eth0", sizeof(ifr_mac.ifr_name)-1);
strncpy(ifr_mac.ifr_name, "eth0", sizeof(ifr_mac.ifr_name)-1);
if( (ioctl( sock_mac, SIOCGIFHWADDR, &ifr_mac)) < 0)
{
LOGGER->Log(LOGGER_ERROR,"mac ioctl error");
return "";
}
{
LOGGER->Log(LOGGER_ERROR,"mac ioctl error");
return "";
}
sprintf(mac_addr,"%02x:%02x:%02x:%02x:%02x:%02x",
(unsigned char)ifr_mac.ifr_hwaddr.sa_data[0],
(unsigned char)ifr_mac.ifr_hwaddr.sa_data[1],
(unsigned char)ifr_mac.ifr_hwaddr.sa_data[2],
(unsigned char)ifr_mac.ifr_hwaddr.sa_data[3],
(unsigned char)ifr_mac.ifr_hwaddr.sa_data[4],
(unsigned char)ifr_mac.ifr_hwaddr.sa_data[5]);
(unsigned char)ifr_mac.ifr_hwaddr.sa_data[0],
(unsigned char)ifr_mac.ifr_hwaddr.sa_data[1],
(unsigned char)ifr_mac.ifr_hwaddr.sa_data[2],
(unsigned char)ifr_mac.ifr_hwaddr.sa_data[3],
(unsigned char)ifr_mac.ifr_hwaddr.sa_data[4],
(unsigned char)ifr_mac.ifr_hwaddr.sa_data[5]);
close( sock_mac );
return QString( mac_addr );
}
return QString( mac_addr );
}
然后是设置ip地址
bool Setting::SetLocalIp( const char *ipaddr )
{
int ret = -1;
QSettings setting("/data/mender/eth.network", QSettings::IniFormat);
setting.setValue("Network/Address",ipaddr);
setting.sync();
ret = system("systemctl restart systemd-networkd");
if(ret < 0)
{
LOGGER->Log(LOGGER_ERROR,"Not setup interface...SetLocalIp![%s]",strerror(errno));
return false;
}
return true;
}
{
int ret = -1;
QSettings setting("/data/mender/eth.network", QSettings::IniFormat);
setting.setValue("Network/Address",ipaddr);
setting.sync();
ret = system("systemctl restart systemd-networkd");
if(ret < 0)
{
LOGGER->Log(LOGGER_ERROR,"Not setup interface...SetLocalIp![%s]",strerror(errno));
return false;
}
return true;
}
再次是获取ip地址
QString Setting::GetLocalIp()
{
return localIp_;
}
{
return localIp_;
}
QString Setting::__GetLocalIp()
{
{
int sock_get_ip;
char ipaddr[50];
char ipaddr[50];
struct sockaddr_in *sin;
struct ifreq ifr_ip;
struct ifreq ifr_ip;
if ((sock_get_ip=socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
LOGGER->Log(LOGGER_ERROR,"socket create failse...GetLocalIp!");
{
LOGGER->Log(LOGGER_ERROR,"socket create failse...GetLocalIp!");
return "";
}
}
memset(&ifr_ip, 0, sizeof(ifr_ip));
strncpy(ifr_ip.ifr_name, "eth0", sizeof(ifr_ip.ifr_name) - 1);
strncpy(ifr_ip.ifr_name, "eth0", sizeof(ifr_ip.ifr_name) - 1);
if( ioctl( sock_get_ip, SIOCGIFADDR, &ifr_ip) < 0 )
{
LOGGER->Log(LOGGER_ERROR,"Not setup interface...GetLocalIp![%s]",strerror(errno));
return "";
}
sin = (struct sockaddr_in *)&ifr_ip.ifr_addr;
strcpy(ipaddr,inet_ntoa(sin->sin_addr));
{
LOGGER->Log(LOGGER_ERROR,"Not setup interface...GetLocalIp![%s]",strerror(errno));
return "";
}
sin = (struct sockaddr_in *)&ifr_ip.ifr_addr;
strcpy(ipaddr,inet_ntoa(sin->sin_addr));
close( sock_get_ip );
return QString( ipaddr );
}
}
最后是设置mac地址
bool Setting::SetLocalMac( const char *macaddr )
{
int ret = -1;
{
int ret = -1;
QString cmd = QString("ifconfig eth0 hw ether %1").arg(macaddr);
ret = system(cmd.toLatin1().constData());
if(ret < 0)
{
LOGGER->Log(LOGGER_ERROR,"Not setup interface...SetLocalIp![%s]",strerror(errno));
return false;
}
return true;
}
ret = system(cmd.toLatin1().constData());
if(ret < 0)
{
LOGGER->Log(LOGGER_ERROR,"Not setup interface...SetLocalIp![%s]",strerror(errno));
return false;
}
return true;
}