Ejemplo n.º 1
0
        /// <summary>
        /// Replace the http response in oSession with your rule
        /// </summary>
        /// <param name="oSession">oSession</param>
        /// <param name="nowFiddlerResponseChange">FiddlerResponseChange</param>
        public static void ReplaceSessionResponse(Session oSession, FiddlerResponseChange nowFiddlerResponseChange, Action <string> ShowError, Action <string> ShowMes)
        {
            bool isClosePipeWhenReplace = false;

            byte[] tempResponseBytes;
            string errMes;
            NameValueCollection nameValueCollection;
            HttpResponse        tempHttpResponse;

            try
            {
                tempHttpResponse  = nowFiddlerResponseChange.HttpRawResponse.UpdateHttpResponse(out errMes, out nameValueCollection);
                tempResponseBytes = tempHttpResponse.GetRawHttpResponse();
            }
            catch (Exception ex)
            {
                ShowError(string.Format("Fail to ReplaceSessionResponse :{0}", ex.Message));
                return;
            }
            if (errMes != null)
            {
                ShowError(errMes);
            }
            if (nameValueCollection != null && nameValueCollection.Count > 0)
            {
                ShowMes(string.Format("[ParameterizationContent]:{0}", nameValueCollection.MyToFormatString()));
            }
            using (MemoryStream ms = new MemoryStream(tempResponseBytes))
            {
                if (isClosePipeWhenReplace)
                {
                    oSession.PoisonClientPipe();  //关闭客户端与代理的连接(Ensures that, after the response is complete, the client socket is closed and not reused. Does NOT (and must not) close the pipe. )
                    oSession.PoisonServerPipe();  //关闭代理与服务器的连接
                }
                if (!oSession.LoadResponseFromStream(ms, null))
                {
                    ShowError("error to oSession.LoadResponseFromStream");
                    ShowError("try to modific the response");

                    //modific the response
                    oSession.oResponse.headers = new HTTPResponseHeaders();
                    oSession.oResponse.headers.HTTPResponseCode = tempHttpResponse.ResponseCode;
                    oSession.ResponseHeaders.StatusDescription  = tempHttpResponse.ResponseStatusDescription;
                    ((Fiddler.HTTPHeaders)(oSession.ResponseHeaders)).HTTPVersion = tempHttpResponse.ResponseVersion;
                    if (tempHttpResponse.ResponseHeads != null && tempHttpResponse.ResponseHeads.Count > 0)
                    {
                        foreach (var tempHead in tempHttpResponse.ResponseHeads)
                        {
                            oSession.oResponse.headers.Add(tempHead.Key, tempHead.Value);
                        }
                    }
                    oSession.responseBodyBytes = tempHttpResponse.ResponseEntity;
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///  Modific the websocket message with your rule
        /// </summary>
        /// <param name="oSession"></param>
        /// <param name="webSocketMessage"></param>
        /// <param name="nowFiddlerRequsetChange"></param>
        /// <param name="ShowError"></param>
        /// <param name="ShowMes"></param>
        public static void ModificWebSocketMessage(Session oSession, WebSocketMessage webSocketMessage, IFiddlerHttpTamper nowFiddlerChange, bool isRequest, Action <string> ShowError, Action <string> ShowMes)
        {
            if (nowFiddlerChange.ParameterPickList != null)
            {
                PickSessionParameter(oSession, nowFiddlerChange, ShowError, ShowMes, webSocketMessage.IsOutbound, webSocketMessage);
            }
            ContentModific payLoadModific = null;

            if (isRequest)
            {
                FiddlerRequestChange nowFiddlerRequsetChange = (FiddlerRequestChange)nowFiddlerChange;
                payLoadModific = nowFiddlerRequsetChange.BodyModific;
            }
            else
            {
                FiddlerResponseChange nowFiddlerResponseChange = (FiddlerResponseChange)nowFiddlerChange;
                payLoadModific = nowFiddlerResponseChange.BodyModific;
            }
            //Modific body
            if (payLoadModific != null && payLoadModific.ModificMode != ContentModificMode.NoChange)
            {
                if (payLoadModific.ModificMode == ContentModificMode.HexReplace)
                {
                    try
                    {
                        webSocketMessage.SetPayload(payLoadModific.GetFinalContent(webSocketMessage.PayloadAsBytes()));
                    }
                    catch (Exception ex)
                    {
                        ShowError(string.Format("error in GetFinalContent in HexReplace with [{0}]", ex.Message));
                    }
                }
                else
                {
                    string sourcePayload = webSocketMessage.PayloadAsString();
                    if (payLoadModific.ModificMode == ContentModificMode.ReCode)
                    {
                        try
                        {
                            webSocketMessage.SetPayload(payLoadModific.GetRecodeContent(sourcePayload));
                        }
                        catch (Exception ex)
                        {
                            ShowError(string.Format("error in GetRecodeContent in ReCode with [{0}]", ex.Message));
                        }
                    }
                    else
                    {
                        webSocketMessage.SetPayload(payLoadModific.GetFinalContent(sourcePayload));
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private FiddlerResponseChange GetResponseReplaceInfo()
        {
            FiddlerResponseChange responseChange = new FiddlerResponseChange();

            responseChange.ActuatorStaticDataController = new FiddlerActuatorStaticDataCollectionController(StaticDataCollection);
            responseChange.HttpFilter        = GetHttpFilter();
            responseChange.ParameterPickList = GetParameterPick();
            responseChange.LesponseLatency   = GetResponseLatency();
            responseChange.HttpRawResponse   = rawResponseEdit.GetHttpResponse(StaticDataCollection);
            responseChange.IsIsDirectRespons = rawResponseEdit.IsDirectRespons;
            return(responseChange);
        }
Ejemplo n.º 4
0
        private FiddlerResponseChange GetResponseReplaceInfo()
        {
            FiddlerResponseChange responseChange = new FiddlerResponseChange();

            responseChange.TamperProtocol = NowProtocalMode;
            //responseChange.ActuatorStaticDataController = new FiddlerActuatorStaticDataCollectionController(StaticDataCollection);
            responseChange.HttpFilter        = GetHttpFilter();
            responseChange.ParameterPickList = GetParameterPick();
            responseChange.LesponseLatency   = GetResponseLatency();
            responseChange.HttpRawResponse   = rawResponseEdit.GetHttpResponse(StaticDataCollection);
            responseChange.IsIsDirectRespons = rawResponseEdit.IsDirectRespons;
            responseChange.SetHasParameter(pb_parameterSwitch.SwitchState, StaticDataCollection);
            return(responseChange);
        }
Ejemplo n.º 5
0
 private void SetResponseModificInfo(FiddlerResponseChange fiddlerResponseChange)
 {
     SetHttpMatch(fiddlerResponseChange.HttpFilter);
     SetResponseLatency(fiddlerResponseChange.LesponseLatency);
     SetHttpParameterPick(fiddlerResponseChange.ParameterPickList);
     pb_parameterSwitch.SwitchState = fiddlerResponseChange.IsHasParameter;
     if (fiddlerResponseChange.HttpRawResponse == null)
     {
         tabControl_Modific.SelectedTab = tabPage_responseModific;
         if (fiddlerResponseChange.HeadDelList != null)
         {
             foreach (string tempHead in fiddlerResponseChange.HeadDelList)
             {
                 responseRemoveHeads.ListDataView.Items.Add(tempHead);
             }
         }
         if (fiddlerResponseChange.HeadAddList != null)
         {
             foreach (string tempHead in fiddlerResponseChange.HeadAddList)
             {
                 responseAddHeads.ListDataView.Items.Add(tempHead);
             }
         }
         if (fiddlerResponseChange.BodyModific != null && fiddlerResponseChange.BodyModific.ModificMode != ContentModificMode.NoChange)
         {
             tb_responseModific_body.Text = fiddlerResponseChange.BodyModific.ParameterTargetKey.ToString();
             if (!string.IsNullOrEmpty(fiddlerResponseChange.BodyModific.ParameterReplaceContent.ToString()))
             {
                 rtb_respenseModific_body.AppendText(fiddlerResponseChange.BodyModific.ParameterReplaceContent.ToString());
             }
         }
     }
     else
     {
         tabControl_Modific.SelectedTab     = tabPage_responseReplace;
         rawResponseEdit.IsDirectRespons    = fiddlerResponseChange.IsIsDirectRespons;
         rawResponseEdit.IsUseParameterData = fiddlerResponseChange.HttpRawResponse.ParameterizationContent.hasParameter;
         if (fiddlerResponseChange.HttpRawResponse.OriginSting != null)
         {
             rawResponseEdit.SetText(fiddlerResponseChange.HttpRawResponse.OriginSting);
         }
         pb_parameterSwitch.SwitchState = fiddlerResponseChange.HttpRawResponse.ParameterizationContent.hasParameter;
     }
 }
Ejemplo n.º 6
0
 public void AutoTamperResponseAfter(Session oSession)
 {
     if (!isOnLoad)
     {
         return;
     }
     if (myFreeHttpWindow.IsResponseRuleEnable)
     {
         if (isSkipUiHide && oSession["ui-hide"] == "true")
         {
             return;
         }
         if (myFreeHttpWindow.ModificSettingInfo.IsSkipConnectTunnels && oSession.RequestMethod == "CONNECT")
         {
             return;
         }
         List <IFiddlerHttpTamper> matchItems = FiddlerSessionHelper.FindMatchTanperRule(oSession, myFreeHttpWindow.FiddlerResponseChangeList, false);
         if (matchItems != null && matchItems.Count > 0)
         {
             foreach (var matchItem in matchItems)
             {
                 FiddlerResponseChange nowFiddlerResponseChange = ((FiddlerResponseChange)matchItem);
                 ListViewItem          tempListViewItem         = myFreeHttpWindow.FindListViewItemFromRule(matchItem);
                 if (!(nowFiddlerResponseChange.IsRawReplace && nowFiddlerResponseChange.IsIsDirectRespons))
                 {
                     FreeHttpWindow.MarkMatchRule(tempListViewItem);
                     MarkSession(oSession);
                     ShowMes(string.Format("macth the [reponse rule {0}] with {1}", tempListViewItem.SubItems[0].Text, oSession.fullUrl));
                     FiddlerSessionTamper.ModificSessionResponse(oSession, nowFiddlerResponseChange, ShowError, ShowMes);
                 }
                 if (nowFiddlerResponseChange.LesponseLatency > 0)
                 {
                     ShowMes(string.Format("[reponse rule {0}] is modified , now delay {1} ms", tempListViewItem.SubItems[0].Text, nowFiddlerResponseChange.LesponseLatency));
                     System.Threading.Thread.Sleep(nowFiddlerResponseChange.LesponseLatency);
                 }
                 if (myFreeHttpWindow.ModificSettingInfo.IsOnlyMatchFistTamperRule)
                 {
                     break;
                 }
             }
         }
     }
 }
Ejemplo n.º 7
0
        /// <summary>
        ///  Modific the websocket message with your rule
        /// </summary>
        /// <param name="oSession"></param>
        /// <param name="webSocketMessage"></param>
        /// <param name="nowFiddlerRequsetChange"></param>
        /// <param name="ShowError"></param>
        /// <param name="ShowMes"></param>
        public static void ModificWebSocketMessage(Session oSession, WebSocketMessage webSocketMessage, IFiddlerHttpTamper nowFiddlerChange, bool isRequest, Action <string> ShowError, Action <string> ShowMes)
        {
            if (nowFiddlerChange.ParameterPickList != null)
            {
                PickSessionParameter(oSession, nowFiddlerChange, ShowError, ShowMes, webSocketMessage.IsOutbound, webSocketMessage);
            }
            ParameterContentModific payLoadModific = null;

            if (isRequest)
            {
                FiddlerRequestChange nowFiddlerRequsetChange = (FiddlerRequestChange)nowFiddlerChange;
                payLoadModific = nowFiddlerRequsetChange.BodyModific;
            }
            else
            {
                FiddlerResponseChange nowFiddlerResponseChange = (FiddlerResponseChange)nowFiddlerChange;
                payLoadModific = nowFiddlerResponseChange.BodyModific;
            }
            //Modific body
            if (payLoadModific != null && payLoadModific.ModificMode != ContentModificMode.NoChange)
            {
                if (payLoadModific.ModificMode == ContentModificMode.HexReplace)
                {
                    try
                    {
                        webSocketMessage.SetPayload(payLoadModific.GetFinalContent(webSocketMessage.PayloadAsBytes()));
                    }
                    catch (Exception ex)
                    {
                        ShowError(string.Format("error in GetFinalContent in HexReplace with [{0}]", ex.Message));
                    }
                }
                else
                {
                    if (webSocketMessage.FrameType == WebSocketFrameTypes.Binary)
                    {
                        ShowError("error in GetFinalContent that WebSocketFrameTypes is Binary ,just use <hex> mode");
                    }
                    else if (webSocketMessage.FrameType == WebSocketFrameTypes.Ping || webSocketMessage.FrameType == WebSocketFrameTypes.Pong || webSocketMessage.FrameType == WebSocketFrameTypes.Close)
                    {
                        // do nothing
                    }
                    else
                    {
                        string sourcePayload = webSocketMessage.PayloadAsString();
                        if (payLoadModific.ModificMode == ContentModificMode.ReCode)
                        {
                            try
                            {
                                webSocketMessage.SetPayload(payLoadModific.GetRecodeContent(sourcePayload));
                            }
                            catch (Exception ex)
                            {
                                ShowError(string.Format("error in GetRecodeContent in ReCode with [{0}]", ex.Message));
                            }
                        }
                        else
                        {
                            string errMes;
                            NameValueCollection nameValueCollection = new NameValueCollection();

                            //webSocketMessage.SetPayload(payLoadModific.GetFinalContent(sourcePayload));
                            string tempPayload = payLoadModific.GetFinalContent(sourcePayload, nameValueCollection, out errMes);
                            if (errMes != null)
                            {
                                ShowError(string.Format("error in GetFinalContent in PayLoadModific that [{0}]", errMes));
                            }
                            if (tempPayload != sourcePayload) //非标准协议的实现,或没有实现的压缩会导致PayloadAsString()使数据不可逆
                            {
                                webSocketMessage.SetPayload(tempPayload);
                            }

                            if (nameValueCollection != null && nameValueCollection.Count > 0)
                            {
                                ShowMes(string.Format("[ParameterizationContent]:{0}", nameValueCollection.MyToFormatString()));
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Modific the http response in oSession with your rule (if IsRawReplace and  IsIsDirectRespons it will not call ReplaceSessionResponse)
        /// </summary>
        /// <param name="oSession">oSession</param>
        /// <param name="nowFiddlerResponseChange">FiddlerResponseChange</param>
        public static void ModificSessionResponse(Session oSession, FiddlerResponseChange nowFiddlerResponseChange, Action <string> ShowError, Action <string> ShowMes)
        {
            if (nowFiddlerResponseChange.ParameterPickList != null && nowFiddlerResponseChange.ParameterPickList.Count > 0)
            {
                PickSessionParameter(oSession, nowFiddlerResponseChange, ShowError, ShowMes, false);
            }
            if (nowFiddlerResponseChange.IsRawReplace)
            {
                //if IsIsDirectRespons do nothing
                if (!nowFiddlerResponseChange.IsIsDirectRespons)
                {
                    ReplaceSessionResponse(oSession, nowFiddlerResponseChange, ShowError, ShowMes);
                }
            }
            else
            {
                string errMes;
                NameValueCollection nameValueCollection = new NameValueCollection();
                //modific body
                if (nowFiddlerResponseChange.BodyModific != null && nowFiddlerResponseChange.BodyModific.ModificMode != ContentModificMode.NoChange)
                {
                    if (nowFiddlerResponseChange.BodyModific.ModificMode == ContentModificMode.HexReplace)
                    {
                        try
                        {
                            oSession.ResponseBody = nowFiddlerResponseChange.BodyModific.GetFinalContent(oSession.responseBodyBytes);
                        }
                        catch (Exception ex)
                        {
                            ShowError(string.Format("error in GetFinalContent in HexReplace with [{0}]", ex.Message));
                        }
                    }
                    else
                    {
                        //you should not change the media data as string
                        string sourceResponseBody = null;
                        try
                        {
                            sourceResponseBody = oSession.GetResponseBodyAsString(); //if the head encode is change ,GetResponseBodyAsString maybe fail
                            if (nowFiddlerResponseChange.BodyModific.ParameterTargetKey.ToString().Contains('\n'))
                            {
                                sourceResponseBody = sourceResponseBody.Replace("\r\n", "\n");
                            }
                        }
                        catch (Exception ex)
                        {
                            ShowError(string.Format("error in GetResponseBodyAsString [{0}]", ex.Message));
                            oSession.utilDecodeResponse();
                            sourceResponseBody = oSession.GetResponseBodyEncoding().GetString(oSession.ResponseBody);
                        }
                        finally
                        {
                            if (nowFiddlerResponseChange.BodyModific.ModificMode == ContentModificMode.ReCode)
                            {
                                try
                                {
                                    oSession.ResponseBody = nowFiddlerResponseChange.BodyModific.GetRecodeContent(sourceResponseBody);
                                }
                                catch (Exception ex)
                                {
                                    ShowError(string.Format("error in GetRecodeContent in ReCode with [{0}]", ex.Message));
                                }
                            }
                            else
                            {
                                //oSession.utilSetResponseBody(nowFiddlerResponseChange.BodyModific.GetFinalContent(sourceResponseBody));
                                string tempResponseBody = nowFiddlerResponseChange.BodyModific.GetFinalContent(sourceResponseBody, nameValueCollection, out errMes);
                                if (errMes != null)
                                {
                                    ShowError(string.Format("error in GetFinalContent in BodyModific that [{0}]", errMes));
                                }
                                if (tempResponseBody != sourceResponseBody)
                                {
                                    oSession.utilSetResponseBody(tempResponseBody);
                                }
                            }
                        }

                        //you can use below code to modific the body
                        //oSession.utilDecodeResponse();
                        //oSession.utilReplaceInResponse("","");
                        //oSession.utilDeflateResponse();
                    }
                }
                //modific heads
                if (nowFiddlerResponseChange.HeadDelList != null && nowFiddlerResponseChange.HeadDelList.Count > 0)
                {
                    foreach (var tempDelHead in nowFiddlerResponseChange.HeadDelList)
                    {
                        oSession.ResponseHeaders.Remove(tempDelHead);
                    }
                }
                if (nowFiddlerResponseChange.HeadAddList != null && nowFiddlerResponseChange.HeadAddList.Count > 0)
                {
                    foreach (var tempAddHead in nowFiddlerResponseChange.HeadAddList)
                    {
                        if (tempAddHead.Contains(": "))
                        {
                            oSession.ResponseHeaders.Add(tempAddHead.Remove(tempAddHead.IndexOf(": ")), tempAddHead.Substring(tempAddHead.IndexOf(": ") + 2));
                        }
                        else
                        {
                            ShowError(string.Format("error to deal add head string with [{0}]", tempAddHead));
                        }
                    }
                }
                //other action
                if (nameValueCollection != null && nameValueCollection.Count > 0)
                {
                    ShowMes(string.Format("[ParameterizationContent]:{0}", nameValueCollection.MyToFormatString()));
                }
            }
        }
Ejemplo n.º 9
0
        public void AutoTamperRequestBefore(Session oSession)
        {
            //if (oSession.HTTPMethodIs("CONNECT") && oSession.HostnameIs("api.map.baidu.com"))
            //{
            //    oSession["x-OverrideSslProtocols"] = "ssl3.0";
            //}
            //oSession.oRequest["AddOrigin"] = "from lijie PC";
            if (!isOnLoad)
            {
                return;
            }
            if (myFreeHttpWindow.IsRequestRuleEnable)
            {
                //IsRequestRuleEnable is more efficient then string comparison (so if not IsRequestRuleEnable the string comparison will not execute)
                if (isSkipUiHide && oSession["ui-hide"] == "true")
                {
                    return;
                }
                if (myFreeHttpWindow.ModificSettingInfo.IsSkipConnectTunnels && oSession.RequestMethod == "CONNECT")
                {
                    return;
                }
                List <IFiddlerHttpTamper> matchItems = FiddlerSessionHelper.FindMatchTanperRule(oSession, myFreeHttpWindow.FiddlerRequestChangeList, true);
                if (matchItems != null && matchItems.Count > 0)
                {
                    foreach (var matchItem in matchItems)
                    {
                        FiddlerRequestChange nowFiddlerRequsetChange = ((FiddlerRequestChange)matchItem);
                        ListViewItem         tempListViewItem        = myFreeHttpWindow.FindListViewItemFromRule(matchItem);
                        FreeHttpWindow.MarkMatchRule(tempListViewItem);
                        MarkSession(oSession);
                        ShowMes(string.Format("macth the [requst rule {0}] with {1}", tempListViewItem.SubItems[0].Text, oSession.fullUrl));
                        FiddlerSessionTamper.ModificSessionRequest(oSession, nowFiddlerRequsetChange, ShowError, ShowMes);
                        if (myFreeHttpWindow.ModificSettingInfo.IsOnlyMatchFistTamperRule)
                        {
                            break;
                        }
                    }
                }
            }

            if (myFreeHttpWindow.IsResponseRuleEnable)
            {
                if (myFreeHttpWindow.ModificSettingInfo.IsSkipConnectTunnels && oSession.RequestMethod == "CONNECT")
                {
                    return;
                }
                List <IFiddlerHttpTamper> matchItems = FiddlerSessionHelper.FindMatchTanperRule(oSession, myFreeHttpWindow.FiddlerResponseChangeList, false);
                if (matchItems != null && matchItems.Count > 0)
                {
                    oSession.bBufferResponse = true;//  if any response rule may match the Session, we should set bBufferResponse true (When streaming is enabled for a response, each block of data read from the server is immediately passed to the client application. )
                    foreach (var matchItem in matchItems)
                    {
                        FiddlerResponseChange nowFiddlerResponseChange = ((FiddlerResponseChange)matchItem);
                        ListViewItem          tempListViewItem         = myFreeHttpWindow.FindListViewItemFromRule(matchItem);
                        if (nowFiddlerResponseChange.IsIsDirectRespons)
                        {
                            FreeHttpWindow.MarkMatchRule(tempListViewItem);
                            MarkSession(oSession);
                            ShowMes(string.Format("macth the [reponse rule {0}] with {1}", tempListViewItem.SubItems[0].Text, oSession.fullUrl));
                            FiddlerSessionTamper.ReplaceSessionResponse(oSession, nowFiddlerResponseChange, ShowError, ShowMes);
                            //oSession.state = SessionStates.Done;
                            if (myFreeHttpWindow.ModificSettingInfo.IsOnlyMatchFistTamperRule)
                            {
                                break;
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 10
0
        private void FiddlerApplication_OnWebSocketMessage(object sender, WebSocketMessageEventArgs e)
        {
            //((Bitmap)((Fiddler.Session)sender).ViewItem.ImageList.Images[34]).Save(@"D:\A1.ico", System.Drawing.Imaging.ImageFormat.Icon);
            Session          oSession         = (Session)sender;
            WebSocketMessage webSocketMessage = e.oWSM;

            if (!isOnLoad)
            {
                return;
            }
            if (webSocketMessage == null)
            {
                AddFiddlerObjectLog("get null WebSocketMessage");
                return;
            }
            if (webSocketMessage.FrameType == WebSocketFrameTypes.Close ||
                webSocketMessage.FrameType == WebSocketFrameTypes.Ping ||
                webSocketMessage.FrameType == WebSocketFrameTypes.Pong ||
                webSocketMessage.FrameType == WebSocketFrameTypes.Reservedx3 ||
                webSocketMessage.FrameType == WebSocketFrameTypes.Reservedx4 ||
                webSocketMessage.FrameType == WebSocketFrameTypes.Reservedx5 ||
                webSocketMessage.FrameType == WebSocketFrameTypes.Reservedx6 ||
                webSocketMessage.FrameType == WebSocketFrameTypes.Reservedx7 ||
                webSocketMessage.FrameType == WebSocketFrameTypes.ReservedxB ||
                webSocketMessage.FrameType == WebSocketFrameTypes.ReservedxC ||
                webSocketMessage.FrameType == WebSocketFrameTypes.ReservedxD ||
                webSocketMessage.FrameType == WebSocketFrameTypes.ReservedxE ||
                webSocketMessage.FrameType == WebSocketFrameTypes.ReservedxF)
            {
                return;
            }
            if ((myFreeHttpWindow.IsRequestRuleEnable && webSocketMessage.IsOutbound) || (myFreeHttpWindow.IsResponseRuleEnable && !webSocketMessage.IsOutbound))
            {
                if (isSkipUiHide && oSession["ui-hide"] == "true")
                {
                    return;
                }
                if (myFreeHttpWindow.ModificSettingInfo.IsSkipConnectTunnels && oSession.RequestMethod == "CONNECT")
                {
                    return;
                }
                bool isRequest = webSocketMessage.IsOutbound;
                List <IFiddlerHttpTamper> matchItems = null;
                if (isRequest)
                {
                    matchItems = FiddlerSessionHelper.FindMatchTanperRule(oSession, myFreeHttpWindow.FiddlerRequestChangeList, isRequest, webSocketMessage);
                }
                else
                {
                    //oSession.WriteResponseToStream(new MemoryStream(new Byte[] { 0x81,0x81,0x01,0x41 }), false);
                    //WebSocket ws = oSession.__oTunnel as WebSocket;
                    //ws.listMessages.Add(webSocketMessage);
                    matchItems = FiddlerSessionHelper.FindMatchTanperRule(oSession, myFreeHttpWindow.FiddlerResponseChangeList, isRequest, webSocketMessage);
                }
                if (matchItems != null && matchItems.Count > 0)
                {
                    foreach (var matchItem in matchItems)
                    {
                        ListViewItem tempListViewItem = myFreeHttpWindow.FindListViewItemFromRule(matchItem);
                        FreeHttpWindow.MarkMatchRule(tempListViewItem);
                        MarkSession(oSession);
                        ShowMes(string.Format("macth the [requst rule {0}] with {1}", tempListViewItem.SubItems[0].Text, oSession.fullUrl));
                        FiddlerSessionTamper.ModificWebSocketMessage(oSession, webSocketMessage, matchItem, isRequest, ShowError, ShowMes);
                        if (!isRequest)
                        {
                            FiddlerResponseChange nowFiddlerResponseChange = ((FiddlerResponseChange)matchItem);
                            if (nowFiddlerResponseChange.LesponseLatency > 0)
                            {
                                ShowMes(string.Format("[reponse rule {0}] is modified , now delay {1} ms", tempListViewItem.SubItems[0].Text, nowFiddlerResponseChange.LesponseLatency));
                                System.Threading.Thread.Sleep(nowFiddlerResponseChange.LesponseLatency);
                            }
                            if (myFreeHttpWindow.ModificSettingInfo.IsOnlyMatchFistTamperRule)
                            {
                                break;
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 11
0
        private void LoadRuleInfo(IFiddlerHttpTamper ruleInfo)
        {
            Action <FiddlerRequestChange> GetFiddlerRequestChangeAddition = (nowFiddlerRequestChange) =>
            {
                if ((nowFiddlerRequestChange.ParameterPickList != null && nowFiddlerRequestChange.ParameterPickList.Count > 0) || nowFiddlerRequestChange.IsHasParameter)
                {
                    rtb_ruleInfo.AddRtbStr("Addition ", Color.Red, true, new Font(FontFamily.GenericMonospace, 14));
                    if (nowFiddlerRequestChange.IsHasParameter)
                    {
                        rtb_ruleInfo.AddRtbStr("Has Parameter: ", Color.Blue, false);
                        rtb_ruleInfo.AppendText("true");
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    if (nowFiddlerRequestChange.ParameterPickList != null && nowFiddlerRequestChange.ParameterPickList.Count > 0)
                    {
                        foreach (var tempRequest in nowFiddlerRequestChange.ParameterPickList)
                        {
                            rtb_ruleInfo.AddRtbStr("Request Parameter Pick: ", Color.Blue, false);
                            rtb_ruleInfo.AppendText(tempRequest.ToString());
                            rtb_ruleInfo.AppendText("\r\n");
                        }
                    }
                }
            };
            Action <FiddlerResponseChange> GetFiddlerResponseChangeAddition = (nowFiddlerResponseChange) =>
            {
                if ((nowFiddlerResponseChange.ParameterPickList != null && nowFiddlerResponseChange.ParameterPickList.Count > 0) || nowFiddlerResponseChange.IsHasParameter || nowFiddlerResponseChange.ResponseLatency > 0)
                {
                    rtb_ruleInfo.AddRtbStr("Addition ", Color.Red, true, new Font(FontFamily.GenericMonospace, 14));
                    if (nowFiddlerResponseChange.IsHasParameter)
                    {
                        rtb_ruleInfo.AddRtbStr("Has Parameter: ", Color.Blue, false);
                        rtb_ruleInfo.AppendText("true");
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    if (nowFiddlerResponseChange.ResponseLatency > 0)
                    {
                        rtb_ruleInfo.AddRtbStr("ResponseLatency: ", Color.Blue, false);
                        rtb_ruleInfo.AppendText(nowFiddlerResponseChange.ResponseLatency + "ms");
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    if (nowFiddlerResponseChange.ParameterPickList != null && nowFiddlerResponseChange.ParameterPickList.Count > 0)
                    {
                        foreach (var tempResponse in nowFiddlerResponseChange.ParameterPickList)
                        {
                            rtb_ruleInfo.AddRtbStr("Response Parameter Pick: ", Color.Blue, false);
                            rtb_ruleInfo.AppendText(tempResponse.ToString());
                            rtb_ruleInfo.AppendText("\r\n");
                        }
                    }
                }
            };

            isLoadRuleComplete = false;
            MyControlHelper.SetControlFreeze(rtb_ruleInfo);
            MyControlHelper.SetControlFreeze(this);
            pb_ruleIcon.Image = InnerListViewItem.ImageList.Images[InnerListViewItem.ImageIndex];
            rtb_ruleInfo.Clear();
            rtb_ruleInfo.AddRtbStr("Filter ", Color.Red, true, new Font(FontFamily.GenericMonospace, 14));
            if (ruleInfo.HttpFilter.UriMatch != null)
            {
                rtb_ruleInfo.AddRtbStr("Uri: ", Color.Blue, false);
                rtb_ruleInfo.AppendText(ruleInfo.HttpFilter.UriMatch.ToString());
                rtb_ruleInfo.AppendText("\r\n");
            }
            if (ruleInfo.HttpFilter.HeadMatch != null && ruleInfo.HttpFilter.HeadMatch.HeadsFilter.Count > 0)
            {
                foreach (var tempHeaderFilter in ruleInfo.HttpFilter.HeadMatch.HeadsFilter)
                {
                    rtb_ruleInfo.AddRtbStr("Header: ", Color.Blue, false);
                    rtb_ruleInfo.AppendText(string.Format("{0} [contain] {1}", tempHeaderFilter.Key, tempHeaderFilter.Value));
                    rtb_ruleInfo.AppendText("\r\n");
                }
            }
            if (ruleInfo.HttpFilter.BodyMatch != null)
            {
                rtb_ruleInfo.AddRtbStr("Entity: ", Color.Blue, false);
                rtb_ruleInfo.AppendText(ruleInfo.HttpFilter.BodyMatch.ToString());
                rtb_ruleInfo.AppendText("\r\n");
            }
            rtb_ruleInfo.AddRtbStr("Action ", Color.Red, true, new Font(FontFamily.GenericMonospace, 14));

            switch (ruleInfo.TamperProtocol)
            {
            case TamperProtocalType.Http:
                if (ruleInfo is FiddlerRequestChange)
                {
                    lb_ruleId.Text = string.Format("Http Request Tamper Rule {0}", InnerListViewItem.SubItems[0].Text);

                    FiddlerRequestChange nowFiddlerRequestChange = ruleInfo as FiddlerRequestChange;
                    if (nowFiddlerRequestChange.IsRawReplace)
                    {
                        rtb_ruleInfo.AddRtbStr("Request Replace", Color.Blue, true);
                        rtb_ruleInfo.AppendText(nowFiddlerRequestChange.HttpRawRequest.OriginSting);
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    else
                    {
                        if (nowFiddlerRequestChange.UriModific != null && nowFiddlerRequestChange.UriModific.ModificMode != HttpHelper.ContentModificMode.NoChange)
                        {
                            rtb_ruleInfo.AddRtbStr("Request Uri Modific: ", Color.Blue, false);
                            rtb_ruleInfo.AppendText(nowFiddlerRequestChange.UriModific.ToString());
                            rtb_ruleInfo.AppendText("\r\n");
                        }
                        if (nowFiddlerRequestChange.HeadDelList != null && nowFiddlerRequestChange.HeadDelList.Count > 0)
                        {
                            foreach (var tempHeaderDel in nowFiddlerRequestChange.HeadDelList)
                            {
                                rtb_ruleInfo.AddRtbStr("Request Head Delete: ", Color.Blue, false);
                                rtb_ruleInfo.AppendText(tempHeaderDel);
                            }
                        }
                        if (nowFiddlerRequestChange.HeadAddList != null && nowFiddlerRequestChange.HeadAddList.Count > 0)
                        {
                            foreach (var tempHeaderAdd in nowFiddlerRequestChange.HeadAddList)
                            {
                                rtb_ruleInfo.AddRtbStr("Request Head Add: ", Color.Blue, false);
                                rtb_ruleInfo.AppendText(tempHeaderAdd);
                                rtb_ruleInfo.AppendText("\r\n");
                            }
                        }
                        if (nowFiddlerRequestChange.BodyModific != null && nowFiddlerRequestChange.BodyModific.ModificMode != HttpHelper.ContentModificMode.NoChange)
                        {
                            rtb_ruleInfo.AddRtbStr("Request Entity Modific: ", Color.Blue, false);
                            rtb_ruleInfo.AppendText(nowFiddlerRequestChange.BodyModific.ToString());
                            rtb_ruleInfo.AppendText("\r\n");
                        }
                    }
                    GetFiddlerRequestChangeAddition(nowFiddlerRequestChange);
                }
                else if (ruleInfo is FiddlerResponseChange)
                {
                    lb_ruleId.Text = string.Format("Http Response Tamper Rule {0}", InnerListViewItem.SubItems[0].Text);

                    FiddlerResponseChange nowFiddlerResponseChange = ruleInfo as FiddlerResponseChange;
                    if (nowFiddlerResponseChange.IsRawReplace)
                    {
                        rtb_ruleInfo.AddRtbStr("Request Replace", Color.Blue, true);
                        rtb_ruleInfo.AppendText(nowFiddlerResponseChange.HttpRawResponse.OriginSting);
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    else
                    {
                        if (nowFiddlerResponseChange.HeadDelList != null && nowFiddlerResponseChange.HeadDelList.Count > 0)
                        {
                            foreach (var tempHeaderDel in nowFiddlerResponseChange.HeadDelList)
                            {
                                rtb_ruleInfo.AddRtbStr("Response Head Delete: ", Color.Blue, false);
                                rtb_ruleInfo.AppendText(tempHeaderDel);
                                rtb_ruleInfo.AppendText("\r\n");
                            }
                        }
                        if (nowFiddlerResponseChange.HeadAddList != null && nowFiddlerResponseChange.HeadAddList.Count > 0)
                        {
                            foreach (var tempHeaderAdd in nowFiddlerResponseChange.HeadAddList)
                            {
                                rtb_ruleInfo.AddRtbStr("Response Head Add: ", Color.Blue, false);
                                rtb_ruleInfo.AppendText(tempHeaderAdd);
                                rtb_ruleInfo.AppendText("\r\n");
                            }
                        }
                        if (nowFiddlerResponseChange.BodyModific != null && nowFiddlerResponseChange.BodyModific.ModificMode != HttpHelper.ContentModificMode.NoChange)
                        {
                            rtb_ruleInfo.AddRtbStr("Response Entity Modific: ", Color.Blue, false);
                            rtb_ruleInfo.AppendText(nowFiddlerResponseChange.BodyModific.ToString());
                            rtb_ruleInfo.AppendText("\r\n");
                        }
                    }

                    GetFiddlerResponseChangeAddition(nowFiddlerResponseChange);
                }
                break;

            case TamperProtocalType.WebSocket:
                if (ruleInfo is FiddlerRequestChange)
                {
                    lb_ruleId.Text = string.Format("Websocket Send Tamper Rule {0}", InnerListViewItem.SubItems[0].Text);

                    FiddlerRequestChange nowFiddlerWebSocketRequestChange = ruleInfo as FiddlerRequestChange;
                    if (nowFiddlerWebSocketRequestChange.BodyModific != null && nowFiddlerWebSocketRequestChange.BodyModific.ModificMode != HttpHelper.ContentModificMode.NoChange)
                    {
                        rtb_ruleInfo.AddRtbStr("Socket Payload Modific: ", Color.Blue, false);
                        rtb_ruleInfo.AppendText(nowFiddlerWebSocketRequestChange.BodyModific.ToString());
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    GetFiddlerRequestChangeAddition(nowFiddlerWebSocketRequestChange);
                }
                else if (ruleInfo is FiddlerResponseChange)
                {
                    lb_ruleId.Text = string.Format("Websocket Receive Tamper Rule {0}", InnerListViewItem.SubItems[0].Text);

                    FiddlerResponseChange nowFiddlerWebSocketResponseChange = ruleInfo as FiddlerResponseChange;
                    if (nowFiddlerWebSocketResponseChange.BodyModific != null && nowFiddlerWebSocketResponseChange.BodyModific.ModificMode != HttpHelper.ContentModificMode.NoChange)
                    {
                        rtb_ruleInfo.AddRtbStr("Socket Payload Modific: ", Color.Blue, false);
                        rtb_ruleInfo.AppendText(nowFiddlerWebSocketResponseChange.BodyModific.ToString());
                        rtb_ruleInfo.AppendText("\r\n");
                    }
                    GetFiddlerResponseChangeAddition(nowFiddlerWebSocketResponseChange);
                }

                break;

            default:
                break;
            }
            if (!string.IsNullOrEmpty(ruleInfo.HttpFilter.Name))
            {
                lb_ruleId.Text += string.Format(" ({0})", ruleInfo.HttpFilter.Name);
            }
            isLoadRuleComplete = true;
            MyControlHelper.SetControlUnfreeze(rtb_ruleInfo);
            MyControlHelper.SetControlUnfreeze(this);
            if (rtb_ruleInfo.Rtf.EndsWith("\r\n"))
            {
                rtb_ruleInfo.Rtf = rtb_ruleInfo.Rtf.Remove(rtb_ruleInfo.Rtf.Length - 2, 2);
            }
        }
Ejemplo n.º 12
0
        private void pb_ruleComfrim_Click(object sender, EventArgs e)
        {
            FiddlerRequsetChange  nowRequestChange  = null;
            FiddlerResponseChange nowResponseChange = null;
            IFiddlerHttpTamper    fiddlerHttpTamper = null;
            ListView tamperRuleListView             = null;

            try
            {
                switch (tabControl_Modific.SelectedIndex)
                {
                case 0:
                    nowRequestChange = GetRequestModificInfo();
                    break;

                case 1:
                    nowRequestChange = GetRequestReplaceInfo();
                    break;

                case 2:
                    nowResponseChange = GetResponseModificInfo();
                    break;

                case 3:
                    nowResponseChange = GetResponseReplaceInfo();
                    break;

                default:
                    throw new Exception("unknow http tamper tab");
                    //break;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Stop", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                MarkControl(tabControl_Modific.SelectedTab, Color.Plum, 2);
                nowRequestChange  = null;
                nowResponseChange = null;
            }
            finally
            {
                if (nowRequestChange != null)
                {
                    fiddlerHttpTamper  = nowRequestChange;
                    tamperRuleListView = lv_requestRuleList;
                }
                else if (nowResponseChange != null)
                {
                    fiddlerHttpTamper  = nowResponseChange;
                    tamperRuleListView = lv_responseRuleList;
                }
            }

            if (fiddlerHttpTamper == null)
            {
                return;
            }

            if (fiddlerHttpTamper.HttpFilter == null || fiddlerHttpTamper.HttpFilter.UriMatch == null)
            {
                MessageBox.Show("you Uri Filter is not legal \r\n check it again", "edit again");
                MarkControl(groupBox_urlFilter, Color.Plum, 2);
                return;
            }

            ListViewItem nowRuleItem = null;

            foreach (ListViewItem tempItem in tamperRuleListView.Items)
            {
                if (tempItem == EditListViewItem)
                {
                    continue;
                }
                //if (fiddlerHttpTamper.HttpFilter.UriMatch.Equals(tempItem.Tag))
                if (fiddlerHttpTamper.HttpFilter.Equals(tempItem.Tag))
                {
                    MarkRuleItem(tempItem, Color.Plum, 2);
                    DialogResult tempDs;
                    //add mode
                    if (EditListViewItem == null)
                    {
                        tempDs = MessageBox.Show(string.Format("find same url filter with [Rule:{0}], do you want create the same uri rule \r\n    [Yes]       new a same url filter rule \r\n    [No]       update the rule \r\n    [Cancel]  give up save", tempItem.SubItems[0].Text), "find same rule ", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                        if (tempDs == DialogResult.Yes)
                        {
                            continue;
                        }
                        else if (tempDs == DialogResult.No)
                        {
                            nowRuleItem = tempItem;
                            SyncEnableSateToIFiddlerHttpTamper(nowRuleItem, fiddlerHttpTamper);
                            UpdataRuleToListView(nowRuleItem, fiddlerHttpTamper, true);
                            break;
                        }
                        else
                        {
                            return;
                        }
                    }
                    //edit mode
                    else
                    {
                        tempDs = MessageBox.Show(string.Format("find same uri filter with [Rule:{0}], do you want save the rule \r\n    [Yes]       skip the same uri filter rule \r\n    [No]       remove the rule \r\n    [Cancel]  give up save", tempItem.SubItems[0].Text), "find same rule ", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                        if (tempDs == DialogResult.Yes)
                        {
                            continue;
                        }
                        else if (tempDs == DialogResult.No)
                        {
                            tamperRuleListView.Items.Remove(tempItem);
                            continue;
                        }
                        else
                        {
                            return;
                        }
                    }
                }
            }

            if (nowRuleItem == null)
            {
                if (EditListViewItem == null)
                {
                    AddRuleToListView(tamperRuleListView, fiddlerHttpTamper, true);
                }
                else
                {
                    SyncEnableSateToIFiddlerHttpTamper(EditListViewItem, fiddlerHttpTamper);
                    UpdataRuleToListView(EditListViewItem, fiddlerHttpTamper, true);
                }
            }
            ChangeEditRuleMode(RuleEditMode.NewRuleMode, null, null);
        }
Ejemplo n.º 13
0
        public void AutoTamperRequestBefore(Session oSession)
        {
            //if (oSession.HTTPMethodIs("CONNECT") && oSession.HostnameIs("api.map.baidu.com"))
            //{
            //    oSession["x-OverrideSslProtocols"] = "ssl3.0";
            //}
            //oSession.oRequest["AddOrigin"] = "from lijie PC";
            if (!isOnLoad)
            {
                return;
            }
            if (myFreeHttpWindow.IsRequestRuleEnable)
            {
                //IsRequestRuleEnable is more efficient then string comparison (so if not IsRequestRuleEnable the string comparison will not execute)
                if (isSkipUiHide && oSession["ui-hide"] == "true")
                {
                    return;
                }
                if (myFreeHttpWindow.ModificSettingInfo.IsSkipTlsHandshake && oSession.RequestMethod == "CONNECT")
                {
                    return;
                }
                List <ListViewItem> matchItems = FiddlerSessionHelper.FindMatchTanperRule(oSession, myFreeHttpWindow.RequestRuleListView, true);
                if (matchItems != null && matchItems.Count > 0)
                {
                    foreach (var matchItem in matchItems)
                    {
                        FiddlerRequsetChange nowFiddlerRequsetChange = ((FiddlerRequsetChange)matchItem.Tag);
                        FreeHttpWindow.MarkMatchRule(matchItem);
                        MarkSession(oSession);
                        ShowMes(string.Format("macth the [requst rule {0}] with {1}", matchItem.SubItems[0].Text, oSession.fullUrl));
                        FiddlerSessionTamper.ModificSessionRequest(oSession, nowFiddlerRequsetChange, ShowError, ShowMes);
                        if (myFreeHttpWindow.ModificSettingInfo.IsOnlyMatchFistTamperRule)
                        {
                            break;
                        }
                    }
                }
            }

            if (myFreeHttpWindow.IsResponseRuleEnable)
            {
                if (myFreeHttpWindow.ModificSettingInfo.IsSkipTlsHandshake && oSession.RequestMethod == "CONNECT")
                {
                    return;
                }
                List <ListViewItem> matchItems = FiddlerSessionHelper.FindMatchTanperRule(oSession, myFreeHttpWindow.ResponseRuleListView, false);
                if (matchItems != null && matchItems.Count > 0)
                {
                    foreach (var matchItem in matchItems)
                    {
                        FiddlerResponseChange nowFiddlerResponseChange = ((FiddlerResponseChange)matchItem.Tag);
                        if (nowFiddlerResponseChange.IsIsDirectRespons)
                        {
                            FreeHttpWindow.MarkMatchRule(matchItem);
                            MarkSession(oSession);
                            ShowMes(string.Format("macth the [reponse rule {0}] with {1}", matchItem.SubItems[0].Text, oSession.fullUrl));
                            FiddlerSessionTamper.ReplaceSessionResponse(oSession, nowFiddlerResponseChange, ShowError, ShowMes);
                            //oSession.state = SessionStates.Done;
                            if (myFreeHttpWindow.ModificSettingInfo.IsOnlyMatchFistTamperRule)
                            {
                                break;
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Modific the http response in oSession with your rule (if IsRawReplace and  IsIsDirectRespons it will not call ReplaceSessionResponse)
        /// </summary>
        /// <param name="oSession">oSession</param>
        /// <param name="nowFiddlerResponseChange">FiddlerResponseChange</param>
        public static void ModificSessionResponse(Session oSession, FiddlerResponseChange nowFiddlerResponseChange, Action <string> ShowError, Action <string> ShowMes)
        {
            if (nowFiddlerResponseChange.ParameterPickList != null)
            {
                PickSessionParameter(oSession, nowFiddlerResponseChange, ShowError, ShowMes, false);
            }
            if (nowFiddlerResponseChange.IsRawReplace)
            {
                //if IsIsDirectRespons do nothing
                if (!nowFiddlerResponseChange.IsIsDirectRespons)
                {
                    ReplaceSessionResponse(oSession, nowFiddlerResponseChange, ShowError, ShowMes);
                }
            }
            else
            {
                if (nowFiddlerResponseChange.HeadDelList != null && nowFiddlerResponseChange.HeadDelList.Count > 0)
                {
                    foreach (var tempDelHead in nowFiddlerResponseChange.HeadDelList)
                    {
                        oSession.ResponseHeaders.Remove(tempDelHead);
                    }
                }
                if (nowFiddlerResponseChange.HeadAddList != null && nowFiddlerResponseChange.HeadAddList.Count > 0)
                {
                    foreach (var tempAddHead in nowFiddlerResponseChange.HeadAddList)
                    {
                        if (tempAddHead.Contains(": "))
                        {
                            oSession.ResponseHeaders.Add(tempAddHead.Remove(tempAddHead.IndexOf(": ")), tempAddHead.Substring(tempAddHead.IndexOf(": ") + 2));
                        }
                        else
                        {
                            ShowError(string.Format("error to deal add head string with [{0}]", tempAddHead));
                        }
                    }
                }
                if (nowFiddlerResponseChange.BodyModific != null && nowFiddlerResponseChange.BodyModific.ModificMode != ContentModificMode.NoChange)
                {
                    //you should not change the media data as string
                    string sourceResponseBody = null;
                    try
                    {
                        sourceResponseBody = oSession.GetResponseBodyAsString();
                    }
                    catch (Exception ex)
                    {
                        ShowError(string.Format("error in GetResponseBodyAsString [{0}]", ex.Message));
                        oSession.utilDecodeResponse();
                        sourceResponseBody = oSession.GetResponseBodyEncoding().GetString(oSession.ResponseBody);
                    }
                    finally
                    {
                        oSession.utilSetResponseBody(nowFiddlerResponseChange.BodyModific.GetFinalContent(sourceResponseBody));
                    }

                    //you can use below code to modific the body
                    //oSession.utilDecodeResponse();
                    //oSession.utilReplaceInResponse("","");
                    //oSession.utilDeflateResponse();
                }
            }
        }
Ejemplo n.º 15
0
        public static async Task <RuleDetails> GetRemoteRuleAsync(string token, string apiUrl = _getRuleUrl)
        {
            HttpResponseMessage responseMessage = await httpClient.GetAsync(string.Format(apiUrl, ConfigurationData.BaseUrl, token));

            if (responseMessage.StatusCode != System.Net.HttpStatusCode.OK)
            {
                return(null);
            }
            RuleDetails ruleDetails = MyJsonHelper.JsonDataContractJsonSerializer.JsonStringToObject <RuleDetails>(await responseMessage.Content.ReadAsStringAsync());

            if (ruleDetails == null)
            {
                return(null);
            }

            string nowVersion = UserComputerInfo.GetRuleVersion();

            if (ruleDetails.RuleStaticDataCell != null)
            {
                //if (ruleDetails.RuleStaticData.RuleVersion == nowVersion)
                ruleDetails.StaticDataCollection = MyJsonHelper.JsonDataContractJsonSerializer.JsonStringToObject <ActuatorStaticDataCollection>(ruleDetails.RuleStaticDataCell.RuleContent);
            }

            if (ruleDetails.RuleGroupCell != null)
            {
                //if (ruleDetails.RuleStaticData.RuleVersion == nowVersion)
                ruleDetails.RuleGroup = MyJsonHelper.JsonDataContractJsonSerializer.JsonStringToObject <FiddlerRuleGroup>(ruleDetails.RuleGroupCell.RuleContent);
            }

            if (ruleDetails.RequestRuleCells != null || ruleDetails.ResponseRuleCells != null)
            {
                ruleDetails.ModificHttpRuleCollection = new FiddlerModificHttpRuleCollection();
                ruleDetails.ModificHttpRuleCollection.RequestRuleList  = new List <FiddlerRequestChange>();
                ruleDetails.ModificHttpRuleCollection.ResponseRuleList = new List <FiddlerResponseChange>();
                //fill RequestRule
                foreach (var cell in ruleDetails.RequestRuleCells)
                {
                    if (cell.RuleVersion != nowVersion)
                    {
                        ruleDetails.ModificHttpRuleCollection.RequestRuleList.Add(new FiddlerRequestChange()
                        {
                            IsEnable   = false,
                            HttpFilter = new FiddlerHttpFilter()
                            {
                                Name     = "unmatch rule version",
                                UriMatch = new FiddlerUriMatch()
                                {
                                    MatchMode = FiddlerUriMatchMode.Is,
                                    MatchUri  = "unmatch rule version"
                                }
                            }
                        });
                    }
                    else
                    {
                        FiddlerRequestChange tmepRequestChange = MyJsonHelper.JsonDataContractJsonSerializer.JsonStringToObject <FiddlerRequestChange>(cell.RuleContent);
                        ruleDetails.ModificHttpRuleCollection.RequestRuleList.Add(tmepRequestChange ?? new FiddlerRequestChange()
                        {
                            IsEnable   = false,
                            HttpFilter = new FiddlerHttpFilter()
                            {
                                Name     = "can not parse this rule",
                                UriMatch = new FiddlerUriMatch()
                                {
                                    MatchMode = FiddlerUriMatchMode.Is,
                                    MatchUri  = "can not parse this rule"
                                }
                            }
                        });
                    }
                }
                //fill ResponseRule
                foreach (var cell in ruleDetails.ResponseRuleCells)
                {
                    if (cell.RuleVersion != nowVersion)
                    {
                        ruleDetails.ModificHttpRuleCollection.ResponseRuleList.Add(new FiddlerResponseChange()
                        {
                            IsEnable   = false,
                            HttpFilter = new FiddlerHttpFilter()
                            {
                                Name     = "unmatch rule version",
                                UriMatch = new FiddlerUriMatch()
                                {
                                    MatchMode = FiddlerUriMatchMode.Is,
                                    MatchUri  = "unmatch rule version"
                                }
                            }
                        });
                    }
                    else
                    {
                        FiddlerResponseChange tmepRequestChange = MyJsonHelper.JsonDataContractJsonSerializer.JsonStringToObject <FiddlerResponseChange>(cell.RuleContent);
                        ruleDetails.ModificHttpRuleCollection.ResponseRuleList.Add(tmepRequestChange ?? new FiddlerResponseChange()
                        {
                            IsEnable   = false,
                            HttpFilter = new FiddlerHttpFilter()
                            {
                                Name     = "can not parse this rule",
                                UriMatch = new FiddlerUriMatch()
                                {
                                    MatchMode = FiddlerUriMatchMode.Is,
                                    MatchUri  = "can not parse this rule"
                                }
                            }
                        });
                    }
                }
            }

            return(ruleDetails);
        }