Giter Site home page Giter Site logo

monster's People

Contributors

releasethecow avatar

Watchers

 avatar

monster's Issues

脚本&月饼 -- 命令行 CURL 实战

命令行 CURL 模拟浏览器访问网页

举个栗子

curl -o this-is-page.html -D this-is-cookie.txt http://baidu.com

下次访问带上 “this-is-cookie.txt” 作为 cookie
curl -o this-is-page.html -D this-is-cookie.txt -b this-is-cookie.txt http://baidu.com

CURL 模拟浏览器访问网页

参考参数:

param e.g. desc
-o -o this-is-page.html 输出内容目标文件
-D -D this-is-cookie.txt cookie
-b -b this-is-cookie.txt 带上浏览器信息(user-agent)
-A -A "Mozilla/4.0 ..." cookie
-x -x 123.45.67.89:1080 使用代理
-e -e "mail.yahoo.com" cookie
-d -d "param1=value1&param2=value2" 设置POST请求和 body

更多关于下载, 上传等屌功能

Linux命令行访问网页

linux curl 命令详解,以及实例

curl 使用案例

早上有朋友群里发了这样的信息

#早起点一点#亲们,点这个链接每天可以投一票,免关注免注册。谢谢~
http://{马赛克}/ebiz/activity/opusActivity.action?action=toOpus&ajax=true
__xx号, {名字}__

于是好奇上去看了一眼, chrome 上抓了下请求, 只是一个简单的 POST 请求, 并不复杂, 但是,

这个是按IP的...如果是TCP的话比较难搞... 如果后台是根据http包头判断的话是可以伪造的...

于是决定使用代理

研究了一下, 设置代理就可以了, 连 GET 请求也接受呢...为了结果的公正性, 就拿远远抛离其他人的第一名做例子…

curl -x 183.233.179.172:8080 http://{马赛克}/ebiz/activity/opusActivity.action?action=doVote&channel=1&activityCode=20160715&opusCode=5&ajax=true

我只试了下这个代理是可以的 183.233.179.172:8080

➜  ~ curl -x 183.233.179.172:8080 http://{马赛克}/ebiz/activity/opusActivity.action\?action\=doVote\&channel\=1\&activityCode\=20160715\&opusCode\=5\&ajax\=true
{"object":{"id":43,"createdUser":"425365","activityCode":"20160715","opusCode":"5","createdDate":1470012245000,"modifiedDate":1473820885326,"modifiedUser":null,"isDelete":0,"voteNum":"2959","voteDate":null},"success":true,"resultCode":"1","resultInfoDesc":"交易处理成功","validateErrors":null}%                     

再试一次

➜  ~ curl -x 183.233.179.172:8080 http://{马赛克}/ebiz/activity/opusActivity.action\?action\=doVote\&channel\=1\&activityCode\=20160715\&opusCode\=5\&ajax\=true
{"object":null,"success":false,"resultCode":"0","resultInfoDesc":"您已经投过票","validateErrors":null}%  

每个代理也算IP, 只能用一次

当然, 可以 -A伪造 UA 和 -b 伪造 cookie, -d 设置POST, 管理员发现的几率不会很大的

也就是说, 写一个像这样的脚本, 随便在网上找一批随便能用的免费代理, 轮一遍就可以把排名怼上去了 :)

当然我不会这么做的, 我又不抢月饼对不对? 啊不, 因为我价值观正确. :)

一道有趣的 JS

一道有趣的 JS

背景

早上群里面有个朋友(zhi)有(zhang)突然 at 了全家, 问这事什么, 有么有人牛逼了能解析下不:

(!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]]*~+[]]

作为一个数十年如一日写代码的好(chou)孩(jiang)子(you), 听到有人在召唤我, 一看就觉得应该用 JavaScript 去解释, 因为 "能用 js 实现的终将被 js 改写".

因此这个表达式应该这么理解(没错, 高亮不一样而已):

(!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]+({}+[])[[~!+[]]*~+[]]

过程

首先本身只是一个普通表达式, 我们可以分解这样看 (expression)[expression]; 然后隐式把 () 的内容转化为一个数组解释.

基本拆解

我们假设这个表达式并没有问题, 通过程序员精致的断句, 那么这句表达式是两个()[]相加, 即

其实这个问题核心是需要理解清楚 js 运算符的优先级. 然后拆解分析.

(expression1)[expression2] + (expression3)[expression4]


我们需要分开去理解,

// 第一个表达式 (expression1)[expression2]

(!(~+[])+{})[--[~+""][+[]]*[~+[]]+~~!+[]]
// 第二个表达式:

({}+[])[[~!+[]]*~+[]]

那么问题就好理解了, 开始拆解一步一步分析

表达式进行分解与逐步解析

通过 expression1 为切入.
(expression1)(!(~+[])+{}) => (非(取反+一个数组对象) + 一个对象) => !(非(+[])) + 对象;


根据 js 自动转义, +[] 解析为把一个长度为 0 的数组转化为一个数字, 因数组长度为 0, 返回数字 0;

取反0 取值 -1, 这个好理解, 可以了解下取反原理, 不累赘; !(-1) 取反 -1 不为 0, 自动转义 Boolean 为真, 取反则为假 => false;

加上后面解释, 则是 false + 对象, 自动转化对象为字符串则是 "false[object Object]" 作为一个字符串被解释;

"false[object Object]" 后面加 [] 自动转化为数组解释;

[expression2] => [--[~+""][+[]]*[~+[]]+~~!+[]] 这句话比较复杂, 我们先拆解下

expression2 => [--[~+""][+[]]*[~+[]]+~~!``+[]]

  • +[] => 0
  • +"" => 0
  • [-1][0] => 数组 [-1] 的第一个元素

=> [--``[-1][0]*[~0]+~~!0`]

=> [--``[-1][0]*[-1]+~~!0`]

=> [--[-1]*[-1]+ ~~``true]

  • ~~``true 按位数取非再取非(别打人) => ~``0 => 1
  • --[-1]=> --(-1) => -2

=> (-2 * -1) + 1 => 3

所以其实在[]转化为数字 3.

真棒...

那么答案就来了 "false[object Object]"[3] 转化解释, 答案就是数组的第3个, 注意数组js 里面 3代表要数四下, 0, 1, 2, 3, 就是字符(串) "s"

后面同理, 我们不太复杂解释后面的内容, 反正泽铭也看不懂, 泽铭是谁也不用关心, 不重要. 解析为字幕 b

=> (expression1)[expression2] + (expression3)[expression4]

=> s + b

=> "sb"

=> !@#$%^&*, 靠, 我似乎要报警了.

小结

参考资料 js 运算符的优先级

考的是 javascript 的运算理解细节问题.

如果作为面试题的话建议看分解逻辑, 而不是答案本身.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.