public new bool Equals(object targetFiddlerHttpFilter) { IFiddlerHttpTamper fiddlerHttpTamper = targetFiddlerHttpFilter as IFiddlerHttpTamper; if (fiddlerHttpTamper == null) { return(false); } return(this.Equals(fiddlerHttpTamper.HttpFilter)); }
public void RefreshRuleInfo() { if (InnerListViewItem == null || InnerListViewItem.ListView == null) { Close(); return; } if (InnerListViewItem.Tag != null && InnerListViewItem.Tag is IFiddlerHttpTamper) { IFiddlerHttpTamper nowRule = InnerListViewItem.Tag as IFiddlerHttpTamper; LoadRuleInfo(nowRule); } }
private void UpdataRuleToListView(ListViewItem yourListViewItem, IFiddlerHttpTamper yourHttpTamper, bool isMark) { yourListViewItem.Tag = yourHttpTamper; yourListViewItem.SubItems[1].Text = GetFiddlerHttpFilterName(yourHttpTamper.HttpFilter); yourListViewItem.ImageIndex = yourHttpTamper.IsRawReplace ? 1 : 0; yourListViewItem.ToolTipText = yourHttpTamper.HttpFilter.ToString(); yourListViewItem.Checked = yourHttpTamper.IsEnable; if (isMark) { MarkRuleItem(yourListViewItem); PutWarn(string.Format("Updata {0} {1}", yourListViewItem.ListView.Columns[1].Text, yourListViewItem.SubItems[0].Text)); } }
private void AddRuleToListView(ListView yourListViews, IFiddlerHttpTamper yourHttpTamper, bool isMark) { ListViewItem nowRuleItem = new ListViewItem(new string[] { (yourListViews.Items.Count + 1).ToString(), GetFiddlerHttpFilterName(yourHttpTamper.HttpFilter) }, yourHttpTamper.IsRawReplace ? 1 : 0); nowRuleItem.Tag = yourHttpTamper; nowRuleItem.ToolTipText = yourHttpTamper.HttpFilter.ToString(); nowRuleItem.Checked = yourHttpTamper.IsEnable; yourListViews.Items.Add(nowRuleItem); if (isMark) { MarkRuleItem(nowRuleItem); PutWarn(string.Format("Add {0} {1}", yourListViews.Columns[1].Text, nowRuleItem.SubItems[0].Text)); } AdjustRuleListViewIndex(yourListViews); }
private void MyCBalloon_Load(object sender, EventArgs e) { isLoadRuleComplete = false; if (InnerListViewItem != null && InnerListViewItem.Tag is IFiddlerHttpTamper) { IFiddlerHttpTamper nowRule = InnerListViewItem.Tag as IFiddlerHttpTamper; LoadRuleInfo(nowRule); lastListViewItemRectangle = InnerListViewItem.Bounds; timer.Start(); } else { MessageBox.Show("can not find rule data ", "Stop", MessageBoxButtons.OK, MessageBoxIcon.Stop); this.Close(); } }
private void AddRuleToListView(ListView yourListViews, IFiddlerHttpTamper yourHttpTamper, bool isMark) { //TamperProtocalType tempProtocolMode; //if (!Enum.TryParse<TamperProtocalType>(yourHttpTamper.TamperProtocol, out tempProtocolMode)) //{ // tempProtocolMode = TamperProtocalType.Http; // //throw new Exception("unkonw protocol"); //} int tempListViewItemImageIndex = yourHttpTamper.TamperProtocol == TamperProtocalType.WebSocket ? 4 : yourHttpTamper.IsRawReplace ? 1 : 0; ListViewItem nowRuleItem = new ListViewItem(new string[] { (yourListViews.Items.Count + 1).ToString(), GetFiddlerHttpFilterName(yourHttpTamper.HttpFilter) }, tempListViewItemImageIndex); nowRuleItem.Tag = yourHttpTamper; nowRuleItem.ToolTipText = yourHttpTamper.HttpFilter.ToString(); nowRuleItem.Checked = yourHttpTamper.IsEnable; yourListViews.Items.Add(nowRuleItem); AdjustRuleListViewIndex(yourListViews); RefreshFiddlerRuleList(yourListViews); if (isMark) { MarkRuleItem(nowRuleItem); PutWarn(string.Format("Add {0} {1}", yourListViews.Columns[1].Text, nowRuleItem.SubItems[0].Text)); } }
public ListViewItem FindListViewItemFromRule(IFiddlerHttpTamper yourRule) { ListViewItem markItem = null; if (yourRule is FiddlerRequestChange) { foreach (ListViewItem tempItem in RequestRuleListView.Items) { if (yourRule == tempItem.Tag) { markItem = tempItem; break; } } } else if (yourRule is FiddlerResponseChange) { foreach (ListViewItem tempItem in ResponseRuleListView.Items) { if (yourRule == tempItem.Tag) { markItem = tempItem; break; } } } else { throw new Exception("unknow IFiddlerHttpTamper"); } if (markItem == null) { throw new Exception("can not find ListViewItem"); } return(markItem); }
public static void PickSessionParameter(Session oSession, IFiddlerHttpTamper nowFiddlerHttpTamper, Action <string> ShowError, Action <string> ShowMes, bool isRequest, WebSocketMessage webSocketMessage = null) { Func <string, ParameterPick, string> PickFunc = (sourceStr, parameterPick) => { try { return(ParameterPickTypeEngine.dictionaryParameterPickFunc[parameterPick.PickType].ParameterPickFunc(sourceStr, parameterPick.PickTypeExpression, parameterPick.PickTypeAdditional)); } catch (Exception) { return(null); } }; bool isWebSocket = webSocketMessage != null; if (nowFiddlerHttpTamper.ParameterPickList != null) { foreach (ParameterPick parameterPick in nowFiddlerHttpTamper.ParameterPickList) { string pickResult = null; string pickSource = null; switch (parameterPick.PickRange) { case ParameterPickRange.Line: if (isRequest) { pickSource = oSession.fullUrl; if (string.IsNullOrEmpty(pickSource)) { pickResult = null; break; } } else { if (oSession.oResponse.headers == null) { pickResult = null; break; } else { //pickSource = string.Format("{0} {1} {}", oSession.oResponse.headers.HTTPVersion, oSession.oResponse.headers.HTTPResponseCode,oSession.oResponse.headers.StatusDescription); pickSource = string.Format("{0} {1}", oSession.oResponse.headers.HTTPVersion, oSession.oResponse.headers.HTTPResponseStatus); } } pickResult = PickFunc(pickSource, parameterPick); break; case ParameterPickRange.Heads: if (isWebSocket) { ShowError("[ParameterizationPick] can not pick parameter in head when the session is websocket"); break; } IEnumerable <HTTPHeaderItem> headerItems = isRequest ? (IEnumerable <HTTPHeaderItem>)oSession.RequestHeaders : (IEnumerable <HTTPHeaderItem>)oSession.ResponseHeaders; foreach (HTTPHeaderItem tempHead in headerItems) { pickResult = PickFunc(tempHead.ToString(), parameterPick); if (pickResult != null) { break; } } break; case ParameterPickRange.Entity: if (isWebSocket) { if (webSocketMessage.PayloadLength == 0) { pickResult = null; break; } pickSource = webSocketMessage.PayloadAsString(); pickResult = PickFunc(pickSource, parameterPick); } else { if (((oSession.requestBodyBytes == null || oSession.requestBodyBytes.Length == 0) && isRequest) && ((oSession.ResponseBody == null || oSession.ResponseBody.Length == 0) && isRequest)) { pickResult = null; break; } pickSource = isRequest ? oSession.GetRequestBodyAsString() : oSession.GetResponseBodyAsString(); pickResult = PickFunc(pickSource, parameterPick); } break; default: ShowError("[ParameterizationPick] unkonw pick range"); break; } if (pickResult == null) { ShowMes(string.Format("[ParameterizationPick] can not find the parameter with [{0}]", parameterPick.ParameterName)); } else { ShowMes(string.Format("[ParameterizationPick] pick the parameter [{0} = {1}]", parameterPick.ParameterName, pickResult)); if (nowFiddlerHttpTamper.ActuatorStaticDataController.SetActuatorStaticData(parameterPick.ParameterName, pickResult)) { ShowMes(string.Format("[ParameterizationPick] add the parameter [{0}] to ActuatorStaticDataCollection", parameterPick.ParameterName)); } else { ShowError(string.Format("[ParameterizationPick] fail to add the parameter [{0}] to ActuatorStaticDataCollection", parameterPick.ParameterName)); } } } } else { ShowError("[ParameterizationPick] not find ParameterPick to pick"); } }
/// <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())); } } } } } }
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); } }
/// <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)); } } } }
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); }
private void SyncEnableSateToIFiddlerHttpTamper(ListViewItem yourListViewItem, IFiddlerHttpTamper yourHttpTamper) { if (yourListViewItem != null && yourHttpTamper != null) { yourHttpTamper.IsEnable = yourListViewItem.Checked; } }