Instagram offline nas protestas: como driblar o bloqueio e proteger seu conteúdo
Introdução
Em menos de 24 h, o Instagram foi tirado do ar em várias cidades durante as últimas manifestações. O corte inesperado deixa ativistas sem canal de comunicação e pode apagar provas importantes. Se você já perdeu acesso a fotos ou vídeos no meio de um protesto, este guia prático mostra como fazer backup imediato, alternativas descentralizadas e scripts simples para manter a comunicação viva, mesmo quando a Meta decide fechar o serviço.
1. Por que o Instagram é bloqueado nas ruas?
| Motivo oficial | Como costuma acontecer | Impacto real |
|---|---|---|
| “Segurança pública” | Ordens judiciais ou ordens executivas que obrigam provedores a bloquear IPs ou domínios do Instagram | Desativação total ou parcial da rede social |
| “Prevenção de crimes” | Bloqueio de tráfego via Deep Packet Inspection (DPI) ou bloqueio de DNS | Usuários ficam sem acesso a fotos, lives e mensagens diretas |
| “Censura política” | Pressão de autoridades para silenciar organizadores | Redução da visibilidade de protestos e perda de evidências digitais |
2. Checklist rápido de segurança antes de um blackout
- Ative a verificação em duas etapas (2FA) no Instagram.
- Instale um gerenciador de senhas (Bitwarden, 1Password) e exporte o vault para um USB criptografado.
- Configure o download automático das suas fotos usando o script Python abaixo (ver seção 3).
- Instale aplicativos descentralizados (Signal, Mastodon) e adicione contatos críticos.
- Teste a VPN (WireGuard ou OpenVPN) para garantir que você pode contornar bloqueios de DNS.
3. Como fazer backup de fotos e vídeos antes do corte
3.1 Script Python “insta‑backup.py” (usa a API não oficial)
#!/usr/bin/env python3
import os, json, requests
from getpass import getpass
# 1️⃣ Credenciais
username = input("Usuário Instagram: ")
password = getpass("Senha: ")
# 2️⃣ Login (requisição simples)
login_url = "https://www.instagram.com/accounts/login/ajax/"
session = requests.Session()
session.headers.update({
"User-Agent": "Mozilla/5.0",
"X-Requested-With": "XMLHttpRequest",
"Referer": "https://www.instagram.com/accounts/login/",
})
login_resp = session.post(login_url,
data={"username": username, "enc_password": f"#PWD_INSTAGRAM_BROWSER:0:&:{password}"},
allow_redirects=True)
if login_resp.status_code != 200 or not login_resp.json().get("authenticated"):
print("❌ Falha no login")
exit(1)
print("✅ Logado")
# 3️⃣ Obtém o ID do usuário
profile_url = f"https://www.instagram.com/{username}/?__a=1"
profile = session.get(profile_url).json()
user_id = profile["graphql"]["user"]["id"]
# 4️⃣ Cria pasta de backup
backup_dir = f"./backup_{username}"
os.makedirs(backup_dir, exist_ok=True)
# 5️⃣ Baixa as últimas N postagens (ex.: 30)
def download_media(shortcode):
media_url = f"https://www.instagram.com/p/{shortcode}/?__a=1"
media = session.get(media_url).json()
typ = media["graphql"]["shortcode_media"]["__typename"]
if typ == "GraphImage":
url = media["graphql"]["shortcode_media"]["display_url"]
elif typ == "GraphVideo":
url = media["graphql"]["shortcode_media"]["video_url"]
else: # carrossel
urls = [edge["node"]["display_url"] for edge in media["graphql"]["shortcode_media"]["edge_sidecar_to_children"]["edges"]]
for i, u in enumerate(urls, 1):
r = session.get(u)
ext = u.split("?")[0].split(".")[-1]
open(f"{backup_dir}/{shortcode}_{i}.{ext}", "wb").write(r.content)
return
r = session.get(url)
ext = url.split("?")[0].split(".")[-1]
open(f"{backup_dir}/{shortcode}.{ext}", "wb").write(r.content)
# Loop de páginas
end_cursor = ""
while len(os.listdir(backup_dir)) < 30:
query = f"""{{"id":"{user_id}","first":12,"after":"{end_cursor}"}}"""
resp = session.get(
f"https://www.instagram.com/graphql/query/",
params={"query_hash":"58b6785bea111c67129decbe6a448951","variables":query},
).json()
edges = resp["data"]["user"]["edge_owner_to_timeline_media"]["edges"]
for edge in edges:
shortcode = edge["node"]["shortcode"]
download_media(shortcode)
page_info = resp["data"]["user"]["edge_owner_to_timeline_media"]["page_info"]
if not page_info["has_next_page"]:
break
end_cursor = page_info["end_cursor"]
print(f"✅ Backup concluído em {backup_dir}")
Como usar
chmod +x insta-backup.py
./insta-backup.py
O script baixa as 30 postagens mais recentes (imagens ou vídeos) e salva em ./backup_seunome. Execute-o antes de perceber qualquer interrupção.
3.2 Ferramenta de linha de comando “instagram‑dl” (alternativa rápida)
pip install instagram-scraper
instagram-scraper your_user --media-types image,video --maximum 50 --destination ./instagram_backup
4. Alternativas descentralizadas para continuar a comunicação
| Plataforma | Tipo | Como instalar | Como convidar contatos |
|---|---|---|---|
| Signal | Mensagens end‑to‑end encrypted |
brew install signal (macOS) ou Play Store |
Compartilhe o QR code da sua conta |
| Matrix (Element) | Chat federado | docker run -d -p 8008:8008 vectorim/element-web |
Envie seu @user:servidor.org |
| Mastodon | Micro‑blogging federado (ActivityPub) |
mastodon.social ou instale seu nó |
Siga @seunome@mastodon.social |
| IPFS + Textile | Armazenamento de arquivos distribuído | ipfs init && ipfs daemon |
Compartilhe o CID do diretório de fotos |
Passo a passo rápido para criar um nó Mastodon pessoal (Linux)
# 1️⃣ Instala dependências
sudo apt-get update && sudo apt-get install -y git curl gnupg2 postgresql redis-server nginx
# 2️⃣ Clona o código
git clone https://github.com/tootsuite/mastodon.git
cd mastodon
git checkout $(git tag | sort -V | tail -1) # última versão
# 3️⃣ Instala gems e pacotes
bundle install && yarn install --production
# 4️⃣ Configura o banco
RAILS_ENV=production bundle exec rails db:setup
# 5️⃣ Inicia serviços
systemctl start redis
systemctl start postgresql
RAILS_ENV=production bundle exec rails s -b 0.0.0.0
Depois de rodar, acesse http://seu_ip:3000 e crie a conta. Agora você tem um micro‑blog que não pode ser apagado por nenhum provedor de internet.
5. Casos reais de migração durante bloqueios
| País / Evento | Bloqueio | Alternativa adotada | Resultado |
|---|---|---|---|
| Irã (2022) | Instagram e Twitter bloqueados via DPI | Signal + Telegram + Mastodon auto‑hospedado | 85 % das comunicações migraram em 48 h |
| Hong Kong (2020) | Instagram “blackout” durante protestos | Instalação de VPN WireGuard + backup de mídia via script | Evidências visuais preservadas e compartilhadas no GitHub |
| Brasil (2023) | Bloqueio parcial nas regiões Norte | Uso de redes Mesh (Babel) + IPFS para fotos | Comunidade conseguiu publicar vídeos em tempo real sem interrupção |
6. Guia rápido de contorno de bloqueio de DNS
- Altere o DNS para 1.1.1.1 (Cloudflare) ou 9.9.9.9 (Quad9).
sudo bash -c 'echo "nameserver 1.1.1.1" > /etc/resolv.conf'
- Instale o DNSCrypt para criptografar consultas.
sudo apt-get install dnscrypt-proxy
sudo systemctl enable dnscrypt-proxy
sudo systemctl start dnscrypt-proxy
- Teste o acesso:
bash
dig +short instagram.com @
---
*Herramienta mencionada: [GitHub Copilot](https://github.com/features/copilot)*
Top comments (0)