Skip to content

Commit 32729ad

Browse files
author
Leonardo Parente
authored
avoid send not tcp dns packet (#262)
1 parent 89b6cef commit 32729ad

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

src/handlers/dns/DnsStreamHandler.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ void DnsStreamHandler::process_udp_packet_cb(pcpp::Packet &payload, PacketDirect
180180

181181
void TcpSessionData::receive_dns_wire_data(const uint8_t *data, size_t len)
182182
{
183+
if (_invalid_data) {
184+
return;
185+
}
186+
183187
_buffer.append(reinterpret_cast<const char *>(data), len);
184188

185189
for (;;) {
@@ -193,6 +197,13 @@ void TcpSessionData::receive_dns_wire_data(const uint8_t *data, size_t len)
193197
// dns packet size is in network byte order.
194198
size = static_cast<unsigned char>(_buffer[1]) | static_cast<unsigned char>(_buffer[0]) << 8;
195199

200+
//if size is less than MIN_DNS_QUERY_SIZE, it is not a dns packet
201+
if (size < MIN_DNS_QUERY_SIZE) {
202+
_buffer.clear();
203+
_invalid_data = true;
204+
break;
205+
}
206+
196207
if (_buffer.size() >= sizeof(size) + size) {
197208
auto data = std::make_unique<uint8_t[]>(size);
198209
std::memcpy(data.get(), _buffer.data() + sizeof(size), size);

src/handlers/dns/DnsStreamHandler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,11 +213,13 @@ class TcpSessionData final
213213
private:
214214
std::string _buffer;
215215
got_msg_cb _got_dns_msg;
216+
bool _invalid_data;
216217

217218
public:
218219
TcpSessionData(
219220
got_msg_cb got_data_handler)
220221
: _got_dns_msg{std::move(got_data_handler)}
222+
, _invalid_data(false)
221223
{
222224
}
223225

0 commit comments

Comments
 (0)