您的位置:首页 > 运维架构 > Linux

如何用QT读写IP。或者是获取并修改IP。WINDOWS和LINUX下都试过可行

2011-12-30 15:55 1131 查看
最近在摸索如何获取和修改IP

这是第一种方式

//读取部分

QSettings *ConfigIni = new QSettings("/etc/eth0-setting",QSettings::IniFormat,0);

ui->ipInfoLineEdit->setText(ConfigIni->value("IP").toString());//IP地址

ui->maskInfoLineEdit->setText(ConfigIni->value("Mask").toString()); //子网掩码

ui->gatewayInfoLineEdit->setText(ConfigIni->value("Gateway").toString());//子网掩码

ui->dnsInfoLineEdit->setText(ConfigIni->value("DNS").toString());//DNS

ui->macInfoLineEdit->setText(ConfigIni->value("MAC").toString());//mac

//修改部分

void ipset::ipconfig_set_infile()

{

//删除原有配置文件

QDir rmfile;

rmfile.remove("/etc/eth0-setting");//WINDOWS下就可以不用这两句

QSettings *ipConfigIni = new QSettings("/etc/eth0-setting",QSettings::IniFormat,0);

ipConfigIni->setIniCodec("UTF-8"); //设置文件格式为UTF-8

ipConfigIni->setValue("IP",ui->ipInfoLineEdit->text());//写入配置文件中Ip配置参数

ipConfigIni->setValue("Mask",ui->maskInfoLineEdit->text());//写入配置文件中Mask配置参数

ipConfigIni->setValue("Gateway",ui->gatewayInfoLineEdit->text());//写入配置文件中Gateway配置参数

ipConfigIni->setValue("DNS",ui->dnsInfoLineEdit->text());

ipConfigIni->setValue("MAC",ui->macInfoLineEdit->text());

}

函数时用Qt下的QSttings。相关内容大家自己看

需要注意的是在linux下,覆盖不了原文件,需要调用QDir::remove函数,先删除再生成。

WINDOWS下就直接覆盖的。

第二种方法是采用QT自带的函数QList<QNetworkInterface

用这个类可以获取系统底层的网络参数,经过实践是可行的,我参考的文章:http://qt.csdn.net/articles.aspx?pointid=489&pointid2=7

/*QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();

//获取所有网络接口的列表

foreach(QNetworkInterface interface,list)

{ //遍历每一个网络接口

if(interface.name()=="eth0")//我的端口是eth0,你的需要根据自己的来判断

{

qDebug() << "Device: "<<interface.name();

//设备名

qDebug() << "HardwareAddress: "<<interface.hardwareAddress();

//硬件地址

QList<QNetworkAddressEntry> entryList = interface.addressEntries();

//获取IP地址条目列表,每个条目中包含一个IP地址,一个子网掩码和一个广播地址

foreach(QNetworkAddressEntry entry,entryList)

{//遍历每一个IP地址条目

if( entry.ip().toString().size() < 16)//区分IPV6和IPV4

{

qDebug()<<"IP Address: "<<entry.ip().toString();

//IP地址

qDebug()<<"Netmask: " <<entry.netmask().toString();

//子网掩码

qDebug()<<"Broadcast: "<<entry.broadcast().toString();

//广播地址

ui->ipInfoLineEdit->setText(entry.ip().toString());

ui->maskInfoLineEdit->setText(entry.netmask().toString());

ui->gatewayInfoLineEdit->setText(entry.broadcast().toString());*/

上面这段是参考网上的代码写的,根据网卡数量需要,自己写下判断就行了。

主要是在红色字体这些地方。自己根据需求来

这个是我的第一次总结。呵呵,支持下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: