当前位置: 首页 > 面试题库 >

如何确定传入连接来自本地计算机

余善
2023-03-14
问题内容

我有一个SocketServer接受传入的连接。出于安全原因,我只应允许本地连接(来自运行服务器的计算机的连接)。

如何确定传入连接是否来自另一台计算机?以下代码是否对此安全?

Socket socket = someServerSocket.accept();
String remoteAddress = socket .getInetAddress().getHostAddress();
if (!fromThisMachine(remoteAddress)) {
    // Not from this machine.
}

fromThisMachine()方法是这样的:

public boolean fromThisMachine(String remoteAddress) {
    try {
        Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        while (interfaces.hasMoreElements()) {
            NetworkInterface networkInterface = interfaces.nextElement();
            Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
            while (addresses.hasMoreElements()) {
                InetAddress inetAddress = addresses.nextElement();
                String hostName = inetAddress.getHostName();
                String hostAddr = inetAddress.getHostAddress();
                if (hostName.equals(remoteAddress) || hostAddr.equals(remoteAddress)) {
                    return true;
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    log("Unauthorized request to server from: " + remoteAddress);
    return false;
}

谢谢,莫森


问题答案:

如果要限制来自本地主机的连接,请在打开ServerSocket时指定该连接。如果仅侦听localhost,则只能从localhost获得连接。

    int port = .....
    SocketAddress socketAddress = new InetSocketAddress("127.0.0.1", port);
    ServerSocket serverSocket = new ServerSocket();
    serverSocket.bind(socketAddress);
    serverSocket.accept();


 类似资料:
  • 问题内容: 我已经在机架空间上启动了CentOS服务器并执行了‘d。然后。因此,只是准系统。 我可以通过ssh(22)远程访问其IP地址,所以DNS或其他任何问题(我认为…)都没有问题,但是当我尝试通过浏览器等通过端口80进行连接时,拒绝连接。 但是,从本地主机,我可以使用telnet(80),甚至可以使用lynx并毫无问题地得到服务。telnet从外部(我的房子,我的学校,当地的咖啡店等)在22

  • 所以有几个网站会为你计算你的链接本地ipv6地址,就像这里的这个。 尽管如此,它并没有给出任何有用的关于这个地址是如何计算的,也没有输入参数是什么。那么,如果一个人知道自己的ipv4地址、子网掩码和网关地址,计算链路本地ipv6地址的过程(或算法)是什么?我正在使用SCTP套接字做一个项目,该项目使用ISATAP网络隧道和LL ipv6地址用于构建ISATAP地址。

  • 问题内容: 所以我有一个Nginx在docker容器中运行,我有一个mysql在本地主机上运行,​​我想从我的Nginx内部连接到MySql。MySql在localhost上运行,并且没有将端口暴露给外界,因此它绑定在localhost上,而不绑定在计算机的IP地址上。 有什么方法可以从此Docker容器中连接到此MySql或localhost上的任何其他程序吗? 此问题与“如何从Docker容器

  • MSDN说方法: 侦听会导致... Socket侦听传入连接尝试。backlog参数指定可以排队接受的传入连接数...使用接受或开始接受从队列中接受连接。 这意味着套接字将把传入的连接放入队列中。我们如何确定排队连接的数量? 我尝试过的一件事显然不起作用,就是服务器套接字。轮询(timeToWait,SelectMode。SelectRead)。这总是返回false。

  • 我有以下配置: 两个正在运行的Tomcat实例运行Apache Camel 2.20.2,它们使用竞争消费者概念来读取同一JMS消息队列的消息 碰巧,其中一个Camel实例连接到从属代理,即使从属代理未处于活动状态(即,从日志文件中可以看出,它没有锁定CAHADB)。 当这种情况发生时,驼峰实例上的路由被阻塞,我们得到一个,这会阻塞路由,消息正在排队。 从属代理接受来自客户端应用程序的连接(在我们

  • 问题内容: 我正在使用Ubuntu 16.0.4操作系统,并在其上安装了minikube。我需要将一些文件复制到minikube,所以我该怎么做?我尝试了下一个命令,但它要求输入密码,但我不知道 注: minikube IP是 192.168.99.100 ,我用 泊坞窗 作为minikube默认用户,但实际上我不知道这是否是正确的OT没有。 那么minikube的默认用户名和密码是什么,如何将文