
Security News
Node.js Moves Toward Stable TypeScript Support with Amaro 1.0
Amaro 1.0 lays the groundwork for stable TypeScript support in Node.js, bringing official .ts loading closer to reality.
Client pour créer des tunnels HTTP sécurisés vers vos applications locales
Alternative gratuite et open-source à ngrok pour créer des tunnels HTTP sécurisés vers vos applications locales.
# Via pip
pip install flasktunnel-client
# Via git (version développement)
pip install git+https://github.com/flasktunnel/client.git
monapp.flasktunnel.dev
)# Exposer le port 3000 avec un sous-domaine auto-généré
flasktunnel --port 3000
# Créer un tunnel avec sous-domaine spécifique
flasktunnel --port 5000 --subdomain monapp
# → Accessible via: https://monapp.flasktunnel.dev
# Port spécifique
flasktunnel --port 8000
# Port + sous-domaine
flasktunnel --port 3000 --subdomain myapp
# Alias pour --subdomain
flasktunnel --port 3000 --name myapp
# Avec mot de passe
flasktunnel --port 5000 --password monsecret
# HTTPS forcé
flasktunnel --port 443 --https
# Avec CORS activé
flasktunnel --port 3000 --cors
# 1 heure (par défaut: 2h)
flasktunnel --port 3000 --duration 1h
# 24 heures (maximum)
flasktunnel --port 3000 --duration 24h
# Durées disponibles: 1h, 2h, 4h, 8h, 12h, 24h
# Pour webhooks (durée étendue)
flasktunnel --port 4000 --webhook
flasktunnel --list
flasktunnel --test
flasktunnel --diagnose
flasktunnel --local-mode --port 3000
flasktunnel --server-url http://monserveur.com --port 3000
# Afficher toutes les requêtes en temps réel
flasktunnel --port 3000 --verbose
flasktunnel --register
flasktunnel --login
flasktunnel --logout
# Via argument
flasktunnel --auth MA_CLE_API --port 3000
# Via variable d'environnement
export FLASKTUNNEL_API_KEY="ma_cle_api"
flasktunnel --port 3000
flasktunnel \
--port 3000 \
--subdomain monapp \
--password secret123 \
--duration 4h \
--cors \
--https \
--webhook \
--auth MA_CLE_API \
--verbose
# Utiliser un fichier de config spécifique
flasktunnel --config ./ma-config.json --port 3000
Créez un fichier .flasktunnel.json
dans votre projet :
{
"port": 3000,
"subdomain": "monapp",
"duration": "4h",
"cors": true,
"https": false,
"password": "monsecret",
"webhook": false,
"server_url": "https://flasktunnel.dev",
"local_mode": false
}
# Dans le dossier de votre projet
echo '{
"port": 3000,
"subdomain": "monprojet",
"cors": true,
"duration": "8h"
}' > .flasktunnel.json
# Puis simplement :
flasktunnel
Stockage automatique des identifiants après connexion :
{
"api_key": "ft_1234567890abcdef",
"user_id": "user_123",
"email": "mon@email.com",
"plan": "free"
}
# Configuration de base
export FLASKTUNNEL_PORT=3000
export FLASKTUNNEL_SUBDOMAIN=monapp
export FLASKTUNNEL_DURATION=4h
# Authentification
export FLASKTUNNEL_API_KEY=ma_cle_api
export FLASKTUNNEL_AUTH_TOKEN=mon_token
# Sécurité
export FLASKTUNNEL_PASSWORD=monsecret
export FLASKTUNNEL_CORS=true
export FLASKTUNNEL_HTTPS=true
# Mode développement
export FLASKTUNNEL_LOCAL_MODE=true
export FLASKTUNNEL_SERVER_URL=http://localhost:8080
# Webhook
export FLASKTUNNEL_WEBHOOK=true
export FLASKTUNNEL_CUSTOM_DOMAIN=mondomaine.com
# Créer un fichier .env
cat > .env << EOF
FLASKTUNNEL_PORT=5000
FLASKTUNNEL_SUBDOMAIN=devapp
FLASKTUNNEL_CORS=true
FLASKTUNNEL_DURATION=8h
FLASKTUNNEL_API_KEY=ft_votre_cle_ici
EOF
# Charger et utiliser
source .env
flasktunnel
from flasktunnel import FlaskTunnelClient
# Créer un client
client = FlaskTunnelClient()
# Créer un tunnel
tunnel = client.create_tunnel(port=3000)
print(f"URL publique: {tunnel.public_url}")
# Attendre que le tunnel expire
tunnel.wait_until_expired()
from flasktunnel import FlaskTunnelClient, FlaskTunnelConfig
# Configuration personnalisée
config = FlaskTunnelConfig(
port=5000,
subdomain="monapp",
password="secret123",
duration="4h",
cors=True,
https=True
)
# Client avec configuration
client = FlaskTunnelClient(config)
# Créer le tunnel
tunnel = client.create_tunnel(
port=config.port,
subdomain=config.subdomain,
password=config.password,
duration=config.duration,
cors=config.cors,
https=config.https
)
# Callbacks pour les événements
def on_request(data):
print(f"Requête reçue: {data['method']} {data['path']}")
def on_error(data):
print(f"Erreur: {data['message']}")
tunnel.on('request', on_request)
tunnel.on('error', on_error)
# Connecter le WebSocket
tunnel.connect_websocket()
print(f"✅ Tunnel actif: {tunnel.public_url}")
tunnel.wait_until_expired()
from flasktunnel import FlaskTunnelClient
client = FlaskTunnelClient()
# Lister les tunnels
tunnels = client.list_tunnels()
for tunnel in tunnels:
print(f"- {tunnel['public_url']} (port {tunnel['port']})")
# Supprimer un tunnel
tunnel_id = "tunnel_123456"
client.delete_tunnel(tunnel_id)
# Statistiques d'un tunnel
stats = client.get_tunnel_stats(tunnel_id)
if stats:
print(f"Requêtes: {stats['requests_count']}")
print(f"Trafic: {stats['bandwidth_used']}")
from flasktunnel import FlaskTunnelConfig, FlaskTunnelClient
# Charger depuis fichier JSON
config = FlaskTunnelConfig.from_file("ma-config.json")
# Charger depuis variables d'environnement
config = FlaskTunnelConfig.from_env()
# Combiner fichier + arguments
config = FlaskTunnelConfig.from_file().merge_with_args(
port=8000,
subdomain="override"
)
client = FlaskTunnelClient(config)
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello World depuis Flask!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
# Terminal 1: Démarrer Flask
python app.py
# Terminal 2: Exposer via FlaskTunnel
flasktunnel --port 5000 --subdomain flask-demo
# Démarrer Django
python manage.py runserver 8000
# Exposer avec CORS pour les APIs
flasktunnel --port 8000 --subdomain django-api --cors
# Démarrer l'app Node
npm start # suppose port 3000
# Tunnel avec monitoring en temps réel
flasktunnel --port 3000 --subdomain node-app --verbose
# Serveur webhook local sur port 4000
flasktunnel --port 4000 --subdomain github-webhook --webhook --password secret123
# API protégée
flasktunnel --port 8080 --subdomain secure-api --password api-secret --https --cors
# Serveur de dev accessible pour mobile
flasktunnel --port 19006 --subdomain expo-app --cors --duration 8h
# Analyser les problèmes potentiels
flasktunnel --diagnose
# Erreur: "Aucun service ne tourne sur le port 3000"
# Solutions:
python -m http.server 3000 # Serveur test
# ou
flasktunnel --port 8000 # Autre port
# Tester la connexion
flasktunnel --test
# Mode local si serveur principal indisponible
flasktunnel --local-mode --port 3000
# Vérifier le statut de connexion
flasktunnel --login
# Ou utiliser clé API directement
flasktunnel --auth YOUR_API_KEY --port 3000
# Erreur: "Sous-domaine déjà utilisé"
# Solutions:
flasktunnel --port 3000 --subdomain monapp-v2
# ou laisser auto-générer:
flasktunnel --port 3000
# Mode verbeux pour voir toutes les requêtes
flasktunnel --port 3000 --verbose
# Tester avec un serveur simple
python -c "
import http.server
import socketserver
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(('', PORT), Handler) as httpd:
print(f'Server running on port {PORT}')
httpd.serve_forever()
" &
flasktunnel --port 8000 --verbose
# Toujours utiliser un mot de passe pour les données sensibles
flasktunnel --port 3000 --password "mon-mot-de-passe-fort"
# Forcer HTTPS pour les APIs
flasktunnel --port 8080 --https --password secret
# Limiter la durée pour les tests temporaires
flasktunnel --port 3000 --duration 1h
# Fichier de credentials protégé (600)
chmod 600 ~/.flasktunnel/credentials.json
# Variables d'environnement sécurisées
export FLASKTUNNEL_API_KEY="$(cat ~/.flasktunnel/api_key)"
# Monitoring complet avec stats
flasktunnel --port 3000 --verbose
from flasktunnel import FlaskTunnelClient
client = FlaskTunnelClient()
tunnel = client.create_tunnel(port=3000)
# Récupérer les stats périodiquement
import time
while tunnel.is_active:
stats = client.get_tunnel_stats(tunnel.tunnel_id)
if stats:
print(f"Requêtes: {stats['requests_count']}")
print(f"Bande passante: {stats['bandwidth_used']}")
time.sleep(60)
# Autres solutions de tunneling
# ngrok (payant après limite)
ngrok http 3000
# localtunnel (gratuit)
npx localtunnel --port 3000
# serveo (SSH tunnel)
ssh -R 80:localhost:3000 serveo.net
MIT License - voir le fichier LICENSE pour plus de détails.
FlaskTunnel - Rendez vos applications locales accessibles au monde entier ! 🚀
FAQs
Client pour créer des tunnels HTTP sécurisés vers vos applications locales
We found that flasktunnel-client demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Amaro 1.0 lays the groundwork for stable TypeScript support in Node.js, bringing official .ts loading closer to reality.
Research
A deceptive PyPI package posing as an Instagram growth tool collects user credentials and sends them to third-party bot services.
Product
Socket now supports pylock.toml, enabling secure, reproducible Python builds with advanced scanning and full alignment with PEP 751's new standard.