1# SPDX-License-Identifier: GPL-2.0-only
2# This file is part of Scapy
3# See https://scapy.net/ for more information
4# Copyright (C) Philippe Biondi <phil@secdev.org>
5
6"""
7Skinny Call Control Protocol (SCCP)
8"""
9
10from scapy.packet import Packet, bind_layers
11from scapy.fields import LEIntField, LEIntEnumField
12from scapy.layers.inet import TCP
13
14# shamelessly ripped from Ethereal dissector
15skinny_messages = {
16 # Station -> Callmanager
17 0x0000: "KeepAliveMessage",
18 0x0001: "RegisterMessage",
19 0x0002: "IpPortMessage",
20 0x0003: "KeypadButtonMessage",
21 0x0004: "EnblocCallMessage",
22 0x0005: "StimulusMessage",
23 0x0006: "OffHookMessage",
24 0x0007: "OnHookMessage",
25 0x0008: "HookFlashMessage",
26 0x0009: "ForwardStatReqMessage",
27 0x000A: "SpeedDialStatReqMessage",
28 0x000B: "LineStatReqMessage",
29 0x000C: "ConfigStatReqMessage",
30 0x000D: "TimeDateReqMessage",
31 0x000E: "ButtonTemplateReqMessage",
32 0x000F: "VersionReqMessage",
33 0x0010: "CapabilitiesResMessage",
34 0x0011: "MediaPortListMessage",
35 0x0012: "ServerReqMessage",
36 0x0020: "AlarmMessage",
37 0x0021: "MulticastMediaReceptionAck",
38 0x0022: "OpenReceiveChannelAck",
39 0x0023: "ConnectionStatisticsRes",
40 0x0024: "OffHookWithCgpnMessage",
41 0x0025: "SoftKeySetReqMessage",
42 0x0026: "SoftKeyEventMessage",
43 0x0027: "UnregisterMessage",
44 0x0028: "SoftKeyTemplateReqMessage",
45 0x0029: "RegisterTokenReq",
46 0x002A: "MediaTransmissionFailure",
47 0x002B: "HeadsetStatusMessage",
48 0x002C: "MediaResourceNotification",
49 0x002D: "RegisterAvailableLinesMessage",
50 0x002E: "DeviceToUserDataMessage",
51 0x002F: "DeviceToUserDataResponseMessage",
52 0x0030: "UpdateCapabilitiesMessage",
53 0x0031: "OpenMultiMediaReceiveChannelAckMessage",
54 0x0032: "ClearConferenceMessage",
55 0x0033: "ServiceURLStatReqMessage",
56 0x0034: "FeatureStatReqMessage",
57 0x0035: "CreateConferenceResMessage",
58 0x0036: "DeleteConferenceResMessage",
59 0x0037: "ModifyConferenceResMessage",
60 0x0038: "AddParticipantResMessage",
61 0x0039: "AuditConferenceResMessage",
62 0x0040: "AuditParticipantResMessage",
63 0x0041: "DeviceToUserDataVersion1Message",
64 # Callmanager -> Station */
65 0x0081: "RegisterAckMessage",
66 0x0082: "StartToneMessage",
67 0x0083: "StopToneMessage",
68 0x0085: "SetRingerMessage",
69 0x0086: "SetLampMessage",
70 0x0087: "SetHkFDetectMessage",
71 0x0088: "SetSpeakerModeMessage",
72 0x0089: "SetMicroModeMessage",
73 0x008A: "StartMediaTransmission",
74 0x008B: "StopMediaTransmission",
75 0x008C: "StartMediaReception",
76 0x008D: "StopMediaReception",
77 0x008F: "CallInfoMessage",
78 0x0090: "ForwardStatMessage",
79 0x0091: "SpeedDialStatMessage",
80 0x0092: "LineStatMessage",
81 0x0093: "ConfigStatMessage",
82 0x0094: "DefineTimeDate",
83 0x0095: "StartSessionTransmission",
84 0x0096: "StopSessionTransmission",
85 0x0097: "ButtonTemplateMessage",
86 0x0098: "VersionMessage",
87 0x0099: "DisplayTextMessage",
88 0x009A: "ClearDisplay",
89 0x009B: "CapabilitiesReqMessage",
90 0x009C: "EnunciatorCommandMessage",
91 0x009D: "RegisterRejectMessage",
92 0x009E: "ServerResMessage",
93 0x009F: "Reset",
94 0x0100: "KeepAliveAckMessage",
95 0x0101: "StartMulticastMediaReception",
96 0x0102: "StartMulticastMediaTransmission",
97 0x0103: "StopMulticastMediaReception",
98 0x0104: "StopMulticastMediaTransmission",
99 0x0105: "OpenReceiveChannel",
100 0x0106: "CloseReceiveChannel",
101 0x0107: "ConnectionStatisticsReq",
102 0x0108: "SoftKeyTemplateResMessage",
103 0x0109: "SoftKeySetResMessage",
104 0x0110: "SelectSoftKeysMessage",
105 0x0111: "CallStateMessage",
106 0x0112: "DisplayPromptStatusMessage",
107 0x0113: "ClearPromptStatusMessage",
108 0x0114: "DisplayNotifyMessage",
109 0x0115: "ClearNotifyMessage",
110 0x0116: "ActivateCallPlaneMessage",
111 0x0117: "DeactivateCallPlaneMessage",
112 0x0118: "UnregisterAckMessage",
113 0x0119: "BackSpaceReqMessage",
114 0x011A: "RegisterTokenAck",
115 0x011B: "RegisterTokenReject",
116 0x0042: "DeviceToUserDataResponseVersion1Message",
117 0x011C: "StartMediaFailureDetection",
118 0x011D: "DialedNumberMessage",
119 0x011E: "UserToDeviceDataMessage",
120 0x011F: "FeatureStatMessage",
121 0x0120: "DisplayPriNotifyMessage",
122 0x0121: "ClearPriNotifyMessage",
123 0x0122: "StartAnnouncementMessage",
124 0x0123: "StopAnnouncementMessage",
125 0x0124: "AnnouncementFinishMessage",
126 0x0127: "NotifyDtmfToneMessage",
127 0x0128: "SendDtmfToneMessage",
128 0x0129: "SubscribeDtmfPayloadReqMessage",
129 0x012A: "SubscribeDtmfPayloadResMessage",
130 0x012B: "SubscribeDtmfPayloadErrMessage",
131 0x012C: "UnSubscribeDtmfPayloadReqMessage",
132 0x012D: "UnSubscribeDtmfPayloadResMessage",
133 0x012E: "UnSubscribeDtmfPayloadErrMessage",
134 0x012F: "ServiceURLStatMessage",
135 0x0130: "CallSelectStatMessage",
136 0x0131: "OpenMultiMediaChannelMessage",
137 0x0132: "StartMultiMediaTransmission",
138 0x0133: "StopMultiMediaTransmission",
139 0x0134: "MiscellaneousCommandMessage",
140 0x0135: "FlowControlCommandMessage",
141 0x0136: "CloseMultiMediaReceiveChannel",
142 0x0137: "CreateConferenceReqMessage",
143 0x0138: "DeleteConferenceReqMessage",
144 0x0139: "ModifyConferenceReqMessage",
145 0x013A: "AddParticipantReqMessage",
146 0x013B: "DropParticipantReqMessage",
147 0x013C: "AuditConferenceReqMessage",
148 0x013D: "AuditParticipantReqMessage",
149 0x013F: "UserToDeviceDataVersion1Message",
150}
151
152
153class Skinny(Packet):
154 name = "Skinny"
155 fields_desc = [LEIntField("len", 0),
156 LEIntField("res", 0),
157 LEIntEnumField("msg", 0, skinny_messages)]
158
159
160bind_layers(TCP, Skinny, dport=2000)
161bind_layers(TCP, Skinny, sport=2000)
162bind_layers(TCP, Skinny, dport=2000, sport=2000)