pc机取得并修改arm linux IP地址 网关 子网掩码 主机名等信息
来源:互联网 发布:老帅哥alex淘宝店 编辑:程序博客网 时间:2024/04/29 22:25
(一)获取
1、当pc发送广播,arm linux收到广播信息时,向客户端发送确认信息
客户端可通过socket取出IP地址
2、当pc机发送请求取得上述信息参数时,执行以下系统调用
system("hostname > hostfile");
system("ifconfig > ipfile");
system("route > gwfile");
并将这些文件读取传送到客户端,即pc3、客户端接收到信息后,将其写到一个文件中4、通过文件的特殊标记定位,就可以取得子网掩码 网关 主机名等信息
(二)设置
1、取得设置的主机名、IP、网关、子网掩码等信息
2、将其格式化如下:
对主机名而言:
(1)单独发送到服务器,服务器程序将其写在一个单独文件中,如:/prog/HOSTNAME
(2)修改/etc/init.d/rcS应项为/bin/hostname -F /prog/HOSTNAME 对其他来说:
(1)格式化信息如下:
假若你输入的IP地址为172.29.26.41 子网掩码为255.255.255.0
/sbin/ifconfig eth0 172.29.26.41 netmask 255.255.255.0
(2)假若你输入的默认网关为172.29.26.1
/sbin/route add default gw 172.29.26.1
3、将其替代rcS中的对应项,然后发送到服务器端
4、重新启动服务器,设置生效//客户端获取
void CWireDialog::OnDownload()
{
/*
向服务器发送获取信息,服务器进行系统调用,将信息写在文件中:ip gw
*/
SOCKET sockfd;
SOCKADDR_IN sin,saUdpServ,saClient;
struct TO_SERVER m_msg;
int nSize,nbSize;
int ncount=0;
char *userinfo;
userinfo = new char[2048];
sockfd=socket(PF_INET,SOCK_DGRAM,0);
sin.sin_family = AF_INET;
sin.sin_port = htons(0);
sin.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind( sockfd, (SOCKADDR *)&sin, sizeof(sin))!=0)
{
AfxMessageBox("不能创建网络接口/n");//初始化失败返回-1
closesocket(sockfd);
return;
}
saUdpServ.sin_family = AF_INET;
saUdpServ.sin_addr.s_addr = inet_addr(curIP);
saUdpServ.sin_port = htons (PORT);//发送用的端口,可以根据需要更改 //
nSize = sizeof ( SOCKADDR_IN );
m_msg.MsgID = ID_GETNETINFO;
sendto ( sockfd,(char*)&m_msg, sizeof(m_msg),0,(SOCKADDR *) &saUdpServ,sizeof ( SOCKADDR_IN ));
nSize = sizeof ( SOCKADDR_IN );
while(1)
{
if((nbSize=recvfrom (sockfd,(char*)&m_msg,sizeof(m_msg),0,(SOCKADDR FAR *) &saClient,&nSize))==-1)
{
AfxMessageBox("无法接到日志");
closesocket(sockfd);
return;
}
//正确接收日志文件,写文件
if(m_msg.MsgID == ID_RETNETINFO)
{
//AfxMessageBox("正确接收用户信息");
for(int i=0;i<nbSize-4;i++)
{
userinfo[recv] = m_msg.Msg.usermodify[i];
++recv;
}
else if(m_msg.MsgID = ID_NETINFOOVER)
{
break;
}
}
userinfo[recv] = '/0';
closesocket(sockfd);
CFile userFile;
if(!userFile.Open("netinfo/netinfo",CFile::modeCreate|CFile::modeWrite|CFile::typeBinary))
{
MessageBox("无法打用户信息文件");
return;
}
userFile.Write(userinfo,recv);
userFile.Close();
recv = 0;
delete[] userinfo;
/*
将需要的信息从文件中取出
*/
GetDlgItem(IDC_ID)->SetWindowText(curID);
GetDlgItem(IDC_IP)->SetWindowText(curIP); //IP
/*
NetMask
*/
setmask();
setgateway();
}void CWireDialog::setmask()
{
CFile nFile;
if(!nFile.Open("netinfo/netinfo",CFile::modeRead|CFile::typeBinary))
{
MessageBox("文件打开失败");
return;
}
int nlength = nFile.GetLength();
char *content;
content = new char[nlength]; int nret = nFile.Read(content,nlength);
if(nret < 0)
{
MessageBox("文件读取失败");
return;
}
int pos;
for(int i=0;i<nlength-4;i++)
{
if(content[i] == 'M' && content[i+1] == 'a' && content[i+2] == 's' && content[i+3] == 'k')
{
pos = i;
break;
}
}
if(i == nlength - 5)
{
MessageBox("不能找到子网掩码");
return;
}
pos += 5;
CString str,mask;
while(content[pos] != '/n')
{
str.Format("%c",content[pos]);
mask += str;
pos ++;
}
GetDlgItem(IDC_MASK)->SetWindowText(mask);
nFile.Close();
}void CWireDialog::setgateway()
{
CFile nFile;
if(!nFile.Open("netinfo/netinfo",CFile::modeRead|CFile::typeBinary))
{
MessageBox("文件打开失败");
return;
}
int nlength = nFile.GetLength();
char *con;
con = new char[nlength];
int ret = nFile.Read(con,nlength);
if(ret < 0)
{
MessageBox("文件读取失败");
return;
}
int pos;
for(int i=0;i<nlength-7;i++)
{
if(con[i]=='d'&&con[i+1]=='e'&&con[i+2]=='f'&&con[i+3]=='a'&&con[i+4]=='u'&&con[i+5]=='l'&&con[i+6]=='t')
{
pos = i;
break;
}
}
if(i == nlength-8)
{
MessageBox("不能找到默认网关");
return;
}
pos += 7;
while(con[pos] == ' ')
pos++;
CString str,gw;
while(con[pos] != ' ')
{
str.Format("%c",con[pos]);
gw += str;
pos ++;
}
GetDlgItem(IDC_GATEWAY)->SetWindowText(gw);
nFile.Close();
}//客户端设置
void CWireDialog::OnSet()
{
/*
将信息格式化,然后写入文件
*/
UpdateData(TRUE);
int ret = writeinfo();
if(ret != 0)
{
MessageBox("格式化配置信息失败");
return;
} SOCKET sockfd;
SOCKADDR_IN sin,saUdpServ,saClient;
struct TO_SERVER m_msg;
int nSize,nbSize;
int ncount=0;
sockfd=socket(PF_INET,SOCK_DGRAM,0);
sin.sin_family = AF_INET;
sin.sin_port = htons(0);
sin.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind( sockfd, (SOCKADDR *)&sin, sizeof(sin))!=0)
{
AfxMessageBox("不能创建网络接口/n");//初始化失败返回-1
closesocket(sockfd);
return;
}
saUdpServ.sin_family = AF_INET;
saUdpServ.sin_addr.s_addr = inet_addr(curIP);
saUdpServ.sin_port = htons (PORT);//发送用的端口,可以根据需要更改 /*
发送修改主机名称请求
*/
nSize = sizeof ( SOCKADDR_IN );
m_msg.MsgID = ID_SETHOSTNAME;
strcpy(m_msg.Msg.usermodify,m_strid);
ncount = m_strid.GetLength();
sendto ( sockfd,(char*)&m_msg, ncount+4,0,(SOCKADDR *) &saUdpServ,sizeof ( SOCKADDR_IN ));
nSize = sizeof ( SOCKADDR_IN );
/*
发送修改IP 网关 子网掩码请求
*/
CFile nFile;
if(!nFile.Open("netinfo/rcS",CFile::modeRead|CFile::typeBinary))
{
MessageBox("打开配置文件失败");
return;
}
ncount = nFile.GetLength();
if(!nFile.Read(m_msg.Msg.usermodify,ncount))
{
MessageBox("读取配置文件失败");
return;
}
m_msg.MsgID = ID_SETNETINFO;
sendto ( sockfd,(char*)&m_msg, ncount+4,0,(SOCKADDR *) &saUdpServ,sizeof ( SOCKADDR_IN ));
/*
等待服务器返回标志
*/
if((nbSize=recvfrom (sockfd,(char*)&m_msg,sizeof(m_msg),0,(SOCKADDR FAR *) &saClient,&nSize))==-1)
{
MessageBox("无法接受正确反馈信息");
closesocket(sockfd);
return;
}
if(m_msg.MsgID == ID_SETNETOK)
{
MessageBox("成功修改/n要使修改生效,请重新启动网络");
}
else if(m_msg.MsgID = ID_NETINFOOVER)
{
MessageBox("修改失败");
}
closesocket(sockfd);
return;
}int CWireDialog::writeinfo()
{
UpdateData(TRUE);
CFile nFile;
CString info;
char *buf;
if(!nFile.Open("netinfo/basic",CFile::modeRead|CFile::typeBinary))
{
MessageBox("基本配置文件打开失败");
return -1;
}
int nlength = nFile.GetLength();
buf = new char[nlength];
if(!nFile.Read(buf,nlength))
{
MessageBox("基本配置信息读取失败");
return -1;
}
nFile.Close();
if(!nFile.Open("netinfo/rcS",CFile::modeCreate|CFile::modeWrite|CFile::typeBinary))
{
MessageBox("创建配置文件失败");
return -1;
}
nFile.Write(buf,nlength);
info.Format("/sbin/ifconfig eth0 %s netmask %s/n",m_strip,m_strmask);
nFile.Write(info,info.GetLength());
info.Empty();
info.Format("/sbin/route add default gw %s",m_strgate);
nFile.Write(info,info.GetLength());
return 0;
}
//服务器端设置
if(m_msg.MsgID == ID_SETHOSTNAME)
{
printf("receve quest to modify the host name/n");
int ncount;
if((nfile = open("HOSTNAME",O_WRONLY|O_CREAT|O_TRUNC)) == -1)
{
printf("the host file open error/n");
return ;
}
if((ncount = write(nfile,m_msg.Msg.usermodify,nrsize-4)) != nrsize-4)
{
printf("write host file error");
return ;
}
close(nfile);
break;
}
if(m_msg.MsgID == ID_SETNETINFO)
{
printf("receive quest to modify the net info/n");
int count;
rename("/etc/init.d/rcS","/etc/init.d/rcSold");
printf("rename the rcS file/n");
if((nfile = open("/etc/init.d/rcS",O_WRONLY|O_CREAT|O_TRUNC)) == -1)
{
printf("the rcs file open error/n");
rename("/etc/init.d/rcSold","/etc/init.d/rcS");
printf("rename the rcS file/n");
m_msg.MsgID = ID_SETNETFAIL;
sendto(sockfd,(char*)&m_msg,4,0,(struct sockaddr*)&fromsin,sin_size);
return;
}
if((count = write(nfile,m_msg.Msg.usermodify,nrsize-4)) != nrsize-4)
{
printf("write the rcs file fail/n");
rename("/etc/init.d/rcSold","/etc/init.d/rcS");
printf("rename the rcS file/n");
m_msg.MsgID = ID_SETNETFAIL;
sendto(sockfd,(char*)&m_msg,4,0,(struct sockaddr*)&fromsin,sin_size);
close(nfile);
}
else
{
printf("write the rcs file success/n");
m_msg.MsgID = ID_SETNETOK;
}
sendto(sockfd,(char*)&m_msg,4,0,(struct sockaddr*)&fromsin,sin_size);
close(nfile);
chmod("/etc/init.d/rcS",755);
printf("change the attr of the rcS file/n");
break;
}
- pc机取得并修改arm linux IP地址 网关 子网掩码 主机名等信息
- pc机取得并修改arm linux IP地址 网关 子网掩码 主机名等信息
- 获取并修改本机的ip,网关,dns,子网掩码等信息
- C++ WMI 修改PC ip地址,子网掩码,网关
- linux 利用ioctl函数获取IP地址、子网掩码、MAC地址和修改本机IP地址、子网掩码、网关
- VC获取本机IP、子网掩码、网关、计算广播地址等信息代码(通过读注册表)
- VC获取本机IP、子网掩码、网关、计算广播地址等信息
- VB6获取本机网络适配器信息(网卡名称、IP地址、子网掩码、默认网关等)
- #扫疑贴#ip地址、子网掩码、网关等概念
- CentOS 修改IP地址、DNS、网关、主机名
- 如何编程实现修改IP地址、子网掩码、网关、DNS地址等?
- Linux查看网关、子网掩码、IP、广播地址
- IP地址、子网掩码、网关
- IP地址、子网掩码、网关
- ip地址 子网掩码 网关
- IP地址 网关 子网掩码
- Linux学习(一):linux更改ip地址命令_更改DNS_更改默认网关_更改子网掩码_主机名
- Linux 修改本机IP地址 修改用户名 修改主机名
- VB-Base64 文件或字符加解密
- sort for List.
- Python 语法速查
- 关于群部分含同态映射函数的核的集合到G2所有子集集合的映射函数为同态映射函数(例17.45)
- windows程序设计 之 「HEAD」范例分析笔记
- pc机取得并修改arm linux IP地址 网关 子网掩码 主机名等信息
- stm32的GPIO的十大优越功能特色
- 学习SqlServer的官方网址
- Self Introduction --- 赵帅
- 强大的apache rewrite
- Android Recovery模式 详细出处参考
- bochs Com文件的调试方法
- Android的设置界面及Preference使用
- VS2008 远程调试环境搭建