Hi everyone,
i am in need of ideas and want a bit of advise...i want to make a serial port sniffer which will be able to read the data goin in and out of the serial port between two other programs.....

im not sure how i will be able to access a port when its already open....:confused:

all advises are heartily welcome
Thank you....

Recommended Answers

All 10 Replies

ok let me put it this way.....

import os
import sys
import time

sys.path.append ( os.path.join( os.getcwd(),
                                'common',
                                'uspp')
                )

from uspp import *

DEFAULT_COM_PORT   = "COM1"
DEFAULT_BAUD_RATE  = 57600
DEFAULT_TIME_OUT   = 10000
class MySerialPort():    
     def __init__(self,
                 port      = DEFAULT_COM_PORT,
                 timeout   = DEFAULT_TIME_OUT,
                 baud      = DEFAULT_BAUD_RATE):
        #initialize and configure serial port class
        self.tty = SerialPort(port, timeout, baud)          
        self.port = port
        self.baud = baud
        self.timeout = timeout
    
    def getCurrentSerialPort(self):
        return self.port
    
    def getCurrentBaudRate(self):
        return self.baud

    def getCurrentTimeout(self):
        return self.timeout   
    
    def write(self,str):
        self.tty.write(str)
        
    def read(self):
        time.sleep(3)
        return self.tty.read(self.tty.inWaiting())

    def flush(self):
        self.tty.flush()
        
    def __del__(self):
        self.tty.__del__()
 
if __name__ == '__main__' :
    #initialise and open port
    SerialPort1 = MySerialPort(DEFAULT_COM_PORT,0,DEFAULT_BAUD_RATE)
    while 1:
        SerialPort1.write(str(raw_input('enter a letter')))
        st=SerialPort1.read()
        print st
        if st=='q':
            break

i have this code as a serial port analyzer....where my this code becomes one end and the target the other and we can send command through my script and see the response....but what i want is a program where two other programs would be communicating through a serial port and my program can monitor it...so basically i want to read a serial port which is already open by some other port...is this possible in python....

Have made alook in network programming??

self.__handle=CreateFile (dev,                                  win32con.GENERIC_READ|win32con.GENERIC_WRITE,
                                  0, # exclusive access
                                  None, # no security
                                  win32con.OPEN_EXISTING,
                                  win32con.FILE_ATTRIBUTE_NORMAL,
                                  None)

this was the method that creates or opens the serial port....i noticed an attribute which was given value here 0...(3rd attribute...)
the values i can give there are.

win32con.FILE_SHARE_READ
win32con.FILE_SHARE_WRITE
win32con.FILE_SHARE_DELETE

i tried the combination but it does not seem to work.....

GENERIC_READ|win32con.GENERIC_WRITE will not help. Serial Port Sniffers install a special driver that help to intercept all data exchange. Therefore I would suggest to try Serial Port Monitor . There's a demo period, which may be enough time to do what you want to do.
-
HD

Hello,

has there been any update on this one?
I am also doing the same application that monitors an existing and used port. Say below:

[ COMPUTER/DESKTOP SIDE ] ============ [ EXTERNAL HARDWARE ]
MyDesktopApplication <-> COM1 <== SERIAL CABLE ==> COM2 <> MyDevice


The setup is basically as stated above. What the desired application, programatically, is to monitor or sniff to the activities between the ports.

Thanks,
Eljun

Hello all!
Windows OS does not have a built-in way to monitor the activity of a serial port device or check the amount of data sent and received.
In fact, you can use free versions of monitoring programs, but in practice I know that it is very problematic to set it up qualitatively. Because of this, I switched to commercial software, I advise https://www.eltima.com/products/serial-port-monitor/. Read signals and commands easier and without problems.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.19 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.