Category Archives: 技术学习

学而时习之!

Mitmproxy 常用response/request 方法参数

针对http,常用的API addons-examples: https://docs.mitmproxy.org/stable/addons-examples/ http/https劫持脚本开发: https://www.cnblogs.com/-wenli/p/13940591.html http.HTTPFlow 实例 flow flow.request.headers #获取所有头信息,包含Host、User-Agent、Content-type等字段     flow.request.headers[’myvalue’] = ‘value’ # 此设置在chrome调试里面看不到,<span style="color: #ff0000;">实际上是成功了的</span>! flow.request.url #完整的请求地址,包含域名及请求参数,但是不包含放在body里面的请求参数 flow.request.pretty_url #同flow.request.url目前没看出什么差别 flow.request.host #域名 flow.request.method #请求方式。POST、GET等 flow.request.scheme #什么请求 ,如https flow.request.path # 请求的路径,url除域名之外的内容 flow.request.get_text() #请求中body内容,有一些http会把请求参数放在body里面,那么可通过此方法获取,返回字典类型 flow.request.query #返回MultiDictView类型的数据,url直接带的键值参数     flow.request.query.get(’wd’) #取得请求参数wd的值     flow.request.query.keys() #取得所有请求参数     flow.request.query.set_all(key,[value]) #修改请求参数 flow.request.get_content()#bytes,结果如flow.request.get_text() flow.request.raw_content #bytes,结果如flow.request.get_content() flow.request.urlencoded_form #MultiDictView,content-type:application/x-www-form-urlencoded时的请求参数,不包含url直接带的键值参数 flow.request.multipart_form… Read More »

怎么从Chrome浏览器中导出扩展程序为crx文件?

1,首先找到Chrome的扩展文件目录: 默认位置未为: C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Extensions\ 也可以先找到chrome安装位置,再点“User Data”-“Default”–“Extensions”进入。 然后打开Chrome的’管理扩展程序’–>选择对应插件–>详细信息–> ID:   2,然后去Chrome扩展文件目录下,寻找对应此ID名字的目录: 3,再次进入Chrome扩展程序管理页,选择’打包扩展程序’,然后浏览到对应的目录–>进入选择对应版本!打包 打包后的crx文件将保存在chrome扩展程序目录对应ID的文件夹里:   附: adblock , adblock plus 插件每次安装后都会打开welcome新页面, 进入文件夹里文件–>abp-background.js 或者 background.js 里面, 设置 defaults.suppress_first_run_page = true; 就关闭自动打开新页面!      

SwitchyOmega访问Google / Gmail 服务器的代理策略

SwitchyOmega访问Google服务的策略! 问题:添加 *.google.com 后可以访问gmail,但是登录就提示’Connection failed’并退出! 解决:添加 *.googleapis.com 代理测试后解决! Chrome Webstore的插件安装 解决:添加 *.googleusercontent.com 代理策略

User Agent各参数解释

以下是几个常见的User Agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 Edg/86.0.622.63 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 OPR/72.0.3815.320 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0 Mozilla/5.0 (Macintosh; Intel Mac OS X… Read More »

使用Chrome插件在页面加载完成之前执行JS注入

使用以下代码可以跳过chrome 插件沙盒执行JS注入 extension/manifest.json {   "manifest_version": 2,   "name": "Content Script Sandbox Breakout Extension",   "version": "1.0.0",   "applications": {     "gecko": {       "id": "[email protected]"     }   },   "content_scripts": [     {       "matches": ["<all_urls>"],       "js": ["sandbox-breakout.js"],       "run_at": "document_start"… Read More »

【技巧】Windows Server 2012/2016/2019桌面显示我的电脑图标

从Windows Server 2012开始,微软取消了服务器桌面个性化设置功能,Windows Server 2012/2016用户桌面上默认只有一个回收站的图标,这让习惯于使用我的电脑图标功能的用户很不适应,本文说明如何让Windows Server 2012/2016的用户桌面显示我的电脑图标。 很简单的事情就不上图了,操作如下: 打开运行对话框 按下Windows系统热键Win+R,打开运行对话框。 输入如下命令,按回车或点击确定按钮,就会打开桌面图标设置功能。 rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0 桌面图标设置功能 这样就出现了原来的桌面图标设置功能,需要显示什么自己勾选即可。

使用浏览器特征检测浏览器

// Opera 8.0+ var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(’ OPR/’) >= 0; // Firefox 1.0+ var isFirefox = typeof InstallTrigger !== ‘undefined’; // Safari 3.0+ "[object HTMLElementConstructor]" var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window[’safari’] || (typeof safari !== ‘undefined’ && safari.pushNotification)); // Internet Explorer… Read More »

MYSQL数据库的一些常用操作

mysql查询重复数据(把有重复的给列出来) SELECT * FROM `it_info` GROUP BY `last_name` HAVING COUNT(*)>1 使用replace批量更新SQL某个字段的某个字符,比如批量替换last_name里包含的’位空 update `user` set `last_name`=REPLACE(`last_name`,"’","") WHERE `last_name` LIKE "%’%" 批量更新数据库数组,在长度小于5的数据前面加0 update `address` set `zip`=concat(’0′,`zip`) WHERE length(`zip`) < 5 Think PHP 查询数据库某一个字段的唯一值  Db::table(’user’)->distinct(true)->field(’class’)->select(); 这将仅取出 class 唯一值的列表 Db::table(’user’)->group(’class’)->order(’name desc’)->select(); 这将取出class唯一的每一条记录,组成列表 随机取同一个字段里面,不同分组的一条记录  Db::table(’user’) ->where(’status’,1) ->orderRand() ->buildSql(); 先构建一个子查询,把所有值随机排序  Db::table($subQuery . ‘ a’) ->group(’class’) ->orderRand() ->select(); 然后再把子查询的值分组

js replace 全局替换的操作方法

js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换。 <script language="javascript"> var strM = "这是要被替换的字符串啊啊!"; //在此我想将字母a替换成字母A alert(strM.replace("啊","额")); </script> 上面这段代码,只能替换第一个字符“啊”,第二个“啊”就无法替换,这样就没办法满足大多数使用js(replace)的需求 <script type="text/javascript" language="javascript"> var s = "这是要被替换的字符换啊啊!"; alert(s); alert(s.replace(/啊/g, "额")); 这样,就可以实现整个字符串的替换。 我们这里用到了正则函数的/g全部的使用。这样就可以实现整个字符串的替换效果。 下面,我们大家可能还有个需求无法满足,那就是,我们替换定值可以使用这个,但是替换变量怎么使用? 接下来,就说一下替换变量的使用方式。 简单介绍一下eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。接下来主要靠这个函数。 <script> var ch = "变量"; var reg = "/"+ch+"/g"; var str = "这是一个变量,这是一个变量"; var val = str.replace(eval(reg),"替换"); alert(val); </script> 但是如果要替换的字符串中含有/符号时,上面的就不能用了,需要采取以下方法 <script> var ch =… Read More »