Блокировка сайта от доступа для всех браузеров - PullRequest
1 голос
/ 13 января 2011

Привет,

Я хотел бы спросить, есть ли способ динамически блокировать доступ веб-сайтов к компьютерам? Я имею в виду, может ли эта функциональность быть закодирована (на нативном интерфейсе Java)?

Ваш ответ высоко ценится.

Спасибо, Кирилл Х.

Ответы [ 2 ]

1 голос
/ 13 января 2011

Да, вы можете закодировать простой прокси-сервис HTTP с помощью Java:

http://www.java2s.com/Code/Java/Network-Protocol/Asimpleproxyserver.htm

В качестве альтернативы, существует множество существующих прокси-решений, которые могут подойтиВаши потребности из коробки:

http://www.roseindia.net/opensource/freeproxyservers.php

Затем вы должны сконфигурировать программное обеспечение / устройства, которые обращаются к веб-сайтам (например, ваш браузер), чтобы они указывали на этот прокси, чтобы все HTTP-коммуникациипрошел через это.

Ваш прокси-сервер может затем ограничить доступ к любым URL-адресам, которые вы хотите, основываясь на любой логике, которую вы хотите закодировать.

Если вы хотите стать действительно модным / безопасным и требовать, чтобы люди использовали прокси (а не пытались обойти его), вы могли бы сделать это, но это, вероятно, больше, чем нужно, учитывая ваш вопрос.

0 голосов
/ 08 января 2018

Вы можете добавить записи в файл hosts , используя класс Files, как показано в этом сообщении: Как добавить текст в существующий файл в Java .

Это работает на всех платформах (да, на всех из них: включая Windows, Mac, Linux, Android и т. Д.) И блокирует доступ для всех браузеров без необходимости использования прокси или специальных расширений браузера (которые можно удалить в большинстве случаев).

Вот простой код, с которого можно начать. Не стесняйтесь редактировать его в соответствии с вашими потребностями:

public void blockSite(String url) {
    // Note that this code only works in Java 7+,
    // refer to the above link about appending files for more info

    // Get OS name
    String OS = System.getProperty("os.name").toLowerCase();

    // Use OS name to find correct location of hosts file
    String hostsFile = "";
    if ((OS.indexOf("win") >= 0)) {
        // Doesn't work before Windows 2000
        hostsFile = "C:\\Windows\\System32\\drivers\\etc\\hosts";
    } else if ((OS.indexOf("mac") >= 0)) {
        // Doesn't work before OS X 10.2
        hostsFile = "etc/hosts";
    } else if ((OS.indexOf("nux") >= 0)) {
        hostsFile = "/etc/hosts";
    } else {
        // Handle error when platform is not Windows, Mac, or Linux
        System.err.println("Sorry, but your OS doesn't support blocking.");
        System.exit(0);
    }

    // Actually block site
    Files.write(Paths.get(hostsFile),
                ("127.0.0.1 " + url).getBytes(),
                StandardOpenOption.APPEND);
}

Импорт для вышеуказанного метода:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

Пример использования:

blockSite("www.example.com");

Примечание:

Это должно быть выполнено от имени администратора (Windows) или с использованием sudo (Mac, Linux).

Это может не работать на некоторых платформах, так как оно было протестировано только на Ubuntu Linux.

P.S. Если вы создаете программное обеспечение для родительского контроля, вам также следует обратить внимание на блокирующие программы. Не все вещи, которые вы хотели бы заблокировать, находятся в Интернете. Вот простой код для этого:

/**
    Blocks programs.
    @param programs - The array of process names.
    @param timeout - The time between blocks, in milliseconds.
    This parameter should not be set below 100, to avoid slowdown.
    @author https://stackoverflow.com/users/5905216/h-a-sanger
*/
public void blockPrograms(int timeout, String...programs) throws IOException {
    // Get OS name
    String OS = System.getProperty("os.name").toLowerCase();

    // Identify correct blocking command for OS
    String command = "";
    if ((OS.indexOf("win") >= 0)) {
        command = "taskkill /f /im ";
    } else if ((OS.indexOf("mac") >= 0) || (OS.indexOf("nux") >= 0)) {
        command = "killall ";
    } else {
        // Handle error when platform is not Windows, Mac, or Linux
        System.err.println("Sorry, but your OS doesn't support blocking.");
        System.exit(0);
    }

    // Start blocking!
    while(true) {
        // Cycle through programs list
        for(int i = 0; i < programs.length; i++) {
            // Block program
            Runtime.getRuntime().exec(command + programs[i]);
        }
        // Timeout
        try { Thread.sleep(timeout); } catch(InterruptedException e) {}
    }
}

Импорт для вышеуказанного кода:

import java.io.IOException;

Пример использования:

blockPrograms(100, "chrome", "firefox");

Опять же, позвольте мне отметить, что это было проверено только на Ubuntu Linux.

P.P.S: Пожалуйста, не обращайте на меня внимания, я довольно новичок в ответах на вопросы по SO.

...