环境:Linux 5.4
整体思路是这样的
1、下载导航网站的首页,命名为hao.htm
2、通过shell脚本过滤出hao.htm中涉及到的各种网址
3、通过c语言编程,得到这些网址所对应的IP地址,然后把域名和IP地址一块存入数据库中。
第一步、获取网页。
这一步使用工具curl来完成。如果系统中默认没有安装curl,可以参考下面地址中的教程。
为了更方便的操作,单独创建一个目录
mkdir /test/ 以后的操作都是在test下面进行
输入:
curl -o hao.htm
下载网页完成。
第二步、使用sed 和 awk获取文件中的网址
cat hao.htm |sh awk.sh |sed -e 's/[^a-z0-9.]*//g'|sort -u >addr_list.txt
其中awk是一个脚本,内容如下:
awk '
BEGIN {
FS="[/ \"]"
NS=">"
}
$0~/href/ {
for(i=1;i<=NF;i++)
{
if(match($i,/com$/) || match($i,'/^www/') || match($i,/cn$/))
{
if(match($i,/\./) && (length($i) < 20)) //默认一般的网址都在20个字节内
{
print $i;
}
}
}
}
'
$*
经过这一步的处理,网址已经保存在了addr_list.txt文件中。
第三步,通过c编程,把addr_list.txt文件中的网址转换为IP地址,并且与该网址一块保存到Mysql数据库中。
c程序代码如下:
名称:insert.c
内容:
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX_LINE 100
#define FILE_PATH "/temp"
extern int Connect_Mysql(MYSQL *m_mysql);
int main(int argc ,char* argv[])
{
MYSQL m_mysql;
char filename[40];
char sql[100];
char line[MAX_LINE];
int len = 0;
FILE * pf;
char ** paddr;
struct hostent * phost;
memset(filename,0,40);
printf("filename:%s\n",argv[1]);
sprintf(filename,"%s/%s",FILE_PATH,argv[1]);
pf = fopen(filename,"r");
if(pf == NULL)
{
printf("failed to read web list file\n");
return -1;
}
if(1 != Connect_Mysql(&m_mysql))
{
printf("failed to connect to mysql\n");
return -1;
}
while(fgets(line,MAX_LINE,pf) != NULL)
{
memset(sql,0,100);
len = strlen(line);
line[len-1] = '\0';
phost = gethostbyname(line);
if(phost == NULL)
{
printf("host name :%s\n",line);
perror("get Host Name Error\n");
continue;
}
paddr = phost->h_addr_list;
while(*paddr)
{
sprintf(sql,"insert into web_list(web_name,ip) values('%s','%s')",line,inet_ntoa(*((struct in_addr *)*paddr++)));
if(0 != mysql_real_query(&m_mysql,sql,strlen(sql)))
{
printf("failed to insert data \n");
printf("query = %s\n",sql);
//return -1;
}
printf("%s\n",sql);
}
paddr = NULL;
}
fclose(pf);
mysql_close(&m_mysql);
return 1;
}
最后,把所有的步骤,整合到一个脚本中,得到下面的脚本:
名称:getAddr.sh
参数:参数为要获取网址的网页地址,如:
内容:
#!/bin/bash
if [ $# -lt 1 ];then
echo "$#"
echo "usage :$0 para"
exit
fi
curl -o temp $1
cat temp |sh awk.sh |sed -e 's/[^a-z0-9.]*//g'|sort -u >addr_list.txt
./insert addr_list.txt
阅读(4122) | 评论(0) | 转发(0) |