【发布时间】:2020-10-16 17:19:14
【问题描述】:
我正在尝试用 Java 编写一个拦截数据/数据包的套接字程序。
我已经用python成功写了这个:
import socket
def createListener(port):
srvSock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
srvSock.bind(('localhost', port))
srvSock.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
while True:
raw_data, addr = srvSock.recvfrom(65536)
print('data: ' , raw_data)
createListener(80)
这是我的基本 Java 套接字程序
public static void main(String[] args) {
try{
ServerSocket ss = new ServerSocket(80);
Socket s = ss.accept();
DataInputStream dis = new DataInputStream(s.getInputStream());
String str = (String)dis.readUTF();
System.out.println("data: "+str);
ss.close();
} catch(IOException i){
System.out.println(i);
}
}
但是,在运行时,它不会像 python 程序那样拦截所有通过网络端口移动的数据。具体来说,Python 脚本中的这一行 srvSock.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON) 使套接字能够侦听端口并捕获/拦截通过它的全部数据。
我根本找不到这种语法的 Java 替代方案或任何解决我的问题的方法。 对于如何使用套接字拦截网络端口上的数据包,我将不胜感激。
谢谢
【问题讨论】: