97 lines
2.3 KiB
Python
97 lines
2.3 KiB
Python
from dataclasses import dataclass, field
|
|
from socket import AddressFamily, SocketKind
|
|
from typing import Optional
|
|
|
|
|
|
@dataclass
|
|
class Connection:
|
|
"""
|
|
Network/UNIX socket data class.
|
|
"""
|
|
|
|
fd: int = field(
|
|
metadata={
|
|
'metadata': {
|
|
'description': 'File descriptor',
|
|
'example': 3,
|
|
},
|
|
}
|
|
)
|
|
|
|
family: AddressFamily = field(
|
|
metadata={
|
|
'metadata': {
|
|
'description': 'Socket family',
|
|
'example': AddressFamily.AF_INET.name,
|
|
}
|
|
}
|
|
)
|
|
|
|
type: SocketKind = field(
|
|
metadata={
|
|
'metadata': {
|
|
'description': 'Socket type',
|
|
'example': SocketKind.SOCK_STREAM.name,
|
|
}
|
|
}
|
|
)
|
|
|
|
local_address: str = field(
|
|
metadata={
|
|
'metadata': {
|
|
'description': 'Local address, as an IP address for network '
|
|
'connections and a socket path for a UNIX socket',
|
|
'example': '192.168.1.2',
|
|
}
|
|
}
|
|
)
|
|
|
|
local_port: Optional[int] = field(
|
|
metadata={
|
|
'metadata': {
|
|
'description': 'Local port, if this is a TCP/UDP connection, '
|
|
'otherwise null',
|
|
'example': 12345,
|
|
}
|
|
}
|
|
)
|
|
|
|
remote_address: Optional[str] = field(
|
|
metadata={
|
|
'metadata': {
|
|
'description': 'Remote address, if this is a network '
|
|
'connection, otherwise null',
|
|
'example': '192.168.1.1',
|
|
}
|
|
}
|
|
)
|
|
|
|
remote_port: Optional[int] = field(
|
|
metadata={
|
|
'metadata': {
|
|
'description': 'Local port, if this is a TCP/UDP connection, '
|
|
'otherwise null',
|
|
'example': 443,
|
|
}
|
|
}
|
|
)
|
|
|
|
status: Optional[str] = field(
|
|
metadata={
|
|
'metadata': {
|
|
'description': 'Connection status, if this is a network '
|
|
'connection, otherise null',
|
|
'example': 'ESTABLISHED',
|
|
}
|
|
}
|
|
)
|
|
|
|
pid: Optional[int] = field(
|
|
metadata={
|
|
'metadata': {
|
|
'description': 'ID of the process that owns the connection',
|
|
'example': 4321,
|
|
}
|
|
}
|
|
)
|