
Security News
Software Engineering Daily Podcast: Feross on AI, Open Source, and Supply Chain Risk
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.
keeper-pam-webrtc-rs
Advanced tools
Keeper PAM WebRTC for Python - A secure, stable, and high-performance Tube API for Python, providing WebRTC-based secure tunneling with enterprise-grade security and reliability optimizations.
A secure, stable, and high-performance Tube API for Python, providing WebRTC-based secure tunneling with enterprise-grade security and reliability optimizations.
Security • Stability • Performance - Built for Keeper Security's mission-critical applications:
keeper-pam-webrtc-rs provides Python bindings to a Rust-based Tube API for secure communication, designed for:
This package is designed to be used with Keeper Gateway and Keeper Commander. It provides a secure, reliable tube-based communication system built on WebRTC, specifically tailored for Keeper Security's internal products and security-critical tunneling use cases.
Note: This package is intended for internal Keeper Security products and is not being actively advertised for general use.
pip install keeper-pam-webrtc-rs
import keeper_pam_webrtc_rs
# Create a tube registry
registry = keeper_pam_webrtc_rs.PyTubeRegistry()
# Define a signal callback for WebRTC events
def on_signal(signal_dict):
print(f"Received signal: {signal_dict}")
# Handle ICE candidates, connection state changes, etc.
# Create a server-side tube for tunneling
server_result = registry.create_tube(
conversation_id="tunnel-session-123",
settings={
"conversationType": "tunnel",
"target_host": "127.0.0.1",
"target_port": "22" # SSH tunnel example
},
trickle_ice=True,
callback_token="server-token",
ksm_config="server-config",
signal_callback=on_signal
)
# Get the offer SDP to send to the client
# NOTE: All SDP (offers, answers) are base64-encoded - use them directly, don't decode!
server_offer = server_result['offer'] # Base64-encoded WebRTC offer
server_tube_id = server_result['tube_id']
# Create a client-side tube with the offer
client_result = registry.create_tube(
conversation_id="tunnel-client-123",
settings={
"conversationType": "tunnel",
"target_host": "192.168.1.100",
"target_port": "22"
},
trickle_ice=True,
callback_token="client-token",
ksm_config="client-config",
offer=server_offer, # Pass base64-encoded offer directly (don't decode!)
signal_callback=on_signal
)
# Get the answer SDP to send back to server
client_answer = client_result['answer'] # Base64-encoded WebRTC answer
client_tube_id = client_result['tube_id']
# Set the remote description on the server
# NOTE: Pass base64-encoded answer directly
registry.set_remote_description(server_tube_id, client_answer, is_answer=True)
# Check connection state
state = registry.get_connection_state(server_tube_id)
print(f"Connection state: {state}")
# Close when done
registry.close_tube(server_tube_id)
registry.close_tube(client_tube_id)
For server tubes that listen for external TCP connections:
# Create server tube with TCP listener (dynamic port)
server_result = registry.create_tube(
conversation_id="tcp-tunnel",
settings={
"conversationType": "tunnel",
"local_listen_addr": "127.0.0.1:0" # 0 = dynamic port assignment
},
trickle_ice=True,
callback_token="token",
ksm_config="config",
signal_callback=on_signal
)
# Get actual listening address (port assigned by OS)
listen_addr = server_result['actual_local_listen_addr'] # "127.0.0.1:59194"
host, port = listen_addr.split(':')
# External clients can now connect to this address
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, int(port)))
# Data flows: TCP → WebRTC → Remote tube → Remote target
API Documentation: See docs/PYTHON_API_CONTRACT.md for complete API reference including:
This implementation provides a Tube-based abstraction over WebRTC:
create_tube(conversation_id, settings, ...) - Create a new secure tube or add conversation to existing tubeset_remote_description(tube_id, sdp, is_answer) - Set remote SDP descriptionadd_ice_candidate(tube_id, candidate) - Add ICE candidate for connectionget_connection_state(tube_id) - Get current connection stateclose_connection(connection_id) - Close specific connectionclose_tube(tube_id) - Close entire tubeThe tube API supports different communication patterns:
tunnel - Secure TCP tunneling through WebRTCguacd - Apache Guacamole protocol tunnelingsocks5 - SOCKS5 proxy tunnelingTo build and verify the implementation:
# Standard build (all optimizations enabled)
cargo build --release
# Run comprehensive test suite
cargo test --release
# Optional: Enable debug logging for troubleshooting
cargo build --release --features production_debug
Built specifically for Keeper Security's tunneling requirements:
The secure, stable, high-performance tube communication system for enterprise security applications.
FAQs
Keeper PAM WebRTC for Python - A secure, stable, and high-performance Tube API for Python, providing WebRTC-based secure tunneling with enterprise-grade security and reliability optimizations.
We found that keeper-pam-webrtc-rs demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers 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
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.

Security News
GitHub has revoked npm classic tokens for publishing; maintainers must migrate, but OpenJS warns OIDC trusted publishing still has risky gaps for critical projects.

Security News
Rust’s crates.io team is advancing an RFC to add a Security tab that surfaces RustSec vulnerability and unsoundness advisories directly on crate pages.