Linux基础——查看IP及port的简单实现

需要注意,不同的机器,有的可能为大端字节序,有的可能为小端字节序。

小端就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端。

大端就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端。

实现代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <sys/socket.h>
 5 #include <netinet/in.h>
 6 #include <arpa/inet.h>
 7 #define IP "180.97.33.107"
 8 int my_aton(char * ip)
 9 {
10     int arr[4];
11     int i;
12     sscanf(ip,"%d.%d.%d.%d",arr,arr+1,arr+2,arr+3);
13     i=(arr[0]<<24)|(arr[1]<<16)|(arr[2]<<8)|arr[3];
14     return i;
15 }
16 char* my_ntoa(int i)
17 {
18     static char buf[1024];
19     memset(buf,0,1024);
20     sprintf(buf,"%d.%d.%d.%d",(i>>24)&0xff,(i>>16)&0xff,(i>>8)&0xff,i&0xff);
21     return buf;
22 }
23 int main(int argc,char *argv[])
24 {
25     int i;
26     i=my_aton(IP);
27     struct in_addr my_add;
28     inet_aton(IP,&my_add);
29     printf("%x\n",i);
30     printf("%x\n",my_add.s_addr);
31     char *buf;
32     buf=my_ntoa(i);
33     printf("%s\n",buf);
34     printf("%s\n",inet_ntoa(my_add));
35 }
View Code

获得本地的IP方法如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
int main(int argc,char *argv[])
{
    struct hostent *p;
    p=gethostbyname(argv[1]);
    char **pp;
    printf("name : %s\n",p->h_name);
    pp=p->h_aliases;
    for(;*pp!=NULL;*pp++)
        printf("alia : %s\n",*pp);
    printf("type : %d\n",p->h_addrtype);
    printf("ip length : %d\n",p->h_length);
    pp=p->h_addr_list;
    for(;*pp != NULL;*pp++)
        printf("ip : %s\n",inet_ntoa(*(struct in_addr*)*pp));
    return 0;
}
View Code

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。