原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。
http://scalpel00.blog.51cto.com/1071749/347971
很早写的一个,通过希网获取公网ip的程序片段,今天重新写了一遍
#include <stdio.h>
#include <sys/socket.h>
#include <
string.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/
in.h>
#include <errno.h>
int port =80;
#define BUF_SIZE 200
int is_valid_addr( const char *str)
{
struct in_addr addr;
int ret;
ret = inet_pton(AF_INET, str, &addr);
return ret;
}
int main()
{
struct sockaddr_in pin;
struct hostent *nlp_host;
int sd=0;
int len=0;
int i,count=0;
int recv_start=0,recv_end=0;
char buf[BUF_SIZE]={0};
char host[20]=
"www.3322.org";
char header[240]={0};
char *pHost = 0;
char buffer[200]={0};
int ret;
//setting socket param
if((nlp_host = gethostbyname(host)) == 0)
{
printf(
"error get host\n");
exit(1);
}
bzero(&pin,
sizeof(pin));
pin.sin_family = AF_INET;
pin.sin_addr.s_addr = htonl(INADDR_ANY);
pin.sin_addr.s_addr = ((
struct in_addr *)(nlp_host->h_addr))->s_addr;
pin.sin_port = htons(port);
if((sd = socket(AF_INET,SOCK_STREAM,0))== -1)
{
printf(
"Error opening socket!!!\n");
exit(1);
}
//together the info that will be sent to web server
strcat(header,
"GET");
strcat(header,
" ");
strcat(header,
"/dyndns/getip");
strcat(header,
" ");
strcat(header,
"HTTP/1.1\r\n");
strcat(header,
"HOST:");
strcat(header,host);
strcat(header,
"\r\n");
strcat(header,
"ACCEPT:*/*");
strcat(header,
"\r\nConnection: close\r\n\r\n\r\n");
//connect to the webserver,send the header,and receive the web sourcecode
if(connect(sd,(
void *)&pin,
sizeof(pin)) == -1)
exit(1);
if(send(sd,header,strlen(header),0) == -1)
exit(1);
len=recv(sd,buf,BUF_SIZE,0);
if(len<0)
exit(1);
else
{
for(i=0;i<len;i++)
{
if(buf[i]=='\n')
{
count+=1;
if(count==7)
{
recv_start=i+1;
}
if(count==8)
{
recv_end=i-2;
break;
}
}
}
snprintf(buffer,recv_end-recv_start+2,buf+recv_start);
ret = is_valid_addr(buffer);
if(ret <= 0)
{
printf(
"is not valid ip\n");
return -1;
}











int is_valid_addr( const char *str)




ret = inet_pton(AF_INET, str, &addr);

















































































}
close(sd);
return 0;
}



本文出自 “Scalpel00” 博客,请务必保留此出处http://scalpel00.blog.51cto.com/1071749/347971