我已经使用java IO API实现了一个数据包捕获工具。我已经将端口设置为8081。问题是,当我试图访问https网站时,我的程序中不会捕捉到这样的响应。我正在开发一个示例应用程序来演示交通塑造。据我所知,端口8080和8081不支持https请求,但当我将端口设置为以下代码段时,代码会抛出错误。
ServerSocket ServerSocket=null;布尔侦听=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);
}
下面的狙击是我试图捕获响应数据包并获得已读取数据包的计数的地方。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)
知道怎么度过难关吗?感谢
我认为这里真正的问题是您以错误的方式进行数据包捕获。(或者,你的意思可能与其他人所说的数据包捕获不同。)
在一个真正的数据包捕获应用程序中,目的是让您的应用程序捕获在现有客户端和服务器之间传输的数据包。
但是您的程序正在创建/绑定ServerSocket
。。。大概是为了让它接受连接。这意味着你的程序将是一个服务器/服务。它不会拦截客户端和其他服务器之间的流量。
在java中实现数据包捕获的正常方法是使用jpcap库。
如果new ServerSocket(port)
失败,很可能其他应用程序已经绑定到该端口。很可能是您试图"窥探"的服务器。如果您打印堆栈跟踪,我希望它会证实这一点。