Project

General

Profile

« Previous | Next » 

Revision 20dcac61

Added by SARRAZIN Théo about 2 years ago

resolves issue #13940 by adding a default statement to handle any protocol layout

View differences:

src/etc/inc/syslog.inc
1096 1096
		$flent['srcip'] = $rule_data[$field++];
1097 1097
		$flent['dstip'] = $rule_data[$field++];
1098 1098

  
1099
		if ($flent['protoid'] == '6' || $flent['protoid'] == '17') { // TCP or UDP
1100
			$flent['srcport'] = $rule_data[$field++];
1101
			$flent['dstport'] = $rule_data[$field++];
1102

  
1103
			$flent['src'] = $flent['srcip'] . ':' . $flent['srcport'];
1104
			$flent['dst'] = $flent['dstip'] . ':' . $flent['dstport'];
1105

  
1106
			$flent['datalen'] = $rule_data[$field++];
1107
			if ($flent['protoid'] == '6') { // TCP
1108
				$flent['tcpflags'] = $rule_data[$field++];
1109
				$flent['seq'] = $rule_data[$field++];
1110
				$flent['ack'] = $rule_data[$field++];
1111
				$flent['window'] = $rule_data[$field++];
1112
				$flent['urg'] = $rule_data[$field++];
1113
				$flent['options'] = explode(";", $rule_data[$field++]);
1114
			}
1115
		} else if ($flent['protoid'] == '1' || $flent['protoid'] == '58') {	// ICMP (IPv4 & IPv6)
1116
			$flent['src'] = $flent['srcip'];
1117
			$flent['dst'] = $flent['dstip'];
1118

  
1119
			$flent['icmp_type'] = $rule_data[$field++];
1120

  
1121
			switch ($flent['icmp_type']) {
1122
				case "request":
1123
				case "reply":
1124
					$flent['icmp_id'] = $rule_data[$field++];
1125
					$flent['icmp_seq'] = $rule_data[$field++];
1126
					break;
1127
				case "unreachproto":
1128
					$flent['icmp_dstip'] = $rule_data[$field++];
1129
					$flent['icmp_protoid'] = $rule_data[$field++];
1130
					break;
1131
				case "unreachport":
1132
					$flent['icmp_dstip'] = $rule_data[$field++];
1133
					$flent['icmp_protoid'] = $rule_data[$field++];
1134
					$flent['icmp_port'] = $rule_data[$field++];
1135
					break;
1136
				case "unreach":
1137
				case "timexceed":
1138
				case "paramprob":
1139
				case "redirect":
1140
				case "maskreply":
1141
					$flent['icmp_descr'] = $rule_data[$field++];
1142
					break;
1143
				case "needfrag":
1144
					$flent['icmp_dstip'] = $rule_data[$field++];
1145
					$flent['icmp_mtu'] = $rule_data[$field++];
1146
					break;
1147
				case "tstamp":
1148
					$flent['icmp_id'] = $rule_data[$field++];
1149
					$flent['icmp_seq'] = $rule_data[$field++];
1150
					break;
1151
				case "tstampreply":
1152
					$flent['icmp_id'] = $rule_data[$field++];
1153
					$flent['icmp_seq'] = $rule_data[$field++];
1154
					$flent['icmp_otime'] = $rule_data[$field++];
1155
					$flent['icmp_rtime'] = $rule_data[$field++];
1156
					$flent['icmp_ttime'] = $rule_data[$field++];
1157
					break;
1158
				default :
1159
					$flent['icmp_descr'] = $rule_data[$field++];
1160
					break;
1161
			}
1162

  
1163
		} else if ($flent['protoid'] == '2') { // IGMP
1164
			$flent['src'] = $flent['srcip'];
1165
			$flent['dst'] = $flent['dstip'];
1166
		} else if ($flent['protoid'] == '112') { // CARP
1167
			$flent['type'] = $rule_data[$field++];
1168
			$flent['ttl'] = $rule_data[$field++];
1169
			$flent['vhid'] = $rule_data[$field++];
1170
			$flent['version'] = $rule_data[$field++];
1171
			$flent['advskew'] = $rule_data[$field++];
1172
			$flent['advbase'] = $rule_data[$field++];
1173
			$flent['src'] = $flent['srcip'];
1174
			$flent['dst'] = $flent['dstip'];
1099
		switch($flent['protoid']) {
1100
			case '6':
1101
			case '17': // TCP or UDP
1102
				$flent['srcport'] = $rule_data[$field++];
1103
				$flent['dstport'] = $rule_data[$field++];
1104

  
1105
				$flent['src'] = $flent['srcip'] . ':' . $flent['srcport'];
1106
				$flent['dst'] = $flent['dstip'] . ':' . $flent['dstport'];
1107

  
1108
				$flent['datalen'] = $rule_data[$field++];
1109
				if ($flent['protoid'] == '6') { // TCP
1110
					$flent['tcpflags'] = $rule_data[$field++];
1111
					$flent['seq'] = $rule_data[$field++];
1112
					$flent['ack'] = $rule_data[$field++];
1113
					$flent['window'] = $rule_data[$field++];
1114
					$flent['urg'] = $rule_data[$field++];
1115
					$flent['options'] = explode(";", $rule_data[$field++]);
1116
				}
1117
				break;
1118
			case '1':
1119
			case '58': // ICMP (IPv4 & IPv6)
1120
				$flent['src'] = $flent['srcip'];
1121
				$flent['dst'] = $flent['dstip'];
1122

  
1123
				$flent['icmp_type'] = $rule_data[$field++];
1124

  
1125
				switch ($flent['icmp_type']) {
1126
					case "request":
1127
					case "reply":
1128
						$flent['icmp_id'] = $rule_data[$field++];
1129
						$flent['icmp_seq'] = $rule_data[$field++];
1130
						break;
1131
					case "unreachproto":
1132
						$flent['icmp_dstip'] = $rule_data[$field++];
1133
						$flent['icmp_protoid'] = $rule_data[$field++];
1134
						break;
1135
					case "unreachport":
1136
						$flent['icmp_dstip'] = $rule_data[$field++];
1137
						$flent['icmp_protoid'] = $rule_data[$field++];
1138
						$flent['icmp_port'] = $rule_data[$field++];
1139
						break;
1140
					case "unreach":
1141
					case "timexceed":
1142
					case "paramprob":
1143
					case "redirect":
1144
					case "maskreply":
1145
						$flent['icmp_descr'] = $rule_data[$field++];
1146
						break;
1147
					case "needfrag":
1148
						$flent['icmp_dstip'] = $rule_data[$field++];
1149
						$flent['icmp_mtu'] = $rule_data[$field++];
1150
						break;
1151
					case "tstamp":
1152
						$flent['icmp_id'] = $rule_data[$field++];
1153
						$flent['icmp_seq'] = $rule_data[$field++];
1154
						break;
1155
					case "tstampreply":
1156
						$flent['icmp_id'] = $rule_data[$field++];
1157
						$flent['icmp_seq'] = $rule_data[$field++];
1158
						$flent['icmp_otime'] = $rule_data[$field++];
1159
						$flent['icmp_rtime'] = $rule_data[$field++];
1160
						$flent['icmp_ttime'] = $rule_data[$field++];
1161
						break;
1162
					default :
1163
						$flent['icmp_descr'] = $rule_data[$field++];
1164
						break;
1165
				}
1166
				break;
1167
			case '112': // CARP
1168
				$flent['type'] = $rule_data[$field++];
1169
				$flent['ttl'] = $rule_data[$field++];
1170
				$flent['vhid'] = $rule_data[$field++];
1171
				$flent['version'] = $rule_data[$field++];
1172
				$flent['advskew'] = $rule_data[$field++];
1173
				$flent['advbase'] = $rule_data[$field++];
1174
				$flent['src'] = $flent['srcip'];
1175
				$flent['dst'] = $flent['dstip'];
1176
				break;
1177
			default:
1178
				$flent['src'] = $flent['srcip'];
1179
				$flent['dst'] = $flent['dstip'];
1180
				break;
1175 1181
		}
1176 1182
	} else {
1177 1183
		if (g_get('debug')) {

Also available in: Unified diff