c语言域名校验函数的简单介绍

用C语言编写一个得到域名的IP的程序

输入 域名

衡阳县ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

结果的 4小节整数 存 int d1,d2,d3,d4 变量中。

#include stdio.h

#include stdlib.h

void main()

{

char ym[80]="";

FILE *fp;

char cmd[120];

char nameout[]="tmp_ping.txt"; // 临时文件

char str3[32];

int i,len,d1,d2,d3,d4;

printf("Enter domain address\n");

scanf("%s",ym[0]);

sprintf(cmd,"ping %s -n 1 %s\0",ym,nameout);

system(cmd);

fp = fopen(nameout,"r");

fscanf(fp,"%*s %*s %s",str3[0]);

fclose(fp);

len = strlen(str3);

for (i=0;ilen;i++) if ( str3[i] == '[' || str3[i] == ']'|| str3[i] == '.') str3[i] = ' ';

sscanf(str3, "%d %d %d %d",d1,d2,d3,d4);

printf("ip=%d.%d.%d.%d\n",d1,d2,d3,d4);

sprintf(cmd,"ERASE /F /Q %s\0",nameout); // 删去临时文件

system(cmd);

getchar();

}

程序未考虑错误域名和无IP返回的域名,你可以自己补充几行处理程序。

求一个C语言实现的CRC16/CCITT-FALSE校验码函数

//函数功能:计算CRC16

//参数1:*pData 16位CRC校验数据,

//参数2:nLength 数据流长度

//参数3:init 初始化值

//参数4:ptable 16位CRC查找表

//逆序CRC计算

unsigned short GetRevCrc_16(unsigned char * pData, int nLength,

unsigned short init, const

unsigned short *ptable)

{

unsigned short cRc_16 = init;

unsigned char temp;

while(nLength-- 0)

{

temp = cRc_16 0xFF;

cRc_16 = (cRc_16 8) ^ ptable[(temp ^ *pData++) 0xFF];

}

return cRc_16;

}

//正序CRC计算

unsigned short GetCrc_16(unsigned char * pData, int nLength,

unsigned short init, const

unsigned short *ptable)

{

unsigned short cRc_16 = init;

unsigned char temp;

while(nLength-- 0)

{

temp = cRc_16 8;

cRc_16 = (cRc_16 8) ^ ptable[(temp ^ *pData++) 0xFF];

}

return cRc_16;

}

//Demo -- modbus-crc16测试

unsigned short CRC_GetModbus16(unsigned char *pdata, int len)

{

//MODBUS CRC-16表 8005 逆序

const unsigned short g_McRctable_16[256] =

{

0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,

0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,

0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,

0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,

0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,

0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,

0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,

0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,

0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,

0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,

0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,

0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,

0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,

0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,

0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,

0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,

0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,

0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,

0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,

0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,

0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,

0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,

0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,

0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,

0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,

0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,

0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,

0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,

0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,

0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,

0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,

0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040

};

return GetRevCrc_16(pdata, len, 0xFFFF, g_McRctable_16);

}

用c语言判断网址怎么做呢?

/*

问题地址:

详解:

标准的网址(URL)格式是这样的:

;key2=value2#anchor

其中:

[1] http 是协议类型,同样的还有 ftp 等。【可省略,一般浏览器默认都是 http】

[2] user 是用户名,pass 是密码。【可省略】

[3] myserver 可以是服务器的 ip 或者域名,

如百度的 ip = 220.181.112.143 , 域名是:

【这个不能省略】

[4] port 是端口。【可省略,一般默认都是 80】

[5] myapp1,myapp2 是应用程序目录。【可省略】

index.html 是当前页面【可省略,默认是 index.html,default.html 等】

[6] key1,value1,key2,value2 是传递给网站的参数,【可省略】

[7] anchor 是网页内的锚点

合法的网址举例:

;si=1

判断网址算法:

最简单的当然是正则表达式了。

我们看到标准网址(URL)的 7 个部分,有 6 个分割符号,分别是:

://

@

:

/

?

#

在浏览器里面,只有第 3 部分是必须填写的,也是我们日常写的最多的。

用到的资源文件:

头文件 deelx.h,可以到:下载

下载后放到和源程序同一个目录下即可。

*/

#include stdio.h

#include "deelx.h"

int main(int argc, char * argv[])

{

char text[1000] = ";key2=value2#anchor";

// 判断合法网址的正则表达式

static CRegexpT char regexp

(

"(([:alpha:]+)\\://)?((\\w+)\\:(\\w+)@)?(\\w+(\\.\\w+)*)(\\:(\\d+))?((/\\w+)*(\\.\\w+)?)?(\\?((\\w+=\\w+)*(\\w+=\\w+)))?(#((\\w+)))?)"

);

int i;

printf("输入一个网址:");

while(scanf("%s",text))

{

MatchResult result = regexp.Match(text);

if ( result.IsMatched() )

{

/*

for(i=0;iresult.MaxGroupNumber();i++)

{

printf("%d=%.*s\n", i,result.GetGroupEnd(i) - result.GetGroupStart(i), text + result.GetGroupStart(i));

}

*/

// 解析网址

printf("网址:%.*s\n", result.GetGroupEnd(0) - result.GetGroupStart(0), text + result.GetGroupStart(0));

printf("协议类型:%.*s\n",result.GetGroupEnd(2) - result.GetGroupStart(2), text + result.GetGroupStart(2));

printf("用户名:%.*s\n",result.GetGroupEnd(4) - result.GetGroupStart(4), text + result.GetGroupStart(4));

printf("用户密码:%.*s\n",result.GetGroupEnd(5) - result.GetGroupStart(5), text + result.GetGroupStart(5));

printf("服务器IP或域名:%.*s\n",result.GetGroupEnd(6) - result.GetGroupStart(6), text + result.GetGroupStart(6));

printf("服务器端口:%.*s\n",result.GetGroupEnd(9) - result.GetGroupStart(9), text + result.GetGroupStart(9));

printf("应用程序目录:%.*s\n",result.GetGroupEnd(10) - result.GetGroupStart(10), text + result.GetGroupStart(10));

printf("查询参数:%.*s\n",result.GetGroupEnd(14) - result.GetGroupStart(14), text + result.GetGroupStart(14));

printf("锚:%.*s\n\n",result.GetGroupEnd(18) - result.GetGroupStart(18), text + result.GetGroupStart(18));

}

else

{

printf("\"%s\" 是一个非法的网址!!!\n",text);

}

printf("输入一个网址:");

}

return 0;

}

/*

运行结果:

输入一个网址:;key2=value2#anchor

网址:;key2=value2#anchor

协议类型:http

用户名:user

用户密码:pass

服务器IP或域名:myserver.com

服务器端口:800

应用程序目录:/myapp1/myapp2/index.html

查询参数:key1=value1key2=value2

锚:anchor

*/

C语言中 如何实现域名转换为IP 高分

char cmd[100];

char url[]="";

char tmp_file_name[]="tmp.txt";

FILE *fp;

sprintf(cmd,"nslookup %s %s",url,tmp_file_name);

system(cmd);

if ( (fp=fopen(tmp_file_name,"r"))==NULL ){

printf("can not open %s\n",tmp_file_name);

exit(0);

}

// 然后按行读。跳过前两行。找后面的行。

// 如果某行第一个字符串是Addresses:

// 第二个字符串就是 IP

tmp.txt:

Server: aaaaaaaaaa

Address: nnn.nnn.nnn.nnn

Non-authoritative answer:

Name:

Addresses: 119.75.213.61, 119.75.216.30

Aliases:

C语言编程,给定一个Email地址,判断其是否合法

#includestdio.h

#includestring.h

int FormatCheck(char *);

char * SplitByAt(char * ,int);

char * CharsCheck(char *);

#define N 1024

int main()

{

char str[N],*field;

memset(str,0x00,N);

scanf("%s",str);

field=SplitByAt(str,N);

if(field==NULL)

{

printf("NO\n");

return -1;

}

else if(FormatCheck(str)FormatCheck(field))

{

printf("YES\n");

return 0;

}

else

{

printf("NO\n");

return -1;

}

}

/**

*校验域名/邮箱格式

*/

int FormatCheck(char *str)

{

char *p;

for(;;)

{

p=CharsCheck(str);

if(p==str)

{

return 0;

}

else if(*p=='\0')

{

return 1;

}

else if(*p!='.')

{

return 0;

}

p++;

str=p;

}

}       

/**

*校验是否可用@分割为两段,返回域名首地址,不合要求返回NULL

*参数:str,源字符串,length,长度限制(防越界)

*函数会用'\0'代替源字符串第一个'@',已完成邮箱,域名分割.

*/

char *SplitByAt(char *str,int length)

{

char *p=strchr(str,'@');

if(p!=NULL(p-str)length)

{

*p=0;

p++;

return p;

}

return NULL;

}

/**

*校验str是否为连续的'a'-'z','A'-'Z','0'-'9'字符

*返回值:第一个不合要求的字符所处位置

*例如:str="abc",返回str+3; str="a#bc",返回str+1;

*/

char * CharsCheck(char *str)

{

while((*str='a'*str='z')||

(*str='A'*str='Z')||

(*str='0'*str='9')||

*str=='_')

{

str++;

}

return str;

}

要求没有提'_'符号的特殊规则, 所以"__.__@_"这样的email也是能校验过的.


分享文章:c语言域名校验函数的简单介绍
新闻来源:http://scyanting.com/article/dssjgod.html