⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setmacdhcp.cpp

📁 linux下更改网卡mac地址
💻 CPP
字号:
/****************************************************************************** Form implementation generated from reading ui file 'setmacdhcp.ui'**** Created: Mon May 29 14:38:28 2006**      by:  The User Interface Compiler (uic)**** WARNING! All changes made in this file will be lost!****************************************************************************/#include "setmacdhcp.h"#include <qcombobox.h>#include <qlabel.h>#include <qlineedit.h>#include <qpushbutton.h>#include <qlayout.h>#include <qvariant.h>#include <qtooltip.h>#include <qwhatsthis.h>//#include <unistd.h>  for sleep()#include <qmessagebox.h>class QMessageBox;/*  *  Constructs a setMac which is a child of 'parent', with the  *  name 'name' and widget flags set to 'f'  */setMac::setMac( QWidget* parent,  const char* name, WFlags fl )    : QWidget( parent, name, fl ){    if ( !name )	setName( "setMac" );    resize( 308, 220 );     setMaximumSize( QSize( 320, 220 ) );    setCaption( tr( "setMAC" ) );    interfaceNumCombo = new QComboBox( FALSE, this, "interfaceNumCombo" );    interfaceNumCombo->setGeometry( QRect( 130, 10, 70, 25 ) );     dhcpPushButton = new QPushButton( this, "dhcpPushButton" );    dhcpPushButton->setGeometry( QRect( 50, 180, 90, 25 ) );     dhcpPushButton->setText( tr( "DHCP" ) );    setupPushButton = new QPushButton( this, "setupPushButton" );    setupPushButton->setGeometry( QRect( 182, 180, 90, 25 ) );     setupPushButton->setText( tr( "Setup" ) );    QWidget* privateLayoutWidget = new QWidget( this, "Layout1" );    privateLayoutWidget->setGeometry( QRect( 130, 40, 155, 131 ) );     Layout1 = new QVBoxLayout( privateLayoutWidget );     Layout1->setSpacing( 6 );    Layout1->setMargin( 0 );    IPAddressLineEdit = new QLineEdit( privateLayoutWidget, "IPAddressLineEdit" );    IPAddressLineEdit->setText( tr( "" ) );    IPAddressLineEdit->setFrame( FALSE );    Layout1->addWidget( IPAddressLineEdit );    netMaskLineEdit = new QLineEdit( privateLayoutWidget, "netMaskLineEdit" );    netMaskLineEdit->setText( tr( "" ) );    netMaskLineEdit->setFrame( FALSE );    Layout1->addWidget( netMaskLineEdit );    MACAddressLineEdit = new QLineEdit( privateLayoutWidget, "MACAddressLineEdit" );    MACAddressLineEdit->setFrame( FALSE );    Layout1->addWidget( MACAddressLineEdit );    gatewayLineEdit = new QLineEdit( privateLayoutWidget, "gatewayLineEdit" );    gatewayLineEdit->setFrame( FALSE );    Layout1->addWidget( gatewayLineEdit );    DNSLineEdit = new QLineEdit( privateLayoutWidget, "DNSLineEdit" );    DNSLineEdit->setFrame( FALSE );    Layout1->addWidget( DNSLineEdit );    QWidget* privateLayoutWidget_2 = new QWidget( this, "Layout3" );    privateLayoutWidget_2->setGeometry( QRect( 15, 40, 110, 130 ) );     Layout3 = new QVBoxLayout( privateLayoutWidget_2 );     Layout3->setSpacing( 6 );    Layout3->setMargin( 0 );    IPAddressLabel = new QLabel( privateLayoutWidget_2, "IPAddressLabel" );    IPAddressLabel->setText( tr( "IP Address:" ) );    Layout3->addWidget( IPAddressLabel );    netMask = new QLabel( privateLayoutWidget_2, "netMask" );    netMask->setText( tr( "NetMask" ) );    Layout3->addWidget( netMask );    MACAddressLabel = new QLabel( privateLayoutWidget_2, "MACAddressLabel" );    MACAddressLabel->setText( tr( "MACAddress:" ) );    Layout3->addWidget( MACAddressLabel );    gatewayLabel = new QLabel( privateLayoutWidget_2, "gatewayLabel" );    gatewayLabel->setText( tr( "GetwayLabel" ) );    Layout3->addWidget( gatewayLabel );    DNSLabel = new QLabel( privateLayoutWidget_2, "DNSLabel" );    DNSLabel->setText( tr( "DNS:" ) );    Layout3->addWidget( DNSLabel );    interfaceNumLabel = new QLabel( this, "interfaceNumLabel" );    interfaceNumLabel->setGeometry( QRect( 15, 15, 110, 21 ) );     interfaceNumLabel->setText( tr( "Interface Num:" ) );	modifyEnable=TRUE;	dirty=FALSE;    MACDhcp = new macdhcp;    ifnum = MACDhcp->getIfNum();	int eth0Index=-1;    for( int i=ifnum-1; i>=0; i-- ){      tempString = MACDhcp->getIfName( i );      interfaceNumCombo->insertItem( tempString, -1 );	  if(tempString.find("eth0")!=-1&&tempString.find("eth0:1")==-1)eth0Index=i;	  if(tempString.find("ppp",0,FALSE)!=-1)modifyEnable=FALSE;	   }		    MACAddressLineEdit->setText( MACDhcp->getMacAddress(ifnum-1) );    IPAddressLineEdit->setText( MACDhcp->getIPAddress(ifnum-1) );    gatewayLineEdit->setText( MACDhcp->getGateway() );    DNSLineEdit->setText( MACDhcp->getDNS() );	netMaskLineEdit->setText(MACDhcp->getNetMask(ifnum-1) );	if(eth0Index==-1||!modifyEnable)		{		dhcpPushButton->setDisabled( TRUE );		setupPushButton->setDisabled( TRUE );		}    // signals and slots connections    connect( interfaceNumCombo, SIGNAL( activated(int) ), this, SLOT( comboTextChange(int) ) );    connect( dhcpPushButton, SIGNAL( clicked() ), this, SLOT( dhcpClicked() ) );    connect( setupPushButton, SIGNAL( clicked() ), this, SLOT( setupClicked() ) );}/*   *  Destroys the object and frees any allocated resources */setMac::~setMac(){	    // no need to delete child widgets, Qt does it all for us	qWarning("exit");	if(dirty)resetEthernet();	delete MACDhcp;}void setMac::resetEthernet(){		FILE *fp;		int i=0,eth0=0;			QString 	mac("01:02:03:04:05:06");	    QString 	ip("192.168.0.120");    	QString 	netmask("255.255.255.0");	    QString 	dns("192.168.0.1");	    QString 	gateway("192.168.0.1");		QString	network("192.168.0.0");		QString	broadcast("192.168.0.255");		while(eth0<interfaceNumCombo->count())		{			tempString=interfaceNumCombo->text(eth0);				qWarning(tempString);					if(tempString.find("eth0",0,FALSE)!=-1)			{			    mac=MACDhcp->getMacAddress(ifnum-1-eth0);			    ip=MACDhcp->getIPAddress(ifnum-1-eth0);			    netmask=MACDhcp->getNetMask(ifnum-1-eth0);			    dns=MACDhcp->getDNS();			    gateway=MACDhcp->getGateway();				network=MACDhcp->getNetwork();				broadcast=MACDhcp->getBroadcast();				break;			}			eth0++;		}	 	mac.replace( QRegExp("-"), ":" );		QString line[10];		line[0]="HOSTNAME=\"lq\"\n";		line[1]="DOMAIN=\"linux\"\n";		line[2]="IPADDR=\""+ip+"\"\n";		line[3]="NETMASK=\""+netmask+"\"\n";		line[4]="GATEWAY=\""+gateway+"\"\n";		line[5]="DNS_1=\""+dns+"\"\n";		line[6]="DNS_2=\"61.139.2.69\"\n";		line[7]="NETWORK=\""+network+"\"\n";		line[8]="BROADCAST=\""+broadcast+"\"\n";		line[9]="MAC=\""+mac+"\"\n";		fp=fopen("/usr/etc/pcmcia/network.opts-static","w");		for(i=0;i<10;i++)			fputs(line[i].ascii(),fp);		fclose(fp);					system("/usr/etc/pcmcia/network start eth0");}void setMac::comboTextChange( int item ){    int curItem;    curItem = ifnum - 1 - item;    MACAddressLineEdit->setText( MACDhcp->getMacAddress(curItem) );    IPAddressLineEdit->setText( MACDhcp->getIPAddress(curItem) );	netMaskLineEdit->setText(MACDhcp->getNetMask(curItem));    DNSLineEdit->setText( MACDhcp->getDNS() );    gatewayLineEdit->setText( MACDhcp->getGateway() );	if(MACDhcp->getIfName(curItem).stripWhiteSpace ()==QString("eth0")&&modifyEnable)	{		dhcpPushButton->setDisabled( FALSE );		setupPushButton->setDisabled( FALSE );	}	else	{		dhcpPushButton->setDisabled( TRUE );		setupPushButton->setDisabled( TRUE );	}						}void setMac::dhcpClicked(){    int curItem, item;//	FILE *fp;	int pumpCount=0;	QString srhStr;	if(!modifyEnable)	{		dhcpPushButton->setDisabled( TRUE );		setupPushButton->setDisabled( TRUE );	    QMessageBox::information( this, tr( "Setup" ), tr( "Can't exec.this will broken PPPoE link" ) );		return;	}    dhcpPushButton->setDisabled( TRUE );	setupPushButton->setDisabled( TRUE );    dhcpPushButton->setText( tr( "DHCP..." ) );    item = interfaceNumCombo->currentItem();    curItem = ifnum - 1 - item;    QMessageBox::information( this, tr( "DHCP" ), tr( "please keep waiting 3's~2m!" ) );//	system("killall pump");	system("ps | grep sbin/pump > /etc/tmp/pump"); 	fp=fopen("/etc/tmp/pump","r");	while(!feof(fp))	{		fgets(tmpStr,128,fp);		srhStr.sprintf("%s",tmpStr);		if(srhStr.findRev("grep sbin/pump",-15,FALSE)==-1)			pumpCount++;	}	fclose(fp);//	qWarning("%i %i",pumpCount,pMB->result());	if(pumpCount<2)system( "sbin/pump&" );	pMB=new QMessageBox(tr("DHCP"),tr("PSUH cancel TO exit"),QMessageBox::Warning,QMessageBox::Cancel,QMessageBox::NoButton,QMessageBox::NoButton,this,0,FALSE);	pMB->exec(); 	timeCounter=0;	tid=startTimer(500);}void setMac::setupClicked(){    QString tempString;    int curItem;    curItem = interfaceNumCombo->currentItem();    curItem = ifnum - 1 - curItem;	if(MACDhcp->getIfName(curItem).stripWhiteSpace ()!=QString("eth0")||!modifyEnable)	{		dhcpPushButton->setDisabled( TRUE );		setupPushButton->setDisabled( TRUE );	    QMessageBox::information( this, tr( "Setup" ), tr( "Only can modify eth0!" ) );		return;	}    tempString = MACAddressLineEdit->text();    MACDhcp->setMacAddress( curItem, tempString );    tempString = IPAddressLineEdit->text();    IPAddressLineEdit->setText( MACDhcp->setIPAddress( curItem, tempString ) );    tempString = netMaskLineEdit->text();    netMaskLineEdit->setText( MACDhcp->setNetMask( curItem, tempString ) );    tempString = gatewayLineEdit->text();    gatewayLineEdit->setText( MACDhcp->setGateway( tempString ) );    tempString = DNSLineEdit->text();    DNSLineEdit->setText( MACDhcp->setDNS( tempString ) );    QMessageBox::information( this, tr( "modify" ), tr( "modify finished!" ) );  	dirty=TRUE;}void setMac::timerEvent( QTimerEvent *e ){    int curItem, item,pumpCount=0;    item = interfaceNumCombo->currentItem();    curItem = ifnum - 1 - item;	timeCounter++;	pMB->setActiveWindow();	pMB->raise();	if(timeCounter<=30)	{		system("ps | grep sbin/pump > /etc/tmp/pump"); 		fp=fopen("/etc/tmp/pump","r");		while(!feof(fp))		{			fgets(tmpStr,128,fp);			srhStr.sprintf("%s",tmpStr);			if(srhStr.findRev("grep sbin/pump",-15,FALSE)==-1)				pumpCount++;		}		fclose(fp);		qWarning("%i %i",pumpCount,pMB->result());		if(pumpCount<2||pMB->result()==QMessageBox::Cancel)		{			killTimer(tid);			if(pMB->result()==QMessageBox::Cancel)				system("killall pump");			MACAddressLineEdit->setText( MACDhcp->getMacAddress(curItem) );			IPAddressLineEdit->setText( MACDhcp->getIPAddress(curItem) );			netMaskLineEdit->setText( MACDhcp->getNetMask(curItem) );			gatewayLineEdit->setText( MACDhcp->getGateway() );			DNSLineEdit->setText( MACDhcp->getDNS() );			dhcpPushButton->setDisabled( FALSE );			setupPushButton->setDisabled( FALSE );			dhcpPushButton->setText( tr( "DHCP"));			if(pMB->result()==QMessageBox::Cancel)				QMessageBox::warning( this, tr( "DHCP" ), tr( "User cancel!!" ) );  			else				QMessageBox::warning( this, tr( "DHCP" ), tr( "DHCP successed!!" ) );  			delete pMB;					return;		}		if(timeCounter%4==0)		    dhcpPushButton->setText( tr( "\\" ));		if(timeCounter%4==1)		    dhcpPushButton->setText( tr( "|" ));		if(timeCounter%4==2)		    dhcpPushButton->setText( tr( "/" ));		if(timeCounter%4==3)		    dhcpPushButton->setText( tr( "-" ));	}	else	{		system("killall pump");		delete pMB;				killTimer(tid);		QMessageBox::warning( this, tr( "DHCP" ), tr( "DHCP failure!!" ) );  		system("ifconfig eth0 192.168.0.120 up");		MACAddressLineEdit->setText( MACDhcp->getMacAddress(curItem) );		IPAddressLineEdit->setText( MACDhcp->getIPAddress(curItem) );		netMaskLineEdit->setText( MACDhcp->getNetMask(curItem) );		gatewayLineEdit->setText( MACDhcp->getGateway() );		DNSLineEdit->setText( MACDhcp->getDNS() );		dhcpPushButton->setDisabled( FALSE );		setupPushButton->setDisabled( FALSE );		dhcpPushButton->setText( tr( "DHCP" ) );	}	return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -