我们正在使用这些HTTPWebRequest对象向我们的应用程序发出HTTP请求,当请求需要身份验证并且存在透明代理(Squid 3.1.10)时,我们遇到了问题.
string url = "http://www.icode.co.uk/test/auth.php";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = new NetworkCredential("username", "password");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
MessageBox.Show(reader.ReadToEnd());
reader.Close();
stream.Close();
response.Close();
Run Code Online (Sandbox Code Playgroud)
我们的原始代码使用了WebClient类,它表现出同样的问题.
第一次运行此代码时,它会正确显示结果.当代码第二次运行时,它在以下GetResponse()行中失败:
System.Net.WebException was unhandled
Message="The server committed a protocol violation. Section=ResponseStatusLine"
Source="System"
StackTrace:
at System.Net.HttpWebRequest.GetResponse()
at Dummy.DummyForm.button1_Click(Object sender, EventArgs e) in H:\Trial\Dummy\DummyForm.cs:line 42
at ...
Run Code Online (Sandbox Code Playgroud)
在Windows 7上,重新启动进程会使其恢复并运行一次,但Server 2003需要完全重新启动.
查看网络捕获,两个请求与开始时相同,发送初始未经身份验证的请求并且服务器回复,但失败请求在初始回复的中间发送第二个经过身份验证的请求,就好像它忽略了Content-Length标头(这是正确).然后它接收剩余的初始回复并因协议错误而失败.

HTTPWebRequest尽管如此,client()并没有干净地关闭连接,这似乎很奇怪.
当代理未使用时(非端口80或内部流量),请求全部按预期工作.如果没有身份验证,它也可以正常工作,因为它只生成单个请求.
我已经将问题代码减少到最小并使用MSDN示例重现它,但是有人知道这是已知问题还是我们(.NET或Squid)配置中的问题?
Apache文档声明RewriteRule应该放在服务器配置中,但由于共享托管情况,它们可以放在htaccess中.我处于这种情况.
我正在尝试设置透明代理:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/foo [OR]
RewriteCond %{REQUEST_URI} ^/bar
RewriteRule ^(.*)$ http://example.com/$1 [P]
Run Code Online (Sandbox Code Playgroud)
这工作正常......除了重定向(如果/foo重定向到/bar).重定向返回到example.com,而不是我的服务器.
我理解该ProxyPassReverse指令将解决这个问题,但是当我添加它时,我得到一个"内部服务器错误"页面.htaccess
与Rewrite指令不同,它ProxyPassReverse不适用于htaccess.
如何在共享主机环境中设置透明代理,或者这是不可能的?
(这似乎是合理的,因为Rewrite已经获得了80%的路径,并且在一个htaccess中拥有透明代理不会干扰在另一个htaccess中使用它.)
我写了一个非常不同步的应用程序.
我正在寻找一种排队方法调用的方法,类似于BeginInvoke/EndInvoke所做的....但是在我的OWN队列上.reaqson是我使用线程池拥有自己的优化消息排队系统,但同时确保每个组件在请求中都是单线程的(即一个线程只处理组件的消息).
我有很多消息来回传递.对于有限的使用,我真的很想能够只使用参数对消息调用进行排队,而不是必须定义我自己的参数,方法包装/解包只是为了进行大量的管理调用.我也不总是想绕过队列,我绝对不希望发送服务等待其他服务响应.
有人知道拦截方法调用的方法吗?为此利用TransparentProxy/Virtual Proxy的一些方法?;)ServicedComponent?我希望这个开销尽可能小;)
我有一个Ubuntu linux系统充当网关系统,上面有两个接口.一个接口用于本地网络,一个接口用于Internet.我可以毫无问题地通过它来路由流量.我使用两个iptables规则来转发内部接口的出站流量:
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
我现在需要创建一个iptables规则,过滤掉并重定向所有tcp端口80和443流量,通过eth1接口离开我的网络,并将其发送到驻留在tcp端口9090上的环回接口上的代理服务器.
我一直在寻找SO,但我找不到一个有效的例子.有没有一种有效的方法来做到这一点?
好的,这就是我需要的.我有一个基于PHP的网络爬虫.它可以在这里访问:http: //rz7ocnxxu7ka6ncv.onion/ 现在,我的问题是我的蜘蛛实际抓取页面需要在SOCKS端口9050上这样做.事情是,我必须通过Tor隧道连接它以便它可以解析.onion域名,这就是我正在索引的内容.(仅以.onion结尾.)我使用php crawl.php从命令行调用此脚本,并添加适当的参数来抓取页面.这就是我的想法:有没有办法强迫它使用Tor?或者我可以强迫我的整个机器通过Tor隧道,以及如何?(就像强制所有流量通过127.0.0.1:9050)也许如果我设置全局代理设置,php会尊重它们吗?
如果我的任何解决方案有效,我该怎么做?(请一步一步说明,我是菜鸟.)
我只想创建自己的Tor搜索引擎.(不要推荐我的p2p搜索引擎 - 这不是我想要的 - 我知道它们存在,我完成了我的作业.)如果你有兴趣看看,这里是爬虫来源:也许有心的人可以修改它以使用127.0.0.1:9050进行所有抓取请求? http://pastebin.com/kscGJCc5
我编写了一个RESTful Web服务,它只由设备使用,而不是浏览器.设备通过所有者现有的家用路由器访问互联网,并通过路由器每隔30秒发送一次HTTP请求与Web服务进行通信.这些请求主要是"轮询"请求,以查看Web服务是否具有该设备的任何新信息.
我想阻止任何ISP透明代理拦截请求并返回缓存的响应.我已经读过,这样做的一种方法是在请求的URL末尾附加一个随机查询字符串,以欺骗代理,使其认为它是一个唯一的请求.例如:
http://webservicedomain.com/poll/?randomNumber=384389
Run Code Online (Sandbox Code Playgroud)
我有能力做到这一点,但这是最好的方法吗?有点似乎是一个黑客.
想实现透明代理同样的方式在这个职位,但我有一个"代理"只对loopback接口听.一旦我将DstAddr设置为环回,就不会收到第二个TCP握手数据包
...
iphdr->DstAddr = htonl(INADDR_LOOPBACK);
tcphdr->DstPort = ProxyPort;
addr->Direction = WINDIVERT_DIRECTION_INBOUND;
...
Run Code Online (Sandbox Code Playgroud)
但是如果DstAddr = address_of_network_interface_packet_captured_from则有效.
也尝试改变addr:
addr->IfIdx = 1;
addr->SubIfIdx = 0;
Run Code Online (Sandbox Code Playgroud)
没有任何影响.
有没有办法实现这样的配置?
我正在尝试为所有类型的帧(HTTP,HTTPS)设置透明代理,我正在使用tinyproxy这样做.我已经设置了我的路由器,将所有传入和传出帧重定向(使用NAT)到tinyproxy(正在侦听端口8888).
我尝试访问HTTPS网站(https://www.google.com/),但收到SSL连接错误.浏览tinyproxy日志,我看到以下内容:
CONNECT Mar 24 23:34:27 [22533]: Connect (file descriptor 11): 128.112.94.38 [128.112.94.38]
CONNECT Mar 24 23:34:27 [22533]: Request (file descriptor 11):
WARNING Mar 24 23:34:27 [22533]: Could not retrieve all the headers from the client
INFO Mar 24 23:34:27 [22533]: Read request entity of 103 bytes
Run Code Online (Sandbox Code Playgroud)
tinyproxy文档说,只要我在tinyproxy.conf文件中设置以下行,Connect帧的转发应该透明地工作:
# ConnectPort: This is a list of ports allowed by tinyproxy when the
# CONNECT method is used. To disable the CONNECT method altogether, set
# the value …Run Code Online (Sandbox Code Playgroud) 我试图了解 TPROXY 如何工作,以便为 Docker 容器构建透明代理。
经过大量研究,我设法创建一个网络命名空间,向其中注入一个 veth 接口并添加 TPROXY 规则。以下脚本适用于干净的 Ubuntu 18.04.3:
ip netns add ns0
ip link add br1 type bridge
ip link add veth0 type veth peer name veth1
ip link set veth0 master br1
ip link set veth1 netns ns0
ip addr add 192.168.3.1/24 dev br1
ip link set br1 up
ip link set veth0 up
ip netns exec ns0 ip addr add 192.168.3.2/24 dev veth1
ip netns exec ns0 ip link set veth1 up
ip netns …Run Code Online (Sandbox Code Playgroud) 我有一个透明代理,例如由WCF生成的代理:
ChannelFactory<ICalculator> channelFactory =
new ChannelFactory<ICalculator>(
new NetNamedPipeBinding(),
"net.pipe://localhost/WcfTransparentProxy/Calculator" );
ICalculator calculator = channelFactory.CreateChannel();
Run Code Online (Sandbox Code Playgroud)
如何从透明代理获取RealProxy?
我为这个问题长度道歉,但我认为你们都觉得值得.在开始之前,让我说我真的想要生成一个独立的控制台应用程序,但遗憾的是,事实证明这是不可能的.该错误不会发生在控制台应用程序中.它不会发生在一个独立的ASP.NET应用程序中.它仅在Windows 7上的IIS 7.5中运行时发生.
该错误似乎与动态语言运行时有关,因为它涉及__TransparentProxy(通过WCF)和dynamic变量(int)的组合.产生问题的那一行是调用一个传递代理和动态int的静态方法(碰巧不包含方法体).
一旦调用该方法,w3wp.exe进程占用整个CPU并开始非常快速地增加内存(对我来说,每秒大约100兆,尽管它可能因为GC而逐渐减少).
若要重现此错误,请在Visual Studio中创建一个新的ASP.NET网站("新建"|"项目""C#"|"Web"|"ASP.NET Web应用程序").然后在IIS中创建一个新站点,其主目录是您的新项目.(另外,为每个人提供对该文件夹的完全读/写访问权限,并确保应用程序池使用.NET 4.0)为新站点提供特定端口,如7080.最后,将此代码粘贴到Global.asax.cs中:
public class Global : System.Web.HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
dynamic dynamicId = 5;
var serviceUrl = "http://localhost:7182/FooServices.svc";
ChannelFactory factory = new ChannelFactory<IFooServices>(new WSHttpBinding(), new EndpointAddress(serviceUrl));
factory.Open();
IFooServices fooServices = ((ChannelFactory<IFooServices>)factory).CreateChannel();
BlowUpTheProgram(fooServices, dynamicId); // This line hangs
}
[ServiceContract]
public interface IFooServices
{
[OperationContract]
void Bar();
}
public static void BlowUpTheProgram(IFooServices eventServices, int authorMailboxId)
{
}
}
Run Code Online (Sandbox Code Playgroud)
现在通过http://localhost:7080(或您选择的任何端口)访问浏览器中的站点.让任务管理器准备就绪,因为您需要在确认报告的症状后终止w3wp.exe进程.
要确认代理和动态是否正在共同解决此错误,请更改此行:
dynamic dynamicId …Run Code Online (Sandbox Code Playgroud) c# dynamic-language-runtime dynamic iis-7.5 transparentproxy
我有一些Web服务器正在运行,我希望所有这些服务器都可以通过一个域访问.我在IIS中将ARR设置为另一台服务器中的反向代理,它工作正常.但是,当请求被重定向到服务器时,我需要保留源IP地址.否则,服务器会看到所有连接都来自localhost,这不是很好.
我知道有一个选项forwarded_for可以创建X-Forwarded-For标头,但它不是真的透明,因为我有WAF(Web应用程序防火墙)问题.