我使用java IO API实现了一个数据包捕获工具。我已将端口设置为8081.问题是,当我尝试访问https网站时,此类响应无法在我的程序中捕获。我正在开发一个示例应用程序来演示流量整形。根据我的知识端口8080和8081不支持https请求,但是当我将端口设置为下面的代码片段时,代码会抛出错误。
ServerSocket serverSocket = null; boolean listening = true;
int port = 8081; //default
try {
serverSocket = new ServerSocket(port);
System.out.println("Started on: " + port);
} catch (IOException e) {
System.err.println("Could not listen on port: " + port);
System.exit(-1);
}
下面的snipet是我尝试捕获响应数据包并获取已读取数据包的计数。 HTTP会被计算,但HTTPS请求不会
URL oracle = new URL(urlToCall);
URLConnection yc = oracle.openConnection();
is = yc.getInputStream();
final byte[] buffer = new byte[BUFFER_SIZE]; // 1kb
int index = is.read(buffer, 0, BUFFER_SIZE); // insert first packet
int i = 0;
while (index != -1)
知道如何解决这个问题吗? 谢谢
答案 0 :(得分:0)
我认为这里真正的问题是你要以错误的方式进行数据包捕获。 (或许你的意思是通过数据包捕获与其他人的意思不同。)
在真正的数据包捕获应用程序中,目标是让您的应用程序捕获现有客户端和服务器之间的数据包。
但是你的程序正在创建/绑定ServerSocket
...可能是为了让它接受连接。这意味着您的程序将是服务器/服务。它不会拦截客户端和其他服务器之间的流量。
在java中实现数据包捕获的常规方法是使用jpcap库。
如果new ServerSocket(port)
失败,则很可能某个其他应用程序已绑定到该端口。很可能是你试图服务的服务器" snoop"上。如果你打印了堆栈跟踪,我希望它会证实这一点。