當前位置:編程學習大全網 - 編程語言 - 內外網通過ip能區分?

內外網通過ip能區分?

內網ip是192,打頭的,或者172打頭的

外網ip是其他打頭的

在開始--運行--輸入cmd--回車,在裏面鍵入ipconfig/all 裏面會顯示dns,ipaddress就是外網地址

tcp/ip協議中,專門保留了三個IP地址區域作為私有地址,其地址範圍如下:

10.0.0.0/8:10.0.0.0~10.255.255.255

 172.16.0.0/12:172.16.0.0~172.31.255.255

 192.168.0.0/16:192.168.0.0~192.168.255.255

使用保留地址的網絡只能在內部進行通信,而不能與其他網絡互連。如果要與外部通信,那麽必須通過網關與外部通信,這裏使用了NAT, NAPT技術就是用來保證通信的代理機制。

另外,壹些寬帶運營商盡管也使用了非私有地址分配給用戶使用,但是由於路由設置的原因,Internet上的其他用戶並不能訪問到這些ip。上面2部分IP都可稱為內網IP,下面這部分IP本次不討論。

如果自己機器上網絡接口的ip地址落在上述保留地址的範圍內,則可以肯定自己處於內網模式下。

NAT要求整個服務的連接是從內網向外網主動發起的,而外網的用戶無法直接(主動)向內網的服務發起連接請求,除非在NAT的(所有)網關上針對服務的端口作了端口映射。NAT方式要求最外圍的網關至少有壹個公網的IP,可以訪問顯IP的外部服務器如: [202.108.22.5]

Trace complete.

3)編程實現

獲取到本機所有的IP地址列表,對IP列表進行分析:

1) 如果列表中只有局域網IP,那麽說明是在內網;

2) 如果列表中有局域網IP,也有公網IP,那麽說明是網關;

3) 如果列表中只有公網IP,那麽說明是獨立IP。

//此處不考慮其它平臺,在inet架構下測試, 輸入的ip為主機字節順序

// 0xa -- "10.0.0.0">>24; 0xc0a8--"192.168.0.0.">>16; 0x2b0--"127.17.0.1">>22

int isInnerIP( uint32_t a_ip )

{

int bValid = -1;

if( (a_ip>>24 == 0xa) || (a_ip>>16 == 0xc0a8) || (a_ip>>22 == 0x2b0) )

{

bValid = 0;

}

return bValid;

}

int isInnerIP( char* a_strip )

{

return 0;

}

IP相關的應用

//獲取到本機所有的IP地址列表,並分別用字符串與整形形式來顯示

int getHostIP() //return int

{

struct sockaddr_in localAddr, destAddr;

struct hostent* h;

char temp[128];

int nRect = gethostname(temp, 128);

printf("ipaddr src3 is: %s/n", temp);

if(nRect !=0)

{

printf("error");

}

h = gethostbyname(temp);

if(h)

{

for(int nAdapter=0; h->h_addr_list[nAdapter]; nAdapter++)

{

memcpy(&destAddr.sin_addr.s_addr, h->h_addr_list[nAdapter], h->h_length);

// 輸出機器的IP地址.

printf("Address string: %s/n", inet_ntoa(destAddr.sin_addr)); // 顯示地址串

printf("Address int: %d/n", destAddr.sin_addr.s_addr); // 轉化為整形數字

}

}

return 0;

}

//檢查字符串IP是否合法

int isCheckTrue(char* strip)

{

int value;

for( int i = 0; i < strlen(strip); i++)

{

// let's check if all entered char in entered

// IP address are digits

if(strip[i] == '.')

continue;

if(isdigit(strip[i]) == 0)

{

return -1;

}

}

return 0;

}

//將字符串IP轉化為整形IP

int str2intIP(char* strip) //return int ip

{

int intIP;

if(!(intIP = inet_addr(strip)))

{

perror("inet_addr failed./n");

return -1;

}

return intIP;

}

  • 上一篇:unf是什麽螺紋
  • 下一篇:數控主要原理是什麽…
  • copyright 2024編程學習大全網