csatblogspotdotcom

Tuesday, March 29, 2016

VMware Workstation环境下Ubuntu磁盘性能

hostOS为win7 64,安装VMware Workstation,guestOS为Ubuntu 14.04 64,除了默认磁盘外,还挂载了hostOS的同一物理磁盘(所有分区均为NTFS)下的一个分区,平时使用时,根据经验反而是虚拟机原有虚拟磁盘性能优于虚拟机挂载的裸磁盘。由于准备在虚拟机中安装数据库,于是仔细比较了一下双方性能,运行hdparm,显示双方读性能几乎一致,裸磁盘稍稍逊一筹;使用dd测试读取性能,双方差不多;使用dd测试写性能,虚拟磁盘性能优于裸磁盘,但加上参数oflag=dsync(使dd操作接近数据库写操作)后,虚拟磁盘性能非常差,而裸磁盘保持,所以结果反而是裸磁盘性能比虚拟磁盘性能好很多。针对即将安装的数据库,最终选择挂载裸磁盘。

Labels: , , ,

Monday, March 28, 2016

Python urllib2使用POST还是GET

参考:https://docs.python.org/2/library/urllib2.html 如下 节选片段1: class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable]) This class is an abstraction of a URL request. url should be a string containing a valid URL. data may be a string specifying additional data to send to the server, or None if no such data is needed. Currently HTTP requests are the only ones that use data; the HTTP request will be a POST instead of a GET when the data parameter is provided. data should be a buffer in the standard application/x-www-form-urlencoded format. The urllib.urlencode() function takes a mapping or sequence of 2-tuples and returns a string in this format. 节选片段2: HTTPRedirectHandler.redirect_request(req, fp, code, msg, hdrs, newurl) Return a Request or None in response to a redirect. This is called by the default implementations of the http_error_30*() methods when a redirection is received from the server. If a redirection should take place, return a new Request to allow http_error_30*() to perform the redirect to newurl. Otherwise, raise HTTPError if no other handler should try to handle this URL, or return None if you can’t but another handler might. Note The default implementation of this method does not strictly follow RFC 2616, which says that 301 and 302 responses to POST requests must not be automatically redirected without confirmation by the user. In reality, browsers do allow automatic redirection of these responses, changing the POST to a GET, and the default implementation reproduces this behavior. 节选片段3: 20.6.1. Request Objects ... Request.has_data() Return whether the instance has a non-None data. 使用Python urllib2库中的函数,模拟浏览器访问目标网址,用的是POST还是GET?需要看提交请求时是否包含了postdata参数,如果包含了data,则是POST,如果没有,则是GET,而且如果重定向之后,默认转换为GET方式;另外,可以使用req.has_data()函数判断是否包含data参数

Labels: , , , ,

Sunday, March 27, 2016

cFosSpeed

Windows客户端可使用cFosSpeed对网络传输进行优化,原理是QoS,使某些TCP应用的ack优先,或者直接优先某些应用的数据包,这样Windows上bt或者迅雷下载的时候不影响网页浏览; Linux上暂未找到对应的图形界面工具,但Linux内核自带QoS功能,使用命令行一样可以达到类似效果

Labels: , , ,

Sunday, March 6, 2016

Firefox如何禁用/启用JavaScript

旧版本的Firefox在设置里面可以有禁用JavaScript的选项,但现在新版本的Firefox设置里面找不到了,怎么办?“about:config”,Firefox所有的设置全在里面,其中就有JavaScript的开关,找到“javascript.enabled”,默认是true,双击变为false即禁用JavaScript,试了下诸多页面果然无法正常使用

Labels: ,

关于session/sessionid/jsessionid/cookie

对于http协议,server和client之间产生一次回话,就是一个session,服务端会在内存记录并给出一个ID来标记这次session:session id,如果服务端为tomcat,java类型的http server,则这个session id的名字就是JSESSIONID,并把这个ID传给client,客户端除了记下这个ID外,也会记录一些相关信息,client现在常用的一种方式是使用一个文件记录下来,并将这些client得到的信息的集合成为cookie。session/cookie一般有时限,超过时限就失效了,而且同一网站也可能有不同cookie,例如http://www.baidu.com和https://www.baidu.com有着不同的cookie; 在对某网站测试时发现,登录后给一个JSESSIONID,接下来client和server继续交互,server给出一个LtpaToken,再继续交互,得到一个sid,这些过程全是自动完成的,而且是利用js完成的(因为禁用js后点击登录根本没反应),之后输入关键字查询,或者访问网站里的其他页面,使用的是 LtpaToken + sid

Labels: , ,

使用wireshark跟踪并分析http交互过程的技巧

使用wireshark查看跟踪http交互过程有一些小技巧 1. 在筛选栏(类似浏览器地址栏的位置)输入http可以得到http协议的结果,如果要在一个pcap文件的大量记录里面查找关键字,例如查找http协议会话里出现的JSESSIONID,怎么办?在筛选栏输入http contains "JSESSIONID"回车即可; 2. 右键选中想要查看的行,追踪流-TCP流,可以看到一个交互的TCP流,其中粉红底红字的是client向server提交的数据(本人在客户端网络跟踪所得的结果),淡蓝底蓝字是server的回应,一个TCP流含有一个或多个“请求-响应”,这些请求里面有请求HTML页面的,txt的,图片的,也有请求css、js脚本的,服务器也会回复相关请求。 3. 在一个请求里面,首先就是一个GET或者POST,表明了该请求使用的方法,接着就是所需的东西(包含相对路径),下面一行是host的地址,即服务器的网址,再下面一行是客户端信息user-agent:浏览器型号、内核、系统内核版本等,接下来语言、编码、referer(从哪里定向而来)、连接信息等;如果是POST,在前面这几行后面空一行,接下来是形如:关键字名1=关键字值1&关键字名2=关键字值2&...且此字符串也已经urlencode过,这个就是post的内容,和get方法直接在url里面加的内容一样,只不过get在url和这个串之间加了个“?”; 4. 在server的响应里面,第一行就是HTTP版本、状态,例如“HTTP/1.1 200 OK”:使用http的1.1协议版本,状态200表明OK,下一行显示server的信息,例如:“Server: Apache-Coyote/1.1”,再下面一行显示接受的单位,如“Accept-Ranges: bytes”,经过几行信息后,后面就是client所请求css/图片/js脚本等的内容; 5. 而利用这些信息,可以使用程序模拟client(例如Python的urllib2、urllib、httplib、requests库等)与server进行交互; 6. 浏览器会保存网页的缓存以及会话的状态(cookies),访问曾经访问过的网站,可能跟踪不到所有信息,因为有一些内容是从缓存里读取的,而在浏览器里清空缓存并删除cookies后,抓包结果就能看到所有交互了;

Labels: , ,

Saturday, March 5, 2016

使用Python urllib2进行http协议的post与get

Python的urllib2(类似urllib、httplib,还有非官方的requests库)可与http server交互,可以模拟http client,向server提交数据可使用两种方式:post和get,其中get方式是在url里面加入参数,参数前面使用问号(?)作为分隔符,参数之间使用与符号(&)作为分隔符,参数名与参数值之间使用等号(=)作为分隔符;另一种方式post的参数不在url里面,不会被显示出来,而是单独的参数。 这里面可能会遇到一个问题,使用post方式访问,如果被访问页面进行了重定向的时候,Python会自动将post方式更改为get方式,解决方法是指定method为post(例如:method = "POST",request.get_method = lambda: method),或者直接向重定向后的页面提交数据(例如http://myserver/post_service被定向到http://myserver/post_service/,后者多了一个斜线“/”那么直接访问后者) 另外,urllib2等库并不支持JavaScript,如需支持JavaScript则可使用Selenium 参考: https://docs.python.org/2/howto/urllib2.html http://bugs.python.org/issue1401 http://stackoverflow.com/questions/6348499/making-a-post-call-instead-of-get-using-urllib2 http://stackoverflow.com/questions/3238925/python-urllib-urllib2-post https://docs.python.org/2/library/urllib2.html http://stackoverflow.com/questions/8960288/get-page-generated-with-javascript-in-python http://stackoverflow.com/questions/20622870/using-urllib2-to-execute-url-and-return-rendered-html-output-not-the-html-itsel

Labels: , , ,

Friday, March 4, 2016

发送邮件如何绕开邮件系统过滤策略

国内两会期间,公司邮件系统增强了过滤策略,不少邮件发送不出去,提示“您之前发送的邮件触发了公司审计关键字防护策略”等,于是使用QQ邮箱代发公司邮箱,成功发送,且超送至公司邮箱能成功接收;另外,将附件(经报障得知邮件包含**关键字,仔细查看是在excel附件中出现**)进行压缩后,也不会被拦截。 分析了一下,电子邮件发件协议为SMTP,该协议并不验证发件人,也就是说任一发件服务器都可以以任一发件人的身份发送邮件,于是QQ邮箱使用QQ邮件系统的SMTP服务器,以公司邮箱身份发送邮件,绕开了公司邮件系统,不会被公司邮件系统拦截;而公司邮件系统收件时,并没有进行过滤,所以能顺利收取邮件;另外,将含有**关键字的附件进行压缩后,使用公司邮件系统也能顺利发送,说明公司邮件系统对excel附件进行过滤,但压缩包并没有进行解包查看~ 后记: 后续发现只是发送至外部邮箱时会被过滤,发送至内部同事的邮箱不会被过滤,而且*.rar压缩文件也会被过滤,但*.7z压缩文件不会被过滤

Labels: ,

Tuesday, March 1, 2016

安装office 2016后出现的动态链接库问题

安装office 2016后,运行很多程序,包括点开压缩包,或者开始运行Foxmail等,都会提示“无法定位程序输入点ucrtbase.terminate于动态链接库api-ms-win-crt-runtime-l1-1-0.dll上”,而且连续弹出三次,查了下,是缺少“Microsoft Visual C++ Redistributable Package”(2015版本)所致,于是运行“vc_redist.x64(2015).exe”,但是不成功,原因是操作系统为win7 64而非win7 64 SP1,于是打上了SP1补丁包,再继续安装“vc_redist.x64(2015).exe”成功,再运行其他程序不再出现“无法定位程序输入点ucrtbase.terminate于动态链接库api-ms-win-crt-runtime-l1-1-0.dll上”提示

Labels: ,