Created
August 6, 2025 14:34
-
-
Save eduardomazolini/77466da39e7940b7d652b2bb5af6ef55 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # truque para já executar com sudo | |
| [ "$EUID" -ne 0 ] && exec sudo "$0" "$@" | |
| ### Lista de Links úteis | |
| # https://support.google.com/websearch/answer/186669?hl=pt-BR | |
| # https://www.google.com/safesearch | |
| # | |
| ## BING | |
| # https://support.microsoft.com/pt-br/topic/bloquear-conte%C3%BAdo-para-adultos-com-a-pesquisa-segura-ou-bloquear-o-chat-946059ed-992b-46a0-944a-28e8fb8f1814 | |
| # https://www.bing.com/account/general | |
| # | |
| ## DuckDuckGo | |
| # https://duckduckgo.com/duckduckgo-help-pages/features/safe-search#force-safe-search-at-a-network-level | |
| # | |
| ## YouTube | |
| #https://support.google.com/a/answer/6214622?hl=pt-BR | |
| #https://www.youtube.com/check_content_restrictions | |
| # | |
| # Caminho do arquivo de hosts | |
| HOSTS_FILE="/etc/hosts" | |
| # URL com a lista de domínios suportados | |
| URL="https://www.google.com/supported_domains" | |
| # Marcadores para encontrar o bloco para Google | |
| START_MARK="# Início do bloqueio forçado de SafeSearch" | |
| END_MARK="# Fim do bloqueio forçado de SafeSearch" | |
| # Marcadores para Bing | |
| START_MARK_BING="# Início do bloqueio forçado de SafeSearch - Bing" | |
| END_MARK_BING="# Fim do bloqueio forçado de SafeSearch - Bing" | |
| # Marcadores para DuckDuckGo | |
| START_MARK_DUCK="# Início do bloqueio forçado de SafeSearch - DuckDuckGo" | |
| END_MARK_DUCK="# Fim do bloqueio forçado de SafeSearch - DuckDuckGo" | |
| # Marcadores para YouTube | |
| START_MARK_YT="# Início do bloqueio forçado de SafeSearch - YouTube" | |
| END_MARK_YT="# Fim do bloqueio forçado de SafeSearch - YouTube" | |
| # Backup | |
| cp "$HOSTS_FILE" "${HOSTS_FILE}.bkp.$(date +%Y%m%d%H%M%S)" | |
| # Remove bloco antigo se existir | |
| sed -i "/$START_MARK/,/$END_MARK/d" "$HOSTS_FILE" | |
| # Remove bloco antigo do Bing | |
| sed -i "/$START_MARK_BING/,/$END_MARK_BING/d" "$HOSTS_FILE" | |
| # Remove bloco antigo do DuckDuckGo | |
| sed -i "/$START_MARK_DUCK/,/$END_MARK_DUCK/d" "$HOSTS_FILE" | |
| # Remove bloco antigo do YouTube | |
| sed -i "/$START_MARK_YT/,/$END_MARK_YT/d" "$HOSTS_FILE" | |
| # Resolve IPs de forcesafesearch.google.com | |
| IPV4=$(dig +short A forcesafesearch.google.com | head -n1) | |
| IPV6=$(dig +short AAAA forcesafesearch.google.com | head -n1) | |
| # Resolve IPs de strict.bing.com | |
| BING_IPV4=$(dig +short A strict.bing.com | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -n1) | |
| BING_IPV6=$(dig +short AAAA strict.bing.com | grep -v '-' | grep -E '^[0-9a-fA-F:]+' | head -n1) | |
| # Resolve IPs de safe.duckduckgo.com (ignora CNAMEs com hífen) | |
| DUCK_IPV4=$(dig +short A safe.duckduckgo.com | grep -v '-' | grep -E '^[0-9.]+' | head -n1) | |
| DUCK_IPV6=$(dig +short AAAA safe.duckduckgo.com | grep -v '-' | grep -E '^[0-9a-fA-F:]+' | head -n1) | |
| # Resolve IPs de restrict.youtube.com (ignora CNAMEs com hífen) | |
| YOUTUBE_IPV4=$(dig +short A restrict.youtube.com | grep -v '-' | grep -E '^[0-9.]+' | head -n1) | |
| YOUTUBE_IPV6=$(dig +short AAAA restrict.youtube.com | grep -v '-' | grep -E '^[0-9a-fA-F:]+' | head -n1) | |
| if [[ -z "$IPV4" && -z "$IPV6" ]]; then | |
| echo "Erro: não foi possível resolver forcesafesearch.google.com" | |
| exit 1 | |
| fi | |
| if [[ -z "$BING_IPV4" && -z "$BING_IPV6" ]]; then | |
| echo "Erro: não foi possível resolver strict.bing.com" | |
| exit 1 | |
| fi | |
| if [[ -z "$DUCK_IPV4" && -z "$DUCK_IPV6" ]]; then | |
| echo "Erro: não foi possível resolver safe.duckduckgo.com" | |
| exit 1 | |
| fi | |
| if [[ -z "$YOUTUBE_IPV4" && -z "$YOUTUBE_IPV6" ]]; then | |
| echo "Erro: não foi possível resolver restrict.youtube.com" | |
| exit 1 | |
| fi | |
| # Baixa lista de domínios | |
| DOMAINS=$(curl -s "$URL") | |
| if [[ -z "$DOMAINS" ]]; then | |
| echo "Erro: não foi possível obter a lista de domínios" | |
| exit 1 | |
| fi | |
| # Adiciona o novo bloco ao final do arquivo de hosts | |
| { | |
| echo "$START_MARK - $(date)" | |
| for domain in $DOMAINS; do | |
| full_domain="www${domain}" | |
| [[ -n "$IPV4" ]] && echo "$IPV4 $full_domain" | |
| [[ -n "$IPV6" ]] && echo "$IPV6 $full_domain" | |
| done | |
| echo "$END_MARK" | |
| } >> "$HOSTS_FILE" | |
| # Adiciona o novo bloco ao final do arquivo de hosts | |
| { | |
| echo "$START_MARK_BING - $(date)" | |
| [[ -n "$BING_IPV4" ]] && echo "$BING_IPV4 www.bing.com" && echo "$BING_IPV4 edgeservices.bing.com" | |
| [[ -n "$BING_IPV6" ]] && echo "$BING_IPV6 www.bing.com" && echo "$BING_IPV6 edgeservices.bing.com" | |
| echo "$END_MARK_BING" | |
| } >> "$HOSTS_FILE" | |
| # Adiciona entradas para DuckDuckGo | |
| { | |
| echo "$START_MARK_DUCK - $(date)" | |
| [[ -n "$DUCK_IPV4" ]] && { | |
| echo "$DUCK_IPV4 duckduckgo.com" | |
| echo "$DUCK_IPV4 www.duckduckgo.com" | |
| } | |
| [[ -n "$DUCK_IPV6" ]] && { | |
| echo "$DUCK_IPV6 duckduckgo.com" | |
| echo "$DUCK_IPV6 www.duckduckgo.com" | |
| } | |
| echo "$END_MARK_DUCK" | |
| } >> "$HOSTS_FILE" | |
| # Domínios a redirecionar | |
| YOUTUBE_DOMAINS=( | |
| www.youtube.com | |
| m.youtube.com | |
| youtubei.googleapis.com | |
| youtube.googleapis.com | |
| www.youtube-nocookie.com | |
| ) | |
| # Adiciona entradas para YouTube | |
| { | |
| echo "$START_MARK_YT - $(date)" | |
| for domain in "${YOUTUBE_DOMAINS[@]}"; do | |
| [[ -n "$YOUTUBE_IPV4" ]] && echo "$YOUTUBE_IPV4 $domain" | |
| [[ -n "$YOUTUBE_IPV6" ]] && echo "$YOUTUBE_IPV6 $domain" | |
| done | |
| echo "$END_MARK_YT" | |
| } >> "$HOSTS_FILE" | |
| echo "Entradas adicionadas com sucesso ao $HOSTS_FILE" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment