- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试执行 man-in-the-middle
攻击 HTTPS
通过中继所有流量并挑选出某些流量进行修改来连接。我查看了 LittleProxy-mitm
以及 LittleProxy
这些项目看起来非常有前途。 I followed the readme编写我的代码,但连接在通过此代理运行时不起作用。我的完整代码如下:
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.*;
import io.netty.util.AttributeKey;
import org.littleshoot.proxy.HttpFilters;
import org.littleshoot.proxy.HttpFiltersAdapter;
import org.littleshoot.proxy.HttpFiltersSourceAdapter;
import org.littleshoot.proxy.impl.DefaultHttpProxyServer;
import org.littleshoot.proxy.mitm.CertificateSniffingMitmManager;
import org.littleshoot.proxy.mitm.RootCertificateException;
import java.net.InetSocketAddress;
import java.util.List;
import java.util.Map;
public class Main
{
private static final AttributeKey<String> CONNECTED_URL = AttributeKey.valueOf("connected_url");
public static void main(String[] arguments) throws RootCertificateException
{
System.out.println("Starting HTTP proxy server...");
DefaultHttpProxyServer.bootstrap()
.withPort(9090)
.withManInTheMiddle(new CertificateSniffingMitmManager())
.withFiltersSource(new HttpFiltersSourceAdapter()
{
@Override
public HttpFilters filterRequest(HttpRequest originalRequest, ChannelHandlerContext ctx)
{
String uri = originalRequest.getUri();
if (originalRequest.getMethod() == HttpMethod.CONNECT)
{
if (ctx != null)
{
String prefix = "https://" + uri.replaceFirst(":443$", "");
ctx.channel().attr(CONNECTED_URL).set(prefix);
}
return new HttpFiltersAdapter(originalRequest, ctx);
}
String connectedUrl = ctx.channel().attr(CONNECTED_URL).get();
if (connectedUrl == null)
{
return new MyHttpFilters(uri);
}
return new MyHttpFilters(connectedUrl + uri);
}
})
.start();
System.out.println("HTTP proxy server started...");
}
private static void printHeaders(DefaultHttpRequest httpObject)
{
final HttpHeaders headers = httpObject.headers();
final List<Map.Entry<String, String>> entries = headers.entries();
for (Map.Entry<String, String> entry : entries)
{
final String value = entry.getValue();
System.out.println(entry.getKey() + " -> " + value);
}
System.out.println();
}
public static class MyHttpFilters implements HttpFilters
{
private final String uri;
MyHttpFilters(String uri)
{
this.uri = uri;
}
@Override
public HttpResponse clientToProxyRequest(HttpObject httpObject)
{
((DefaultHttpRequest) httpObject).setUri(uri);
printHeaders((DefaultHttpRequest) httpObject);
return (HttpResponse) httpObject;
}
@Override
public HttpResponse proxyToServerRequest(HttpObject httpObject)
{
((DefaultHttpRequest) httpObject).setUri(uri);
printHeaders((DefaultHttpRequest) httpObject);
return (HttpResponse) httpObject;
}
@Override
public void proxyToServerRequestSending()
{
}
@Override
public void proxyToServerRequestSent()
{
}
@Override
public HttpObject serverToProxyResponse(HttpObject httpObject)
{
return null;
}
@Override
public void serverToProxyResponseTimedOut()
{
}
@Override
public void serverToProxyResponseReceiving()
{
}
@Override
public void serverToProxyResponseReceived()
{
}
@Override
public HttpObject proxyToClientResponse(HttpObject httpObject)
{
return null;
}
@Override
public void proxyToServerConnectionQueued()
{
}
@Override
public InetSocketAddress proxyToServerResolutionStarted(String resolvingServerHostAndPort)
{
return null;
}
@Override
public void proxyToServerResolutionFailed(String hostAndPort)
{
}
@Override
public void proxyToServerResolutionSucceeded(String serverHostAndPort, InetSocketAddress resolvedRemoteAddress)
{
}
@Override
public void proxyToServerConnectionStarted()
{
}
@Override
public void proxyToServerConnectionSSLHandshakeStarted()
{
}
@Override
public void proxyToServerConnectionFailed()
{
}
@Override
public void proxyToServerConnectionSucceeded(ChannelHandlerContext serverCtx)
{
}
}
}
HTTP
带有过滤器的版本
here连接工作正常。不幸的是,与
HTTP
全部版本
HTTPS
交通被忽略。
最佳答案
**我已经更改了您的代码中的几行,只需运行它。它应该工作。确保更改浏览器网络设置以使用代理**
package com.example.ProxyTest.mitm;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.*;
import io.netty.util.AttributeKey;
import org.littleshoot.proxy.HttpFilters;
import org.littleshoot.proxy.HttpFiltersAdapter;
import org.littleshoot.proxy.HttpFiltersSourceAdapter;
import org.littleshoot.proxy.impl.DefaultHttpProxyServer;
import org.littleshoot.proxy.mitm.CertificateSniffingMitmManager;
import org.littleshoot.proxy.mitm.RootCertificateException;
import java.net.InetSocketAddress;
import java.util.List;
import java.util.Map;
public class mitmExample1
{
private static final AttributeKey<String> CONNECTED_URL = AttributeKey.valueOf("connected_url");
public static void main(String[] arguments) throws RootCertificateException
{
System.out.println("Starting HTTP proxy server...");
DefaultHttpProxyServer.bootstrap()
.withPort(9090)
.withManInTheMiddle(new CertificateSniffingMitmManager())
.withFiltersSource(new HttpFiltersSourceAdapter()
{
@Override
public HttpFilters filterRequest(HttpRequest originalRequest, ChannelHandlerContext ctx)
{
String uri = originalRequest.getUri();
if (originalRequest.getMethod() == HttpMethod.CONNECT)
{
if (ctx != null)
{
String prefix = "https://" + uri.replaceFirst(":443$", "");
ctx.channel().attr(CONNECTED_URL).set(prefix);
}
return new HttpFiltersAdapter(originalRequest, ctx);
}
String connectedUrl = ctx.channel().attr(CONNECTED_URL).get();
if (connectedUrl == null)
{
return new MyHttpFilters(uri);
}
return new MyHttpFilters(connectedUrl + uri);
}
})
.start();
System.out.println("HTTP proxy server started...");
}
private static void printHeaders(DefaultHttpRequest httpObject)
{
final HttpHeaders headers = httpObject.headers();
final List<Map.Entry<String, String>> entries = headers.entries();
for (Map.Entry<String, String> entry : entries)
{
final String value = entry.getValue();
System.out.println(entry.getKey() + " -> " + value);
}
System.out.println();
}
public static class MyHttpFilters implements HttpFilters
{
private final String uri;
MyHttpFilters(String uri)
{
this.uri = uri;
}
@Override
public HttpResponse clientToProxyRequest(HttpObject httpObject)
{
return null;
}
//
@Override
public HttpResponse proxyToServerRequest(HttpObject httpObject)
{
return null;
}
@Override
public void proxyToServerRequestSending()
{
}
@Override
public void proxyToServerRequestSent()
{
}
@Override
public HttpObject serverToProxyResponse(HttpObject httpObject)
{
return httpObject;
}
@Override
public void serverToProxyResponseTimedOut()
{
}
@Override
public void serverToProxyResponseReceiving()
{
}
@Override
public void serverToProxyResponseReceived()
{
}
@Override
public HttpObject proxyToClientResponse(HttpObject httpObject)
{
return httpObject;
}
@Override
public void proxyToServerConnectionQueued()
{
}
@Override
public InetSocketAddress proxyToServerResolutionStarted(String resolvingServerHostAndPort)
{
return null;
}
@Override
public void proxyToServerResolutionFailed(String hostAndPort)
{
}
@Override
public void proxyToServerResolutionSucceeded(String serverHostAndPort, InetSocketAddress resolvedRemoteAddress)
{
}
@Override
public void proxyToServerConnectionStarted()
{
}
@Override
public void proxyToServerConnectionSSLHandshakeStarted()
{
}
@Override
public void proxyToServerConnectionFailed()
{
}
@Override
public void proxyToServerConnectionSucceeded(ChannelHandlerContext serverCtx)
{
}
}
}
关于java - LittleProxy-mitm 不会正确中继 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54679550/
我目前正在研究 LittleProxy,以将其用作公司与其在公司外部使用的系统之间的中间人。我们将在中间提供日志记录和审计功能。 SSL (https) 用于将客户端连接到服务器。 不是使用 Litt
我是 littleproxy 的初学者,如何创建反向代理服务器? 我的代理从客户端获取请求并将它们发送到服务器(服务器只是一个与 www.xxx.com 相同的常规站点,仅包含网页(不休息)并且代理从
我正在尝试执行 man-in-the-middle 攻击 HTTPS通过中继所有流量并挑选出某些流量进行修改来连接。我查看了 LittleProxy-mitm 以及 LittleProxy 这些项目看
我想用littleproxy缓存静态文件。所以我用 uri 的键和响应主体的值创建了 HashMap。这是 Java 代码: private static Map cache = new HashMa
我正在用 LittleProxy 拦截一个 HTTP 请求它使用 Netty。但是,现在我想拦截一个明显使用分块传输编码的网络服务请求。 HTTP header 如下所示 Content-Type -
我目前正在使用 LittleProxy 向请求添加一些 header 并使用 HTTP 将其转发到服务器。 我一直在尝试对 HTTPS 调用执行相同的操作但失败了。 如何为 HTTP 和 HTTPS
我想在 JavaFX UI 中显示 Littleproxy 日志(传入和传出流量),有什么办法可以做到这一点吗? HttpProxyServer server = DefaultHttpProxy
我遵循了显示的简单示例 GitHub:LittleProxy并在 clientToProxyRequest(HttpObject httpObject) 方法中添加了以下内容。 public Http
我是一名优秀的程序员,十分优秀!