#!/bin/sh
BASEDIR=~/shell
url_config="ip.conf"
http_host="http://www.sooip.cn/"
curl_timeout=15
one_url_file="allurl.txt"
ip_url_file="ip_url_file"
save_tmps_path="tmps"
ip_fenge_path="ip_path"
fenge_line=4000
ip_files_tmp="ip_files_tmp"
ip_files_contnet="ip_files_contnet"
#验证内容是否存在于传入的文件里.
#$1 需要查询的内容
#$2 文本文件
function verify_exist(){
cat $2 | grep -q "$1";
if [ $? -eq 0 ];
then
return 1;
else
return 0;
fi;
}
#处理代理ip网站所有的url,保存到一个临时文件里
function handle_url_one(){
i=2;
while [ 1 ];
do
if [ $i==2 ];
then
curl_http_url=${http_host}$1/;
one_url=$curl_http_url""index.html;
verify_exist $one_url $one_url_file
if [ $? -eq 0 ];
then
echo $one_url >> $one_url_file;
fi;
fi;
one_url_other=$curl_http_url""index_$i.html;
url_result=`curl -s $one_url_other`;
#对循环的url做判断,如果发现内容包含404就跳出该循环,进入下个模块的查询
echo "$url_result" | grep -q "404 Not Found";
if [ $? -eq 0 ];
then
break;
fi;
#对需要处理的url进行查询,如果存在临时文件内,就放弃处理
verify_exist $one_url_other $one_url_file;
if [ $? -eq 0 ];
then
#如果判断不存在,就写入到临时文件内
echo $one_url_other >> $one_url_file;
fi;
i=`expr $i + 1`;
done;
}
#处理上个函数解析出来的url,这里处理的url是包含有IP地址的url
#$1 需要处理的url
function handle_url_two(){
tmp=`echo "$1" | awk -F '/' '{print $NF}'` #对url做处理,得到最后一个值.
find_tmp=`echo "$1" | awk -F '/' '{size=NF-1}{print $size}'` #还是对url做处理.得到该url属于那个模块下
page_content=$save_tmps_path"/"$find_tmp"_"$tmp #拼接临时文件的存放的位置
curl -s --connect-timeout $curl_timeout $1 | iconv -f gb2312 -t utf-8 > $page_content #iconv -f gb2312 -t utf-8 用这个处理抓取的网页因为是gb2312的所以需要做下字符转换.把抓取的文件保存在临时文件内.
awk '{if($0~/'$find_tmp'/) {print $0}}' $page_content | awk -F '[<>]' '{for(i=1;i<NF;i++)if($i~/'$find_tmp'/) { print $i} }' | awk -F '["""]' '{if(NF>3 && $2~/'$find_tmp'/){print $2}}' >> "two_url_tmp" #通过3次的awk处理.从上面抓取的url文件里,获得保存ip地址的网址
}
function handle_url_three(){
ip_url_all_path=$http_host$1
page_content="html_file_tmp"
curl -s --connect-timeout $curl_timeout $ip_url_all_path | iconv -f gb2312 -t utf-8 > $page_content #iconv -f gb2312 -t utf-8 用这个处理抓取的网页因为是gb2312的所以需要做下字符转换.把抓取的文件保存在临时文件内.
cat $page_content | grep '[0-9]\{3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | awk -F ' ' '{ for(i=1;i<NF;i++) if($i~/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ && $i+1~/[0-9]/) {print $i,$(i+1)}}' >> $ip_files_tmp
}
#处理第一层的url
for i in `cat $url_config`
do
echo $i;
#handle_url_one $i
done
#判断存放临时文件的文件夹是否存在,不存在则创建,并且对权限做控制
if [ ! -d $save_tmps_path ]; then
mkdir -m 770 $save_tmps_path
fi
if [ ! -f $ip_url_file ];then
#处理二级url
for i in `cat $one_url_file`
do
handle_url_two $i
sleep 1;
done
sort -n "two_url_tmp" | uniq > $ip_url_file
rm -rf "two_url_tmp" $save_tmps_path
fi
if [ ! -f $ip_files_tmp ]
then
for i in `cat $ip_url_file`
do
handle_url_three $i
done
fi
if [ ! -d $ip_fenge_path ]; then
mkdir -m 770 $ip_fenge_path
fi
sort -n $ip_files_tmp | uniq > $ip_files_contnet
split -l $fenge_line $ip_files_contnet $ip_fenge_path"/"
ls $ip_fenge_path | while read line
do
$BASEDIR/pingip.sh $line >> /dev/null &
done
文件2
pingip.sh
#!/bin/sh
ip_fenge_path="ip_path"
files=$ip_fenge_path"/"$1
cat $files | while read line
do
nc -z -w 1 -u $line > /dev/null 2>&1
if [ $? -eq 0 ];
then
echo $line | sed -e 's/\ /:/' >> "ok_ip"
fi
done
ip.conf
izuixindaili
QQdailiIP
guoneidaili
guowaidaili
youxidaili
socksdaili
diqudaili
dailiziyuan
dailizhuanlan
抓取 网站 代理 ip
最新推荐文章于 2024-09-11 10:05:56 发布