
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
KeyNet is a simple and powerful Python library for detecting keyboard events (key press, key release) and binding them to custom callbacks.
With KeyNet, you can easily build keyboard-based automation, hotkey triggers, or even interactive applications that react instantly when a key is pressed.
.on(event, callback)
APIYou can install keynet by:
pip install keynet
from keynet import KeyNet
kn = KeyNet()
def log_key(key):
print(f"[KeyLog] {key}")
kn.on("key_press", log_key)
kn.start()
input("Logging keys... Press Enter to quit\n")
from keynet import KeyNet
kn = KeyNet()
def key_action(key):
if key == "a":
print("You pressed A → Triggering Action 1")
elif key == "b":
print("You pressed B → Triggering Action 2")
elif key == "q":
print("Quit hotkeys (press Enter to exit)")
kn.stop()
kn.on("key_press", key_action)
kn.start()
input("Try pressing A, B, or Q\n")
from keynet import KeyNet
from ctypes import cast, POINTER
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume
devices = AudioUtilities.GetSpeakers()
interface = devices.Activate(IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
volume = cast(interface, POINTER(IAudioEndpointVolume))
kn = KeyNet()
def volume_control(key):
if key == "up":
current = volume.GetMasterVolumeLevelScalar()
volume.SetMasterVolumeLevelScalar(min(1.0, current + 0.1), None)
print(f"Volume UP → {int(volume.GetMasterVolumeLevelScalar() * 100)}%")
elif key == "down":
current = volume.GetMasterVolumeLevelScalar()
volume.SetMasterVolumeLevelScalar(max(0.0, current - 0.1), None)
print(f"Volume DOWN → {int(volume.GetMasterVolumeLevelScalar() * 100)}%")
kn.on("key_press", volume_control)
kn.start()
input("Press UP/DOWN arrow keys to control volume (Enter to quit)\n")
from keynet import KeyNet
from pynput import mouse
kn = KeyNet()
mouse_controller = mouse.Controller()
def key_mouse_combo(key):
if key == "c":
pos = mouse_controller.position
print(f"Captured mouse position: {pos}")
elif key == "r":
mouse_controller.position = (100, 100)
print("Moved mouse to (100, 100)")
kn.on("key_press", key_mouse_combo)
kn.start()
input("Press C to capture mouse pos, R to move mouse (Enter to quit)\n")
KeyNet
ClassKeyNet()
Create a new event detector instance.
@detector.on_key(callback)
Registers a callback that triggers on every key press.
@detector.on_key
def log_key(event):
print(f"Key pressed: {event}")
@detector.on_hotkey(hotkeys: List[Set[str]])
Registers a callback that triggers when a hotkey combination is pressed.
@detector.on_hotkey([{"ctrl", "shift", "x"}])
def hotkey_action(event):
print("CTRL + SHIFT + X detected!")
@detector.on_click(callback)
Registers a callback for mouse clicks.
@detector.on_click
def on_click(event):
print(f"Mouse clicked: {event}")
@detector.on_scroll(callback)
Registers a callback for mouse scroll events.
@detector.on_scroll
def on_scroll(event):
print(f"Scrolled: {event}")
@detector.on_volume_change(callback)
Registers a callback for system volume changes.
@detector.on_volume_change
def on_volume_change(volume_level):
print(f"Volume changed: {volume_level}")
detector.start()
Starts listening for all registered events.
detector.start()
detector.stop()
Stops event detection.
detector.stop()
FAQs
Event-driven automation library for keyboard, mouse, system, and network events.
We found that keynet 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.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.