using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Text.RegularExpressions; using System.Web; using System.IO; using System.Threading; using System.Diagnostics; namespace TrackBack { public partial class Form1 : Form { public Form1() { InitializeComponent(); } int intSuccessful = 0; int seconds = 0; int intAll = 0; int fail = 0; int scraped = 0; string[] trackbackRegex = { "trackback:ping=\"(?.*?)\"", "[^\"]+)\" rel=\"trackback\">", "Trackback URI:.(?http:.*?)<", "[^\"]+)\">Trackback [^\"]+)\" title=\"Trackback URI\">", "\"(?http[^\"]*wp-trackback.php[^\"]*)\"/", "\"(?http[^\"]*/trackback/[^\"]*)\"/", "(?http.*action=Trackback.*)", ">(?[^<]*trackback.php[^<]*)<", "href=\"(?[^\"]+)\" onclick=\"opentrackback", "\"(?http[^\"]+mt-tb.cgi[^\"]*)\"", "(?http://spaces.msn.com[^\']+.trak)", "/\'(?http://spaces.msn.com[^\']+trackback)", "[^\"]+)\">trackback uri.?" }; Random RandomClass = new Random(); string[] predefinedKeywords = { "\"powered by moveable type\"", "\"powered by drupal\"", "\"powered by joomla\"", "\"powered by typepad\"", "\"powered by wordpress\"", "\"powered by qumana\"", "\"published with textpattern\"" }; public void ReadFile(string filename) { StreamReader file; file = File.OpenText(filename); int max, ports; ThreadPool.GetMaxThreads(out max, out ports); ThreadPool.SetMaxThreads(Convert.ToInt32(txtThreadCount.Text), ports); ThreadPool.GetMinThreads(out max, out ports); ThreadPool.SetMinThreads(30, ports); List urlArray = new List(); List randomizedUrlsArray = new List(); int i = 0; Random RandomClass3 = new Random(); while (!file.EndOfStream) { string url = file.ReadLine().Trim(); urlArray.Add(url); } int s = 0; while ( s.*?)\"", RegexOptions.Compiled); responseStream.Close(); myRes.Close(); try { MatchCollection matches = r.Matches(response, 0); foreach (Match match in matches) { StreamWriter SW = File.AppendText(txtLog2.Text); SW.WriteLine(match.Groups["urls"].Value); SW.Close(); scraped += 1; } } catch { return; } } public void ScrapeYahoo(string wholeKeyword) { HttpWebRequest myReq; try { myReq = (HttpWebRequest)WebRequest.Create("http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=" + RandomClass.Next(0,100000).ToString() + "&results=100&query=" + wholeKeyword); } catch { return; } myReq.UserAgent = "Mozilla FireFox"; WebResponse myRes ; try { myRes = myReq.GetResponse(); } catch {return;}; StreamReader responseStream = new StreamReader(myRes.GetResponseStream(), System.Text.Encoding.GetEncoding(1252)); string response; try { response = responseStream.ReadToEnd(); } catch { return; } Regex r = new Regex("(?.*?)", RegexOptions.Compiled); responseStream.Close(); myRes.Close(); try { MatchCollection matches = r.Matches(response, 0); foreach (Match match in matches) { StreamWriter SW = File.AppendText(txtLog2.Text); SW.WriteLine(match.Groups["urls"].Value); SW.Close(); scraped += 1; } } catch { return; } } public void ScrapeMsn(string wholeKeyword) { HttpWebRequest myReq; try { myReq = (HttpWebRequest)WebRequest.Create("http://search.msn.com/results.aspx?format=rss&FORM=R0RE&q=" + wholeKeyword ); } catch { return; } myReq.UserAgent = "Mozilla FireFox"; WebResponse myRes; try { myRes = myReq.GetResponse(); } catch { return; } StreamReader responseStream = new StreamReader(myRes.GetResponseStream(), System.Text.Encoding.GetEncoding(1252)); string response; try { response = responseStream.ReadToEnd(); } catch { return; } Regex r = new Regex("(?.*?)", RegexOptions.Compiled); responseStream.Close(); myRes.Close(); try { MatchCollection matches = r.Matches(response, 0); foreach (Match match in matches) { StreamWriter SW = File.AppendText(txtLog2.Text); SW.WriteLine(match.Groups["urls"].Value); SW.Close(); scraped += 1; } } catch { return; } } public void ScrapeSE(string keyword) { foreach (string preKeyword in predefinedKeywords) { string wholeKey = encode(preKeyword + " " + keyword); string gWholeKey,mWholeKey; int s = 0; int f = 1; while (s < 1000) { gWholeKey = wholeKey + "&start=" + s; WaitCallback callback = delegate(object state) { ScrapeGoogle((string)state); }; ThreadPool.QueueUserWorkItem(callback, gWholeKey); WaitCallback callback2 = delegate(object state) { ScrapeYahoo((string)state); }; ThreadPool.QueueUserWorkItem(callback2, gWholeKey); s = s + 100; } while (f < 1000) { mWholeKey = wholeKey + "&first=" + f; WaitCallback callback3 = delegate(object state) { ScrapeMsn((string)state); }; ThreadPool.QueueUserWorkItem(callback3, mWholeKey); f = f + 10; } } } public void SendTrackback(string trackbackUri) { StringBuilder sb = new StringBuilder(); sb.Append("url="); sb.Append(encode(txtUrl.Text)); sb.Append("&"); sb.Append("title="); sb.Append(encode(txtTitle.Text)); sb.Append("&"); sb.Append("exerpt="); sb.Append(encode(txtSnippet.Text)); sb.Append("&"); sb.Append("blog_name="); sb.Append(encode(txtBlogName.Text)); sb.Append("&"); HttpWebRequest httpRequest; try { httpRequest = (HttpWebRequest)WebRequest.Create(trackbackUri); } catch { return; } httpRequest.ContentType = "application/x-www-form-urlencoded"; httpRequest.Method = "POST"; byte[] postByteArray = Encoding.ASCII.GetBytes(sb.ToString()); httpRequest.ContentLength = postByteArray.Length; Stream stream; try { stream = httpRequest.GetRequestStream(); } catch { return; } stream.Write(postByteArray, 0, postByteArray.Length); stream.Close(); HttpWebResponse httpResponse = null; try { httpResponse = (HttpWebResponse)httpRequest.GetResponse(); } catch { return; } StreamReader responseStream = new StreamReader(httpResponse.GetResponseStream(), System.Text.Encoding.GetEncoding(1252)); string response; try { response = responseStream.ReadToEnd(); } catch { return; } responseStream.Close(); httpResponse.Close(); Regex rSuccess = new Regex(@"(?.*?)", RegexOptions.Compiled); string returnstuff = ""; try { returnstuff = rSuccess.Match(response).Result("${value}"); if (returnstuff == "0") { StreamWriter SW = File.AppendText(txtLogAddress.Text); SW.WriteLine(trackbackUri); SW.Close(); intSuccessful += 1; } else { fail += 1; } } catch { fail += 1; } intAll += 1; } public void GutTrackBackUri(string uri) { HttpWebRequest myReq; try { myReq = (HttpWebRequest)WebRequest.Create(uri); } catch { return; } myReq.UserAgent = "Mozilla FireFox"; WebResponse myRes; try { myRes = myReq.GetResponse(); } catch { return; }; StreamReader responseStream = new StreamReader(myRes.GetResponseStream(), System.Text.Encoding.GetEncoding(1252)); string response; try { response = responseStream.ReadToEnd(); } catch { return; } responseStream.Close(); myRes.Close(); foreach (string regex in trackbackRegex) { Regex r = new Regex(regex, RegexOptions.Compiled); try { MatchCollection matches = r.Matches(response, 0); foreach (Match match in matches) { //MessageBox.Show(match.Groups["trackback"].Value); StreamWriter SW = File.AppendText("log2.txt"); SW.WriteLine(match.Groups["trackback"].Value); SW.Close(); } } catch { } } } public string encode(string input) { string newValue = input.Replace("\"", "'"); newValue = System.Web.HttpUtility.UrlEncode(newValue); newValue = newValue.Replace("%2f", "/"); return newValue; } private void button1_Click(object sender, EventArgs e) { if ((txtThreadCount.Text != "") && (txtLogAddress.Text != "") && (txtSnippet.Text != "") && (txtTitle.Text != "") && (txtUrl.Text != "") && (txtBlogName.Text != "") && (txtAddress.Text != "")) { ThreadStart starter = delegate { ReadFile(txtAddress.Text); }; new Thread(starter).Start(); } else { MessageBox.Show("Please fill in all the boxes d00d :D "); } } public void button2_Click(object sender, EventArgs e) { openFileDialog1.ShowDialog(); txtLogAddress.Text = openFileDialog1.FileName; } private void timer1_Tick(object sender, EventArgs e) { label10.Text = intSuccessful.ToString() + " Successful Posts"; label12.Text = fail.ToString() + " Failed Posts"; seconds += 1; double successfullSpeed = intSuccessful / seconds; label11.Text = " Speed of Successful Trackbacks: " + successfullSpeed.ToString() + " trackbacks / second"; double overallSpeed = intAll / seconds; label13.Text = " Speed of Overall Trackbacks: " + overallSpeed.ToString() + " trackbacks / second"; label15.Text = scraped + " links scraped off Google, Yahoo! and MSN "; } private void button3_Click(object sender, EventArgs e) { openFileDialog1.ShowDialog(); txtAddress.Text = openFileDialog1.FileName; } private void button5_Click(object sender, EventArgs e) { openFileDialog2.ShowDialog(); txtLog2.Text = openFileDialog2.FileName; } private void button4_Click(object sender, EventArgs e) { if ((txtKeywords.Text != "") && (txtLog2.Text != "") && (txtThreadCount1.Text != "")) { int max, ports; ThreadPool.GetMaxThreads(out max, out ports); ThreadPool.SetMaxThreads(Convert.ToInt32(txtThreadCount1.Text), ports); ThreadPool.GetMinThreads(out max, out ports); ThreadPool.SetMinThreads(30, ports); ThreadStart starter = delegate { ReadFile2(txtKeywords.Text); }; new Thread(starter).Start(); } else { MessageBox.Show("Please fill in all the boxes d00d :D "); } } private void button7_Click(object sender, EventArgs e) { openFileDialog3.ShowDialog(); txtToSpam.Text = openFileDialog3.FileName; } private void button6_Click(object sender, EventArgs e) { if (txtToSpam.Text != "") { ThreadStart starter = delegate { ReadFile3(txtToSpam.Text); }; new Thread(starter).Start(); } } private void tabPage2_Click(object sender, EventArgs e) { } private void label11_Click(object sender, EventArgs e) { } private void button8_Click(object sender, EventArgs e) { openFileDialog4.ShowDialog(); txtKeywords.Text = openFileDialog4.FileName; } private void txtThreadCount1_TextChanged(object sender, EventArgs e) { } } }