fiddlerJScript脚本工具类,轻松写出fiddler 脚本,完成数据抓取

2023-10-27

fiddler是常用的抓包工具,fiddlerJScript脚本是用JScript.NET 编写的,使用起来和JS 还是有很多区别的.
目前网络上的文章比较分散,有些内容也比较旧,对新手不友好.
所以自己动手写了一个工具类,封装了一些常用的方法.

下面是类代码:



//FidderJScript 脚本 工具类函数 $  作者:云先生  2022.12.06
class ${

public static var oSession: Session=null;
//初始化 绑定Session
public  static function  init(mSession: Session) {
oSession= mSession;

}
//获取 Session

public  static function  get_Session() {
    return oSession
}

//创建json对象
public  static function  json() {
    var strjson = '{}'
    var json = Fiddler.WebFormats.JSON.JsonDecode(strjson);
    var oObj = json.JSONObject;
    return oObj
}

//把json字符串转为json 对象
public static function  json_load(jsonstr) {
    var json = Fiddler.WebFormats.JSON.JsonDecode(jsonstr);
    var oObj = json.JSONObject;
    if((oObj=='System.Collections.ArrayList' || oObj=='System.Collections.Hashtable')){

        return oObj
    }else{
        return json()
    }
}

//提示弹窗信息
public static function  alert(msg){
    FiddlerObject.alert(msg)
}


//将json对象转为字符串
public static function  json_to_str(jsonobj) {
    if((jsonobj=='System.Collections.ArrayList' || jsonobj=='System.Collections.Hashtable')){
        var json_str = Fiddler.WebFormats.JSON.JsonEncode(jsonobj);
        return json_str
    }else{
        return "{}"
    }
}

//获取对象类型
public static function  type(obj) {
    var typ=obj.GetType()
//print2("类型为:",typ)
    return typ

}

//判断a b 类型是否相同  返回ture fasle
//typeof只能判断区分基本类型,number、string、boolean、undefined和object,function;
// obj.GetType() 获取具体类型
public static function  is_str(obj) {
    return typeof obj == "string"

}

//判断是否为 undefined 类型
public static function  is_undefined(obj) {
    return typeof obj == "undefined"

}

public static function  is_object(obj) {
    return typeof obj == "object"

}

public static function  is_function(obj) {
    return typeof obj == "function"

}
public static function  is_boolean(obj) {
    return typeof obj == "boolean"

}


//保存为文件 file_full_name 文件名(全路径)    data 写入的数据 支持 dict str 和 json  //is_cover  覆盖 结尾插入
public static function write_file(file_full_name, data,is_cover:boolean) {
    var datastr=""
    if (data=="System.Collections.Hashtable" || data=='System.Collections.ArrayList' ) {
        datastr=$.json_to_str(datastr)
    }else if (data=="System.Collections.Generic.Dictionary`2[System.String,System.Object]") {
        datastr= $.dict_to_str(data)

    } else if(data.GetType().ToString()=="Fiddler.HTTPRequestHeaders"  ||  data.GetType().ToString()=="Fiddler.HTTPRequestHeaders"   ) {
        datastr= $.dict_to_str(data)

    }else {
        datastr=data
    }
    
    var Content: byte[] = System.Text.Encoding.UTF8.GetBytes(datastr);

//.Default.GetBytes(datastr);  //.ASCII.GetBytes(datastr);
    if (is_cover){
        System.IO.File.WriteAllBytes(file_full_name,Content);
    }else{
        System.IO.File.AppendAllText(file_full_name,datastr+"\r\n")
    }
}


//读取文件 返回所有字符串  encode_index="" "0" 或"1" 编码都是utf-8
public static function open_file(file_full_name:String,encode_index:String) {
    if(   System.IO.File.Exists(file_full_name)){

        encode_index=encode_index.Trim()
        if ( $.number(encode_index) < 2 || $.number(encode_index) > 7 ){
            encode_index="1"
        }
        var encodlist= json()
        encodlist["1"]=System.Text.Encoding.UTF8
        encodlist["2"]=System.Text.Encoding.Default
        encodlist["3"]=System.Text.Encoding.ASCII
        encodlist["4"]=System.Text.Encoding.Unicode
        encodlist["5"]=System.Text.Encoding.BigEndianUnicode
        encodlist["6"]=System.Text.Encoding.UTF32
        encodlist["7"]=System.Text.Encoding.UTF7


        return  System.IO.File.ReadAllText(file_full_name,encodlist[encode_index])


    }
    else{
        print("提示:文件名 "+file_full_name+" ,找不到文件!")
    }

}
//把字符串转为数字
public static function number(nstr)	{
    return Number(nstr)
}


//把字符串转为数字
public static function str(value)	{
    return String(value)
}

//打印输出1
public static function  print(str) {
    FiddlerObject.log(str);
}

//打印输出2
public static function print2(str1, str2) {
    var str3 = str1 + " , " + str2
    FiddlerObject.log(str3);
}

//打印输出多个参数
public static function print3(arguments:Array) {
    var result = "";
    for(var i = 0; i < arguments.length; i++){
        result += arguments[i]+",";
    }
    FiddlerObject.log(result);
}

//获取浏览器链接的某个参数值
public static function get_short_url(full_url:String)	{
    if(full_url.Contains("?")){
        var surlist=full_url.Split("?")
        return surlist[0]

    }else{
        var len=full_url.Length
        if (len>50){
            len=50
        }


        full_url=full_url.Substring(0,len)
        if( full_url.Contains(".com") )
        {
            full_url.Replace(".com",".com?")
            return full_url.Split("?")[0]

        }

        full_url=full_url.Substring(0,len)
        if( full_url.Contains(".cn") )
        {
            full_url.Replace(".cn",".cn?")
            return full_url.Split("?")[0]

        }
        
        return full_url.Substring(0,len)
    }
    
}

//获取浏览器链接的某个参数值
public static function get_url_Prams(key,url)	{
    var jsondata=get_url_prams_to_json(url)
    return jsondata[key]
}

//获取浏览器链接所有参数 并转化为json
public static function get_url_prams_to_json(url)	{
    var myjson=json()
    try{
        var pramslist=url.Split("?")
        if (pramslist.Length >1){
            print2("pramslist.Length",pramslist.Length)
            var prams=pramslist[1]
            if(prams!="" && is_str_contain(prams,'=')  ){
                var plist=prams.Split("&")
                print2("plist",plist.Length)
                if (plist.Length >1 ){
                    for (var i:int = 0; i < plist.Length; i++){
                        var str1=plist[i];
                        if (is_str_contain(str1,'=') ){
                            var dlist=str1.Split("=")
                            myjson[dlist[0]]=dlist[1]
                        }
                    }
                }else if(is_str_contain(prams,'=')) {

                    var dlist=prams.Split("=")
                    myjson[dlist[0]]=dlist[1]
                }
            }
        }
    }catch(err){
        var err;
    }
    return myjson
}

//将字符串转化为url格式 不会被特殊符号截断
public static function url_encode(str:String){
    var UrlEncode=System.Net.WebUtility.UrlEncode
    return UrlEncode(str)
}

//获取Session中的请求内容 RequestBody
public static function get_RequestBody_str(){

    var oSession=get_Session()
    return oSession.GetRequestBodyAsString();
}

//获取Session中的应答中的内容 ResponseBody
public static function get_ResponseBody_str(){
    var oSession=get_Session()
    return oSession.GetResponseBodyAsString();
}

//获取host
public static function get_hostname(){
    var oSession=get_Session()
    return oSession.hostname;
}

//获取Request headers对象
public static function get_Request_headers(){
    var oSession=get_Session()
    return oSession.oRequest.headers;
}

//获取Response headers对象
public static function get_Response_headers(){
    var oSession:Session=get_Session()
    return oSession.oResponse.headers
}
//获取全部url
public static function get_full_Url(){
    var oSession=get_Session()
    return oSession.fullUrl;
}
//获取Request Cookie
public static function get_Request_Cookie(){
    var oSession=get_Session()
    if(oSession.oRequest.headers.Exists("Cookie")){
        return oSession.oRequest["Cookie"];
    }
    else{
        return ""
    }
}

//获取Response Cookie
public static function get_Response_Cookie(){
    var oSession:Session=get_Session()
    if(oSession.oResponse.headers.Exists("Cookie")){
        return oSession.oResponse["Cookie"];
    }
    else{
        return ""
    }

}

//判断字符串是否包含
public static function is_str_contain(allstr:String,strfind:String){
    return allstr.Contains(strfind)
}

//获取长度
public static function len(list){
    return list.Length
}

//会话显示红色.
public static function set_ui_color_red(){
    var oSession=get_Session()
    oSession["ui-color"] = "red";

}
//隐藏会话
public static function set_ui_hide(){
    var oSession=get_Session()
    oSession["ui-hide"] = "true";

}
// 将修改后的body,重新写回Request中
public static function set_RequestBody_str(strBody){
    var oSession=get_Session()
    oSession.utilSetRequestBody(strBody);
}
//设置Cookie
public static function set_Cookie(sCookie){
    var oSession=get_Session()
    oSession.oRequest["Cookie"] = sCookie;

}
//获取应答状态值 code
public static function response_code(){
    var oSession=get_Session()
    return oSession.responseCode;
}
//解码应答 防止乱码
public static function decode_response(){
    var oSession=get_Session()
    return oSession.utilDecodeResponse();
}
//判断host_name是否是 返回 true false
public static function is_host_name(hostname:String){
    var oSession=get_Session()
    if (oSession.HostnameIs(hostname.Trim())) {
        return true
    }
    else{
        return false
    }
}
//判断host_name_contains  是否包含某个 字符串 是否是 返回 true  false
public static function is_host_name_contains(myhostname:String){
    var hostname:String=$.get_hostname()
    return hostname.Contains(myhostname)
}
//判断url是否是包含字符串  返回 true false
public static function is_uri_contains(uri:String){
    var oSession=get_Session()
    return oSession.uriContains(uri)
}
//判断headers是否是包含某个key  返回 true false
public static function is_headers_Contains(key:String){
    var oSession=get_Session();
    return oSession.oRequest.headers.Exists(key);

}
//替换字符串  replace("123455666","55","99")
public static function replace(allstr:String,oldstr:String,newstr:String){
    return allstr.Replace(oldstr,newstr);
}

public static function json_to_Url(myJson){
    var params=[]
    for (var de in myJson) {
//print(de.Key + "=" + de.Value);
        params.push(de.Key + "=" + de.Value);
    }
    return "?" + params.join("&");
}
// 把json对象转为   dict 对象
public static  function json_to_dict(myjson){
    var cdict=FiddlerObject.createDictionary()
    if (myjson=="System.Collections.Hashtable" || myjson=='System.Collections.ArrayList' ) {
        for (var de in myjson) {
            cdict.Add(de.Key,de.Value)
        }
    }
    return  cdict
}

// 把dict 对象转json
public static function dict_to_json(myditc){
//print2("myditc.Type:",myditc.GetType())
    var jsdata=json()
    if (myditc=="System.Collections.Generic.Dictionary`2[System.String,System.Object]") {

        for (var de in myditc) {
            jsdata[de.Key] =de.Value;
        }
    }
    if (myditc.GetType().ToString()=="Fiddler.HTTPRequestHeaders"  ||  myditc.GetType().ToString()=="Fiddler.HTTPRequestHeaders"   ) {

        for (var de in myditc) {
//print2("de.GetType:",de.GetType())
            jsdata[de.Name] =de.Value;
        }
    }
    return jsdata
}

// 把dict 对象转json 字符串
public static function dict_to_str(myditc){
    var jsdict=dict_to_json(myditc)

    return $.json_to_str(jsdict)

}

//获取一个dict 对象
public static function dict(){

    var di=FiddlerObject.createDictionary()
    return di
}


//发送 网络请求 不等待 如  $.send_Request("127.0.0.1:5000","/","get","{'msg':'hello world'}",1)

public  static function  send_Request(host: String,path:String,http_method: String,data_str: String,Content_type_index:int) {
//Content_type_index 对应
// 0 = Content-Type
// 1 = application/json
// 2 = application/x-www-form-urlencoded
// 3 = multipart/form-data
// 4 = text/plain
// 5 = text/xml
// 6 = text/html
    
    var Content_typeList=[]
    Content_typeList.push("*","application/json","application/x-www-form-urlencoded","multipart/form-data","text/plain","text/xml","text/html")

    var Content_type=Content_typeList[Content_type_index] //获取 Content_type 内容

//print2("Content_type",Content_type)

    var full_url=host+path
//判断 如果是GET 方法 把数据放到 url 链接

    if (http_method.Trim()=="get" || http_method.Trim()=="GET"  ){

        var url_data=$.url_encode(data_str)
        path=path+url_data //这里主要 要在path 后面加上 "?data="  或者使用
        full_url=host+path

//print2("full_url:",full_url)
        data_str="" //把数据 清零 post 不用重复发送了
    }

    var Content: byte[] = System.Text.Encoding.UTF8.GetBytes(data_str);

    var oRQH: HTTPRequestHeaders = new HTTPRequestHeaders(path, ['Host:' +host,'Content-Length: '+Content.length.ToString(), 'Content-Type: '+Content_type]);

    oRQH.HTTPMethod = http_method;

    var oSD = new System.Collections.Specialized.StringDictionary();

    FiddlerApplication.oProxy.SendRequest(oRQH, Content, oSD, null);//发送请求

    print("***目标地址:"+$.get_short_url(full_url)+", 请求方式:"+http_method+" ,****转发完成****")

}

//=============http://127.0.0.1:5000/fidder
// Content-Type
//*
// application/json
// application/x-www-form-urlencoded
// multipart/form-data
// text/plain
//  text/xml
//  text/html
//用SendRequestAndWait 方法发送网络请求  可以获取服务器的数据
public static function post(datastr){

    var Content_type="application/json"
    var Content: byte[] = System.Text.Encoding.UTF8.GetBytes(datastr);
    var oRQH: HTTPRequestHeaders = new HTTPRequestHeaders("/fidder", ['Host: 127.0.0.1:5000','Content-Length: '+Content.length.ToString(), 'Content-Type: '+Content_type]);
    oRQH.HTTPMethod = "POST";
    var oSD = new System.Collections.Specialized.StringDictionary();
    var newSession = FiddlerApplication.oProxy.SendRequestAndWait(oRQH, Content, oSD, null);


    if (200 == newSession.responseCode)
    {
//这里写自己要做的事情代码
        print(newSession.oResponse.ToString)
        print("发送请求成功")

    }
}

}

使用的话也很简单,把代码黏贴到 前面.
插入位置

里面封装了很多方法.
如何使用:

    //请求之前 OnBeforeRequest  需要使用 $.init(oSession) 设置好Session
    static function OnBeforeRequest(oSession: Session) {
         $.init(oSession)
		$.print("hello world!")	
		var json=$.json()	
		json["name"]="sss"	
		json["sex"]="nv"	
		var jstr=$.json_to_str(json)
		var hd=$.
		$.send_Request("127.0.0.1:5000","/","get",jstr,1)// 发送网络请求
		if ( ! $.is_host_name_contains("baidu.com") || ! $.is_host_name_contains("127.0.0.1")   ) {
              $.set_ui_hide()
        }
        //里面还有好多方法
}

如有不明白可留言.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fiddlerJScript脚本工具类,轻松写出fiddler 脚本,完成数据抓取 的相关文章

随机推荐

  • cobra的使用

    一 安装cobra go get g github com spf13 cobra cobra 这里会报错 如下 package golang org x sys unix unrecognized import path golang o
  • Qtcreator远程调试出现“The selected build of GDB does not support Python scripting.It cannot be used .."...

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net aristolto article details 77370853 之前使用的是Qt4 7后来换成了Qt5 x Qtcreator的版本使用4 0
  • 基数统计—— HyperLogLog 算法

    目录 基数计数基本概念 基数计数方法 B树 bitmap 概率算法 HLL 直观演示 HLL 的实际步骤 算法来源 N次伯努利过程 解释 LogLogCounting 均匀随机化 分桶平均 偏差修正 误差分析 算法应用 误差控制 内存使用分
  • 无线传感网WSN

    第一章 绪论 WSN定义 无线传感网络是由大量的静止或移动的传感器以自组织和多跳的方式构成的无线网络 WSN系统组成 传感器节点 汇聚节点和管理节点 WSN的三个基本要素 传感器 感知对象 用户 观测者 WSN特点 1 自组织性 2 以数据
  • docker添加新的环境变量_在Dockerfile中,如何更新PATH环境变量?

    I have a dockerfile that download and builds GTK from source but the following line is not updating my image s environme
  • linux下添加简单的开机自启动脚本

    在rc local脚本中添加开机自启动程序 1 编辑文件 etc rc local vim ect rc local 2 编辑完 etc rc local需要添加执行权限 否则调用失败 chmod x ect rc d rc local 3
  • 信息学奥赛C++语言: 验证子串

    题目描述 输入两个字符串 验证其中一个串是否为另一个串的子串 输入 输入两个字符串 每个字符串占一行 长度不超过200且不含空格 输出 若第一个串s1是第二个串s2的子串 则输出 s1 is substring of s2 否则 若第二个串
  • Mac开发环境搭建

    一 jdk安装 1 1 jdk下载 首先查看你的Mac 系统是否已经安装了JDK 打开终端窗口并输入java version 如果没有安装过jdk会提示需要安装 Java Downloads Oracle 小技巧 mac如何打开终端 Com
  • CTFshow刷题记录

    https shimo im docs hJvkwcW8XvPxqyQK ctfshow misc
  • open【部署、使用教程】

    目录 1 创建证书 2 安装openVPN Server端并配置 3 将证书移动到相对路径 4 开启内核转发功能 否则会无法启动openVPN 5 启动服务 加入开机自启 6 启动后服务端会生成一个tun0的虚拟网卡 用于不同网段之间相互通
  • 让CSS flex布局最后一行列表左对齐的N种方法

    写在前面 精简版 可以直接移步我的另一篇博客 适用于行列数都不确定的情况 https blog csdn net HD243608836 article details 129854063 一 justify content对齐问题描述 在
  • 通信总线协议一 :UART

    文章目录 通信总线协议一 UART 1 通信基础 1 1 并行 串行 1 2 单工 双工 1 3 同步 异步 1 4 波特率 2 Uart通信协议 3 硬件连接 4 uart存在的问题 通信总线协议一 UART 1 通信基础 1 1 并行
  • 如何在线将Ubuntu 18.04升级到Ubuntu 20.04

    将Ubuntu 18 04升级到Ubuntu 20 04 在将系统升级运行到下一个主要发行版本之前 请确保已备份当前系统 以使您可以恢复原状 以防万一 备份过程不在本指南的范围内 运行系统更新 首先将Ubuntu 18 04系统软件包更新和
  • 深入学习jquery源码之trigger()与triggerHandler()

    深入学习jquery源码之trigger 与triggerHandler trigger type data 概述 在每一个匹配的元素上触发某类事件 这个函数也会导致浏览器同名的默认行为的执行 比如 如果用trigger 触发一个 subm
  • C#异步编程案例学习——异步加载大资源文件1 之 使用 BeginInvoke 与 EndInvoke

    C 异步编程案例学习 异步加载大资源文件1 之 使用 BeginInvoke 与 EndInvoke C 中 BeginInvoke 与 EndInvoke 的一个简单的使用案例 异步编程模型模式 APM 异步编程中的 BeginInvok
  • CentOS 6.4利用xampp安装bugfree3

    1 下载xampp 安装 http www apachefriends org zh cn xampp html 直接执行 run文件安装 默认会安装到 opt lampp 2 启动xampp root localhost opt lamp
  • 米哈游服务器位置,米哈游(米哈游账号中心系统)

    只要绑定了手机号就不要紧了 别人也无法用这个邮箱改密码 别人用也是无法验证 去官网下载崩坏3 不要在小米游戏这种第三方应用市场下载 有人买了米哈游的账号被找回吗 我买的三无号直接登不上 登陆的时候提示说没有这个账号 所以最好不要买 自己注册
  • 对SFBC空频编码和FSTD-SFBC频率切换分集与空频编码的MIMO系统误码率matlab仿真

    目录 一 理论基础 二 核心程序 三 测试结果 一 理论基础 Space Frequency Block Code SFBC 是TD LTE系统中的一种抗干扰技术 其基本原理与Wimax中基于Alamuti 编码的STBC类似 LTE标准中
  • 服务器如何安装 宝塔国外版本

    linux服务器如何安装 宝塔国外版本 centos安装方式 yum install y wget wget O install sh http www aapanel com script install 6 0 en sh bash i
  • fiddlerJScript脚本工具类,轻松写出fiddler 脚本,完成数据抓取

    fiddler是常用的抓包工具 fiddlerJScript脚本是用JScript NET 编写的 使用起来和JS 还是有很多区别的 目前网络上的文章比较分散 有些内容也比较旧 对新手不友好 所以自己动手写了一个工具类 封装了一些常用的方法