Disable USB device on Python in Windows 10 - python

I have an RFID reader that works as a Keyboard, so, if I click on a Text Entry and put a card near the reader, it puts the content read on the text entry.
The latest RFID reader I was using works via serial connection, so I can open and close the connection to avoid fake positives, but with this new model, I can't do that, so I need to disable and enable the device without unplug it from the USB, just like if I do from the Windows Device Manager.
I have tried with pyusb but, in Windows, it doesn't display nothing, (I have tried the same on my RPi 3 and it works properly, but I don't know if I could disable the port).
By the way, I also tried with infi.devicemanager but this only list all peripherals connected and doesn't let me disable/enable it.
Is there any way to do this, like edit the registry, or acess it via cmd prompt.
Thanks!

There is command line tool for this called DevCon. You can disable devices using devcon-disable command. It's supported by Microsoft and since it's a command line tool you can use it programmatically. Here is an example.

Related

How to capture the traffic of an Android device in Python?

I want to capture traffic of a particular Android device using a Python script. I am doing the same thing for a laptop using "pyshark" that monitors the real-time traffic of laptop for a specific time and then creates a pcap file for it. I want to do the same thing for my Android device. I have tried Tcpdump, scapy and packetsniffer but nothing helped me in capturing the traffic of my Android device.
Ideally I want an analyzer (a python script) that should run in such a fashion that when it is turned on, it continuously monitors the traffic of my Android device. I will have to make something similar to a proxy server but i am stucked how to do it.
pyshark usage for my laptop
Does your program run with the necessary rights at all? Under Linux and Windows a program needs extended rights to open raw sockets, which are necessary for sniffing. Under Windows there must be some group policy XY setting (I don't know Windows), under Linux the program needs root rights.
I don't know about such a policy too. But in the scenario displayed in the picture attached, there is no need for socket programming. I am also okay with passive sniffing.

How can Mindstorms EV3 communicate with my PC via Bluetooth?

I am programming a EV3 in microPython 2. I have another python 3 program running on a laptop and this program should send data to the EV3 wirelessly. Is it possible via bluetooth? If it isn't possible how should I do it?
I don't know the answer to this and I don't have an EV3 brick to try this with. As you haven't said what you have tried, I thought I would share some ideas for experiments to try.
I looked at the ev3-micropython documentation about Bluetooth and my search gave me this:
https://pybricks.github.io/ev3-micropython/messaging.html
This looks like the Bluetooth communication might be based on Bluetooth Serial Port Profile (SPP) so it might be worth seeing if SPP clients can communicate.
A first experiment might be to start a BluetoothMailboxServer on the EV3 and see if are you able to pair with it from your PC? (By the way, what OS are you running on your laptop?).
If you have Windows, do these instructions from this URL help:
https://www.instructables.com/id/Raspberry-Pi-Bluetooth-to-PuTTY-on-Windows-10/
On your Windows 10 Desktop/ Laptop first enable the Bluetooth
transceiver. Select Start, Settings, then Devices. At this point
resist the intuitive temptation to Add bluetooth or other device.
Instead, scroll down to 'Related settings', and select Devices and
printers. Find your Desktop/ Laptop under 'Devices', right click it,
then select Bluetooth settings from the pop up menu. This brings up
the 'Bluetooth settings dialogue:
Select the COM ports tab, then select Add... to bring up the 'Add COM
port' dialogue. Here we select the 'Outgoing' radio button, and then
click on Browse... This will yield the 'Select Bluetooth Device'
dialogue. All going well, you should see your Raspberry Pi listed as a
discovered device. Select the Raspberry Pi device listed, and click OK
twice. This should take you back to the COM ports tabbed dialogue, and
list a COM port that is now associated with the Windows 10/ Raspberry
Pi pairing. Take note of which COM port has been assigned.
On a Linux laptop, does creating a client this way work:
http://blog.kevindoran.co/bluetooth-programming-with-python-3/
Another alternative on Linux, is create a client this way:
https://bluedot.readthedocs.io/en/latest/btcommapi.html#bluetoothclient
If you have an Android phone, you could try pairing with the EV3 service from the phone and then trying to connect with this SPP app:
https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal
The other alternative is that the BluetoothMailboxServer might be using Bluetooth Low Energy (BLE). If that is the case, then you can find more information if you have a recent version of the Chrome browser on your laptop. Go to the URL chrome://bluetooth-internals/#devices and do a start scan. Does the EV3 device turn up?
About communication between EV3 and python code running on a laptop,
First we need to install the module python-ev3dev2 with the command:
pip install python-ev3dev2
About its usage, you can refer to ev3dev2.
Ensure that your ev3dev device is turned on and has a network connection to the host computer. Here Bluetooth works and there's a demo you can refer to: vscode-hello-python.

How can I sniff packets using Scapy without any CMD opened?

I'm trying to write a script to sniff some packets and send others according to the sniff.
I also want that script to be completely invisible to the user (so it could only be seen from Task Manager).
I tried changing the script extension to .pyw so it would run with pythonw.exe, and it kind of works. However a PowerShell window opens up and when closed, shuts off the pythonw process as well.
I read some on the web and understood Scapy creates it in order to get access to low level networking requests. I also found code to change it into a regular CMD. However I don't want it to change to another shell type, I want this shell to disappear completely so there's no indication om the desktop that the script is running.
How do I achieve this? Is there a way to request scapy to create this shell as a background process? Or is there a way to move an already running CMD to the background?
Thanks in advance!
PS:
The code to change the PowerShell to CMD is:
POWERSHELL_PROCESS.close()
conf.prog.powershell = None
POWERSHELL_PROCESS.__init__()
After the import, and was found here.
I don’t really understand what you are trying to do
This was a well-known bug in scapy, that opened in some IDE (e.g IDLE), the powershell would be visible. As shown in the link you provided, it has been fixed https://github.com/secdev/scapy/issues/1387 so that the shell now is invisible.
If this is your issue, use the latest github version https://github.com/secdev/scapy/archive/master.zip

Control rs232 windows terminal program from python

I am testing a piece of hardware which hosts an ftp server. I connect to the server in order to configure the hardware in question.
My test environment is written in Python 3.
To start the ftp server, I need to launch a special proprietary terminal application on my pc. I must use this software as far as I know and I have no help files for it. I do however know how to use it to launch the ftp server and that's all I need it for.
When I start this app, I go to the menu and open a dialog where I select the com port/speed the hardware is connected to. I then enter the command to launch the ftp server in a console like window within the application. I am then prompted for the admin code for the hardware, which I enter. When I'm finished configuring the device, I issue a command to restart the hardware's software.
In order for me to fully automate my tests, I need to remove the manual starting of this ftp server for each test.
As far as I know, I have two options:
Windows GUI automation
Save the stream of data sent on the com port when using this application.
I've tried to find an GUI automater but pywinauto isn't supporting Python 3. Any other options here which I should look at?
Any suggestions on how I can monitor the com port in question and save the traffic on it?
Thanks,
Barry
Have you looked at pySerial? It's been a few years since I've used it but it was quite good at handling RS-232 communications and it looks like it's compatible with Python 3.x.
Sikuli might provide the kind of GUI automation you need.
I was also able to solve this using WScript, but pySerial was the preferred solution.

Getting Notified on "Ethernet cable plugged in" events in linux

I am writing a Python Application running on linux. I want to be able to register and be notified by the system if a network cable is plugged in/ out.
I am already using pyUdev (python bindings for libUdev) in order to get notified for USB plug in events. However, because the network eth0 module (for example) always remains loaded (regardless of the cable being plugged in) , I dont get the information I require. It only works for if up/down events.
I have read a lot of posts on Windows WMI providing this functionality but none on linux. Am I looking in the right direction?
A python way of doing this (a python library) would be ideal as I want to integrate this with my program.
There are many ways to get the "UP" status of a network interface via polling, ranging from simply parsing ifconfig output, to reading the status of /proc/net/... pseudo-files.
However, for a way to be notified (i.e. not poll yourself) for such events, your best option on Ubuntu is to use the netplug package. It's not installed by default, you need to:
sudo apt-get install netplug
Some documentation is here: http://manpages.ubuntu.com/manpages/lucid/man8/netplugd.8.html
To set it up you need to tweak /etc/netplug/netplugd.conf and /etc/netplug/netplug scripts. For an example of those config files check out the section "Configuring netplug" at http://natisbad.org/dyn-net/index.html
With /etc/netplug/netplug you can have your own python script called when the network goes down/up, so you can generate your kind of event for your application.
Have you looked into netplugd command, I am not sure if a python wrapper exists but it should not be hard to parse the output

Categories