发布:2023/1/5 14:08:27作者:管理员 来源:本站 浏览次数:543
//题目。现在有个白名单ip文本文件,文件中每个ip以;(冒号)分开,在程序的文本框中输入网站上的ip,判断该ip是白名单ip还是蜘蛛,程序是win Form应用
//使用nslookup ip命令反解ip来 判断是否来自Baiduspider的抓取。打开命令处理器 输入nslookup xxx.xxx.xxx.xxx(IP地 址)就能解析ip, 来判断是否来自Baiduspider的抓取,Baiduspider的hostname以*.baidu.com 或*.baidu.jp 的格式命名,非 *.baidu.com 或 *.baidu.jp 即为冒充。谷歌的判断方法一样
//相关网站
//【官方说法】只需两步,正确识别百度蜘蛛 https://ziyuan.baidu.com/college/articleinfo?id=1002
//其他网站说明
http://www.clownseo.com/seojsfx/154.html
//判断ip的网站程序
http://ip.tongmengguo.com/?ip=192.168.1.115
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace IpBlacklist
{
public partial class ExamineIPForm : Form
{
public ExamineIPForm()
{
InitializeComponent();
}
static List<string> whiteTextIp = new List<string>();
private void Form1_Load(object sender, EventArgs e)
{
labelText.Text = "请在文本框中输入ip,每个ip以;(小写分号)隔开,然后点击检查按钮,最后点击黑名单按钮选取黑名单ip。";
}
//点击检测按钮
private void button1_Click(object sender, EventArgs e)
{
//文本框Ip
string richTextBoxIpTextText = richTextBoxExamineTextIP.Text;
string[] textIpn = richTextBoxIpTextText.Split(';');
List<string> textIp = new List<string>();
foreach (string s in textIpn)
{
textIp.Add(s.Replace("\n", null));
}
textIp.Remove("");
if (textIp.Count != 0)
{
buttonClick(textIp);
}
else
{
MessageBox.Show("请输入IP!");
}
}
private void buttonClick(List<string> textIp)
{
whiteTextIp = new List<string>();
labelText.Text = "检查中...";
//取得文件ip
string[] dbIpList = WhiteTxt();
int textIpCount;
textIpCount = textIp.Count;
if (textIp[0] == "" || textIp[0] ==
null)
{
textIpCount = 0;
}
//从文本框中找出白名单ip
List<string> whiteTextList = new List<string>();
for (int i=0;i< textIpCount; i++)
{
foreach (string dbIp in dbIpList)
{
//文本框ip与文件ip对比
if (textIp[i]== dbIp)
{
//保存白名单ip
whiteTextList.Add(textIp[i]);
}
}
}
//在全部文本框ip中剔除白名单ip,保存黑名单ip
whiteTextIp.AddRange(textIp);
for (int tIp=0 ;tIp<textIp.Count;tIp++)
{
foreach (string wIp in whiteTextList)
{
if (textIp[tIp]== wIp)
{
whiteTextIp.RemoveAll(r => r == wIp);
}
}
}
//百度蜘蛛ip
List<string> baiduspiderIp=new List<string>();
if (whiteTextIp.Count!=0)
{
List<string> dosCommand =new List<string>(whiteTextIp);
baiduspiderIp = Baiduspider(dosCommand);
}
labelText.Text = "检查完成,共输入了"+ textIpCount + "个Ip,其中蜘蛛"+ baiduspiderIp.Count+"个,白名单"+ whiteTextList.Count+"个,黑名单"+ whiteTextIp.Count + "个。";
}
private void button1_Click_1(object sender, EventArgs e)
{
White white = new White();
white.Show();
foreach (string whiteIp in whiteTextIp)
{
white.richTextBoxTextIp.Text += whiteIp+";\n";
}
}
/// <summary>
/// 是否是百度或谷歌的蜘蛛ip
/// </summary>
/// <returns></returns>
public static List<string> Baiduspider(List<string> dosCommand)
{
// string dosCommand = "nslookup 123.125.71.10";
Process p = new Process(); //创建进程对象
p.StartInfo.FileName = "cmd.exe"; //设定需要执行的命令
p.StartInfo.UseShellExecute = false; //不使用系统外壳程序启动
p.StartInfo.RedirectStandardInput = true; //重定向输入
p.StartInfo.RedirectStandardOutput = true; //重定向输出
p.StartInfo.RedirectStandardError = true; //重定向错误
p.StartInfo.CreateNoWindow = true; //不创建窗口
//p.StartInfo.Arguments = "/c" + dosCommand; //设定参数,其中的“/C”表示执行完命令后马上退出
string output;
List<string> baiduspiderIp = new List<string>();
foreach (string s in dosCommand)
{
p.StartInfo.Arguments = "/c nslookup " + s;
p.Start();
output = p.StandardOutput.ReadToEnd(); //读取进程的输出
if (output.Contains("baiduspider")|| output.Contains("googlebot.com"))
{
baiduspiderIp.Add(s);
whiteTextIp.Remove(s);
}
}
//p.WaitForExit(2000);
p.Close();
return baiduspiderIp;
}
public static string[] WhiteTxt()
{
string textUrl= Directory.GetCurrentDirectory();
string[] strs1 = File.ReadAllLines(textUrl+"\\WhiteTxt.txt");
return strs1;
}
private void button2_Click(object sender, EventArgs e)
{
richTextBoxExamineTextIP.Text = null;
labelText.Text = "请在文本框中输入ip,每个ip以;(小写分号)隔开,然后点击检查按钮,最后点击黑名单按钮选取黑名单ip。";
}
}
}
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4