#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <netdb.h>
#include <syslog.h>
#include <linux/sockios.h>
#include <net/if_arp.h>
int get_local_ip(char *localip) //获取本地 eth0 的地址
{
int err = -1;
int s;
s = socket(AF_INET,SOCK_DGRAM,0); //创建套接字
if(s < 0) {
printf("socket create error\n");
return -1;
}
struct ifreq ifr; //方便操作设置指向sockaddr_in的指针
struct sockaddr_in *sin = (struct sockaddr_in *)&(ifr.ifr_addr);
memset(localip,0,16);
memcpy(ifr.ifr_name,"eth0",5); //查询 eth0
err = ioctl(s,SIOCGIFADDR,&ifr);
if(!err) {
inet_ntop(AF_INET,&sin->sin_addr.s_addr,localip,16); //整型转换成点分四段的字符串
syslog(LOG_USER|LOG_INFO,"process %d get localip:%s\n",getpid(),localip);
}
close(s);
return 0;
}
int get_local_mac(unsigned char *localmac)
{
int err = -1;
int s;
s = socket(AF_INET,SOCK_DGRAM,0); //创建套接字
if(s < 0) {
printf("socket create error\n");
return -1;
}
struct ifreq ifr;
memcpy(ifr.ifr_name,"eth0",5); //查询 eth0
err = ioctl(s,SIOCGIFHWADDR,&ifr);
if(!err) {
memcpy(localmac,ifr.ifr_hwaddr.sa_data,6);
syslog(LOG_USER|LOG_INFO,"process %d get localmac:%02x-%02x-%02x-%02x-%02x-%02x\n",
getpid(),localmac[0],localmac[1],localmac[2],localmac[3],localmac[4],localmac[5]);
}
close(s);
return 0;
}
int set_local_ip(char *ip)
{
int err = -1;
int s;
s = socket(AF_INET,SOCK_DGRAM,0); //创建套接字
if(s < 0) {
printf("socket create error\n");
return -1;
}
struct ifreq ifr;
struct sockaddr_in *sin = (struct sockaddr_in *)&(ifr.ifr_addr);
memset(&ifr,0,sizeof(ifr));
memcpy(ifr.ifr_name,"eth0",5); //设置 eth0 的地址
inet_pton(AF_INET,ip,&(sin->sin_addr.s_addr)); //转换成网络字节序
sin->sin_family = AF_INET; //协议
err = ioctl(s,SIOCSIFADDR,&ifr);
if(err) {
syslog(LOG_USER|LOG_INFO,"process %d set ip error\n",getpid());
printf("%s\n",strerror(errno));
}
else
syslog(LOG_USER|LOG_INFO,"process %d set ip %s\n",getpid(),ip);
close(s);
return 0;
}
int get_host_mac(char *ip)
{
int s;
struct arpreq arp;
struct sockaddr_in *addr = (struct sockaddr_in *)&arp.arp_pa;
unsigned char mac[6];
int err = -1;
s = socket(AF_INET,SOCK_DGRAM,0); //创建套接字
if(s < 0) {
printf("socket create error\n");
return -1;
}
addr->sin_family = AF_INET; //填充arp成员arp_pa
addr->sin_addr.s_addr = inet_addr(ip);
if(addr->sin_addr.s_addr == INADDR_NONE) {
syslog(LOG_USER|LOG_INFO,"pid = %d: ip %s ,error format\n",getpid(),ip);
return -1;
}
strcpy(arp.arp_dev,"eth0"); //查询 eth0 的 mac 地址
err = ioctl(s,SIOCGARP,&arp);
if(err < 0) {
syslog(LOG_USER|LOG_INFO,"pid = %d: ioctl error\n",getpid());
return -1;
}
else {
memcpy(mac,(unsigned char *)&arp.arp_ha.sa_data,6);
syslog(LOG_USER|LOG_INFO,"process %d get %s mac:%02x-%02x-%02x-%02x-%02x-%02x\n",
getpid(),ip,mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
}
close(s);
return 0;
}
int main()
{
// char localip[16];
// unsigned char localmac[6];
// get_local_ip(localip);
// printf("localip = %s\n",localip);
// get_local_mac(localmac);
// printf("process %d get localmac:%02x-%02x-%02x-%02x-%02x-%02x\n",
// getpid(),localmac[0],localmac[1],localmac[2],localmac[3],localmac[4],localmac[5]);
// set_local_ip("192.168.1.155");
// get_host_mac("192.168.1.1");
return 0;
}
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <netdb.h>
#include <syslog.h>
#include <linux/sockios.h>
#include <net/if_arp.h>
int get_local_ip(char *localip) //获取本地 eth0 的地址
{
int err = -1;
int s;
s = socket(AF_INET,SOCK_DGRAM,0); //创建套接字
if(s < 0) {
printf("socket create error\n");
return -1;
}
struct ifreq ifr; //方便操作设置指向sockaddr_in的指针
struct sockaddr_in *sin = (struct sockaddr_in *)&(ifr.ifr_addr);
memset(localip,0,16);
memcpy(ifr.ifr_name,"eth0",5); //查询 eth0
err = ioctl(s,SIOCGIFADDR,&ifr);
if(!err) {
inet_ntop(AF_INET,&sin->sin_addr.s_addr,localip,16); //整型转换成点分四段的字符串
syslog(LOG_USER|LOG_INFO,"process %d get localip:%s\n",getpid(),localip);
}
close(s);
return 0;
}
int get_local_mac(unsigned char *localmac)
{
int err = -1;
int s;
s = socket(AF_INET,SOCK_DGRAM,0); //创建套接字
if(s < 0) {
printf("socket create error\n");
return -1;
}
struct ifreq ifr;
memcpy(ifr.ifr_name,"eth0",5); //查询 eth0
err = ioctl(s,SIOCGIFHWADDR,&ifr);
if(!err) {
memcpy(localmac,ifr.ifr_hwaddr.sa_data,6);
syslog(LOG_USER|LOG_INFO,"process %d get localmac:%02x-%02x-%02x-%02x-%02x-%02x\n",
getpid(),localmac[0],localmac[1],localmac[2],localmac[3],localmac[4],localmac[5]);
}
close(s);
return 0;
}
int set_local_ip(char *ip)
{
int err = -1;
int s;
s = socket(AF_INET,SOCK_DGRAM,0); //创建套接字
if(s < 0) {
printf("socket create error\n");
return -1;
}
struct ifreq ifr;
struct sockaddr_in *sin = (struct sockaddr_in *)&(ifr.ifr_addr);
memset(&ifr,0,sizeof(ifr));
memcpy(ifr.ifr_name,"eth0",5); //设置 eth0 的地址
inet_pton(AF_INET,ip,&(sin->sin_addr.s_addr)); //转换成网络字节序
sin->sin_family = AF_INET; //协议
err = ioctl(s,SIOCSIFADDR,&ifr);
if(err) {
syslog(LOG_USER|LOG_INFO,"process %d set ip error\n",getpid());
printf("%s\n",strerror(errno));
}
else
syslog(LOG_USER|LOG_INFO,"process %d set ip %s\n",getpid(),ip);
close(s);
return 0;
}
int get_host_mac(char *ip)
{
int s;
struct arpreq arp;
struct sockaddr_in *addr = (struct sockaddr_in *)&arp.arp_pa;
unsigned char mac[6];
int err = -1;
s = socket(AF_INET,SOCK_DGRAM,0); //创建套接字
if(s < 0) {
printf("socket create error\n");
return -1;
}
addr->sin_family = AF_INET; //填充arp成员arp_pa
addr->sin_addr.s_addr = inet_addr(ip);
if(addr->sin_addr.s_addr == INADDR_NONE) {
syslog(LOG_USER|LOG_INFO,"pid = %d: ip %s ,error format\n",getpid(),ip);
return -1;
}
strcpy(arp.arp_dev,"eth0"); //查询 eth0 的 mac 地址
err = ioctl(s,SIOCGARP,&arp);
if(err < 0) {
syslog(LOG_USER|LOG_INFO,"pid = %d: ioctl error\n",getpid());
return -1;
}
else {
memcpy(mac,(unsigned char *)&arp.arp_ha.sa_data,6);
syslog(LOG_USER|LOG_INFO,"process %d get %s mac:%02x-%02x-%02x-%02x-%02x-%02x\n",
getpid(),ip,mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
}
close(s);
return 0;
}
int main()
{
// char localip[16];
// unsigned char localmac[6];
// get_local_ip(localip);
// printf("localip = %s\n",localip);
// get_local_mac(localmac);
// printf("process %d get localmac:%02x-%02x-%02x-%02x-%02x-%02x\n",
// getpid(),localmac[0],localmac[1],localmac[2],localmac[3],localmac[4],localmac[5]);
// set_local_ip("192.168.1.155");
// get_host_mac("192.168.1.1");
return 0;
}