.NET Native 应用程序相当于修改标头 Firefox Addon

2024-01-05

我正在尝试用 C# 开发一个袜子隧道应用程序,它能够通过使用添加和修改的标头请求来打开网站(类似于修改标题 Firefox 插件 https://addons.mozilla.org/en-US/firefox/addon/modify-headers/)并通过代理(最好是袜子)隧道传输数据。请问有人可以指定我可能需要的任何资源吗?或者任何可以执行相同功能的替代方案,我可以构建的开源,等等。谢谢!

ps:应用程序还应该能够打开https和其他常见的网络协议


一种方法是使用HttpSys并创建一个本地代理服务器来处理环回请求127.0.0.1地址。您可以将系统代理更改为该地址/端口,并位于客户端和服务器之间。

这将允许您修改请求/响应数据包和标头。有一个例子在这里 http://mikehadlow.blogspot.com/2006/07/playing-with-httpsys.html这种方法在 C# 中的应用,我在下面对此进行了修改以展示它是如何工作的。

public class MyProxy
{
    private readonly HttpListener listener;

    public MyProxy()
    {
        listener = new HttpListener();
    }

    public void Start()
    {
        listener.Prefixes.Add("http://*:8888/");
        listener.Prefixes.Add("https://*:8889/");
        listener.Start();
        Console.WriteLine("Proxy started, hit enter to stop");
        listener.BeginGetContext(GetContextCallback, null);
        Console.ReadLine();
        listener.Stop();
    }

    public void GetContextCallback(IAsyncResult result)
    {
        var context = listener.EndGetContext(result);
        listener.BeginGetContext(GetContextCallback, null);

        var request = context.Request;
        var response = context.Response;
        var url = request.Url;

        UriBuilder builder = new UriBuilder(url);
        builder.Port = url.Port == 8888 ? 80 : 443;
        url = builder.Uri;

        WebRequest webRequest = WebRequest.Create(url);

        webRequest.Proxy = GlobalProxySelection.GetEmptyWebProxy();
        WebResponse webResponse = webRequest.GetResponse();
        using (Stream reader = webResponse.GetResponseStream())
        {
            using (Stream writer = response.OutputStream)
            {
                reader.CopyTo(writer);
            }
        }
    }
}

这种方法的缺点是它的级别相当低,并且会影响用户计算机上的所有流量,这可能是不可取的。您必须处理 SSL 请求,并且它还会影响任何现有的已配置代理。

另一种替代方法是使用Microsoft Internet ControlsCOM 组件并扩展WebBrowser班级。有一个SO在这里提问 https://stackoverflow.com/questions/937573/changing-the-useragent-of-the-webbrowser-control-winforms-c这表明了该方法。不幸的是版本WebBrowser.NET 命名空间中不实现请求响应对象。有趣的部分如下。

public class ExtendedWebBrowser : WebBrowser
{
    ...

    void BeforeNavigate(object pDisp, ref object url, ref object flags,
                       ref object targetFrameName, ref object postData, 
                       ref object headers, ref bool cancel)
    {
         if (!headers.Contains("X-RequestFlag")
         {
             headers += "X-RequestFlag: true\r\n";

             // append custom header here

             // cancel current request
             cancel = true;

             // re-request with amended details
             Navigate((string)url, (string)targetFrameName, (byte[])postData, 
                      (string)headers);
         }
         else
         {
             base.BeforeNavigate(...);
         }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET Native 应用程序相当于修改标头 Firefox Addon 的相关文章

  • PHP header() 和 jquery mobile

    我想使用 php header Location newpage php 进行重定向 我没有收到错误 但 Jquery mobile 似乎无法加载目标页面 并且地址栏仍保留旧地址 请问您有什么建议吗 Thanks 尝试添加data ajax
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 回发或回调参数无效。使用“”启用事件验证

    当我从客户端回发页面时 出现以下错误 我有修改客户端 asp ListBox 的 JavaScript 代码 我们该如何解决这个问题 错误详细信息如下 Server Error in XXX Application Invalid post
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • 私有模板函数

    我有一堂课 C h class C private template
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N

随机推荐

  • anaconda下导入OpenCV失败

    我正在尝试在 Anaconda 下使用 OpenCV for Python2 7 8 final 0 我全新安装了 Anaconda 然后使用 conda 工具导入了 OpenCV 的最新 win 64 发行版 2 4 9 1 np19py
  • Nhibernate QueryOver Orderby

    我试图在 queryover 调用上解耦 orderby 但这无法编译 protected static void AddOrder
  • C# 如何禁用某个按键

    当按下 ENTER 键时 如何防止插入符号转到文本框中的下一行 换句话说 如何禁用文本框中的 ENTER 或 RETURN 键 你可以写OnKeyDown事件 你可以使用e SuppressKeyPress告诉 NET 您处理该密钥 像这样
  • 如何使用 C++ std::ostream 和类似 printf 的格式?

    我正在学习C cout是一个实例std ostream班级 如何用它打印格式化字符串 我仍然可以使用printf 但我想学习一种正确的 C 方法 可以利用 C 的所有优点 我认为这应该是可能的std ostream 但我找不到正确的方法 在
  • 如何使用 socket.io 判断哪个套接字连接单击了按钮?

    如果页面上有一个按钮 并且您想确保在另一个套接字单击其按钮之前无法再次单击该按钮 如果套接字 a 单击 我应该禁用该按钮 直到另一个套接字发送一条消息 表明他们单击了按钮 然后返回第四个 buttonTurns on click funct
  • 如何在 Archlinux 中使用 gcc 7.2 编译 gcc 6.4.0

    我正在尝试在 Archlinux 中与 gcc 7 2 独立编译 gcc 6 4 0 配置如下 configure prefix INSTALL PREFIX enable languages c c fortran enable thre
  • Lambda 函数作为构造函数中 std::function 的默认参数

    我希望在类的构造函数中为函子参数提供一个默认函子 作为一个最小的例子 我想出了一个应该作为过滤器的类 它过滤类型的元素T如果过滤器函数返回 true 过滤器函数应该在构造函数中提供 默认为 接受所有 过滤器函数 template
  • 如何使用循环在每个 div 中添加类

    这是我的结构 我想在每两个 div 中添加奇偶类 所以我怎样才能使用 JavaScript 循环实现这个结构我尝试了一切 但我什么也没得到我正在学习 JavaScript 循环所以任何人都请帮助我 var i 0 CollectionInn
  • 动态代码执行:字符串 -> 运行时代码 VB.net

    我正在尝试在运行时执行字符串内的一些代码 IE Dim code As String IIf 1 2 True False 我如何运行里面的代码code细绳 正如 ElektroStudios 所说 正确的方法是使用CodeDom编译器 h
  • ExtJS 6 plugin.rowwidget 在创建行主体组件时获取绑定记录

    我有一个网格Ext grid plugin RowWidget http docs sencha com extjs 6 2 0 classic Ext grid plugin RowWidget html 当我展开行时 我必须使用行记录数
  • Jquery UI 选项卡:下一个和上一个基于选择框启用/禁用

    我目前正在使用 Jquery UI 选项卡 我只能使用下一个 上一个按钮进行操作 这将迫使用户按顺序浏览选项卡 在我的第一个选项卡中 我有一组动态选择框 我试图让用户在启用 下一步 按钮之前从对应的类别及其子类别中选择一个类别及其子类别 但
  • 在 C++ 中将结构体作为构造函数参数传递

    我已尽我所能 但在这个特定主题上找不到太多内容 我必须采用大量变量 可能是多个对象 并将它们传递给一组函数 所以我认为这是最好的方法 我想将一个结构传递给未定义该结构的类的构造函数 这可能吗 我的代码看起来像这样 class myClass
  • 在自定义 JsonConverter 的 ReadJson 方法中处理 null 对象

    我有一个 Newtonsoft JSON NETJsonConverter帮助反序列化类型为抽象类的属性 它的要点如下 public class PetConverter JsonConverter public override bool
  • 如果 socket.setdefaulttimeout() 不起作用,我该怎么办?

    我正在编写一个脚本 多线程 来从网站检索内容 并且该网站不是很稳定 所以时不时地会出现挂起的 http 请求 甚至无法超时socket setdefaulttimeout 由于我无法控制该网站 我唯一能做的就是改进我的代码 但我现在没有想法
  • RestKit 和 AFNetworking 构建错误

    当我尝试将 RestKit api 导入项目时 出现以下错误 Documents Code RestTest RestKit Code Network RKHTTPRequestOperation h 21 9 AFNetworking h
  • 连接 Pandas 日期时间

    我有这个问题的解决方案 实际上有两个解决方案 但我对它们不满意 原因是我尝试读取的文件大约有 1200 万行 使用这些解决方案需要花费大量时间来处理它们 主要是因为解法是逐行运算 所以 我读了这样的文件 In 1 df pd read cs
  • 如何使用 Injector 在函数中模拟注入服务

    在 Angular 7 x 中 我有一个全局错误处理 可以使用注入器注入他的服务 因此每个函数都有一个对注入器的引用 如下所示 import ErrorHandler Injectable Injector NgZone from angu
  • 用户是否使用键盘或鼠标离开 WPF TextBox?

    我有一个文本框的处理程序PreviewLostKeyboardFocus事件 当我使用键盘 Tab 键 或鼠标 通过单击表单上的另一个文本框 离开文本框时 它会触发 处理程序需要一个KeyboardFocusChangedEventArgs
  • 如何将数组列表分配给jsp中的选择选项

    我有清单 ArrayList list new ArrayList 我写这个列表选择选项 td td
  • .NET Native 应用程序相当于修改标头 Firefox Addon

    我正在尝试用 C 开发一个袜子隧道应用程序 它能够通过使用添加和修改的标头请求来打开网站 类似于修改标题 Firefox 插件 https addons mozilla org en US firefox addon modify head