- 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/
我正在尝试为登录实现突变。突变验证提供的 id_token 并通过 session 登录用户。突变本身有效(使用 GraphiQL 验证),但我在将其与 Relay 集成时遇到了问题。 当用户登录时,
这个问题已经有答案了: Return a JSON string explicitly from Asp.net WEBAPI? (9 个回答) 已关闭 5 年前。 我在 VS 中创建了一个非常简单的
这个问题已经有答案了: Return a JSON string explicitly from Asp.net WEBAPI? (9 个回答) 已关闭 5 年前。 我在 VS 中创建了一个非常简单的
是否可以通过 .net 应用程序从使用 smtp-relay 的服务器发送电子邮件。 我正在使用 app.config 获取服务器 IP 的实际值,以及电子邮件应使用的地址。 根据 IT 技术人员的说
我有一个服务器和一个安卓应用程序。我的服务器想要请求一个目的地,但要使用运行我的应用程序的 android 设备的 IP。因此,我需要在我的应用程序中代理请求(中继它们),以便目的地可以看到客户端的
我正在尝试构建一个接受多个客户端连接的简单 TCP 中继。 Client1 --> TCPrelay1 --> RealServer1 --> TCPrelay1 --> Client1 Client
我有以下情况: SomeServer(S) (C)MyApp(S) (C)User (S) represents a server socket (C) represents a client s
我尝试 relay-modern 有一段时间了,我想知道 createFragmentContainer 除了描述 的片段之外还有什么用途>应该属于组件。 例如这就是文档显示它应该如何显示的方式 Pa
我正在尝试在本地设置一个简单的中继/映射服务器,感觉必须有一些现成的解决方案,但我似乎找不到。 我正在调试我的一个需要连接到 host_A 的应用程序。我不想连接到 host_A,而是想将其配置为连接
我有一个使用 CodeIgniter 构建并由共享托管服务提供商托管的应用程序。 我的 MX 记录指向 Gmail 服务器,我的应用程序可以使用 Gmail 和标准 CodeIgniter 电子邮件方
我正在使用 Azure 中继、混合连接处理程序测试 Azure 事件网格。这对我不起作用。 我可以看到消息正在发布到 Azure 事件网格。到目前为止,一切都很好。 我已设置对事件网格主题的订阅,并将
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
当我尝试 pod repo update 时出现此错误和 pod install CDN: trunk URL couldn't be downloaded:https://cdn.cocoapods
我正在开发一个 WebApp,想知道在方法之间共享 JDBC 连接对象是否有任何优点/缺点 所以情况是 这是一个 WebApp 和多用户环境(大约 1000 个用户同时使用) 我正在使用支持连接池的容
我正在尝试使用 graphene-django 的 DjangoFilterConnectionField 实现以下目标: { allUsers(username_Icontains: "abc"
我正在尝试在 css 中为以下内容设置动画。我读过以前的帖子,但 settimeout 似乎不起作用,或者它似乎没有给我预期的结果。 我正在尝试制作一个简单的动画,它每次将行高更改 0.5,我试过循环
我有 KMtronics USB 继电器,我想用我的 Android 设备控制它。是否可以运行以下 Linux 命令: #!/bin/sh # sends on signal to the USB r
我们的应用程序全部采用 HTTPS,但我们从不支持 SSL 的低预算设备获取 mjpeg 流。 因此,这意味着我们可以:我。混合内容并让浏览器崩溃。 (这是 Not Acceptable ,因为我们训
操作系统:CentOS Python:2.4 和 2.7 我正在尝试为我的应用程序构建 TCP 和 UDP 流量的中继或代理。 我的设置是 app1 通过不断发送 UDP 数据包来验证 app2 是否
例如我有连接类型: let usersType = new GraphQLObjectType({ name: 'Users', description: 'users array',
我是一名优秀的程序员,十分优秀!