Hello everybody
Sorry for my englsih
I would like to make the discovery function of winbox in C#
I found a similar program c ++ and I would want your to pass of c ++ in c #
this is the program in c+
Mikrotik Neighbor Discovery (MNDP)
Mikrotik Neighbor Discovery (MNDP) (C++/Qt)
For all that are interestet in discovering Mikrotik devices in their own programs here is an example how to do, written in C++/Qt
First we send out some UDP packages to request Mikrotik answers:
QByteArray datagram;
datagram.resize(4);
datagram[0] = 0 x 00;
datagram[1] = 0 x 00;
datagram[2] = 0 x 00;
datagram[3] = 0 x 00;
// Send a few packets to force Mikrotik Discovery
for(int i = 0; i < 3; i++)
··udpSocket->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, 5678);
After a while we get a UDP Packet back with the required information, we just need to parse it:
QByteArray datagram;
QHostAddress *address = new QHostAddress;
int datatoread = udpSocket->pendingDatagramSize();
char *datagramPtr = 0;
short len = 0;
QByteArray macAddr, identity, version, platform, uptime, softwareid, board, unpack, interface;
datagram.resize(datatoread);
udpSocket->readDatagram(datagram.data(), datatoread, address);
// MNDP packet has a bit size
if(datatoread < 18)
·· continue;
// Work with pointer
datagramPtr = datagram.data();
// Get MAC-address
len = 0;
len |= ((datagramPtr[6])& 0 x FF < < 8) | ((datagramPtr[7]) & 0 x FF);
macAddr.resize(len*2+5);
sprintf(macAddr.data(), “% 02x:% 02x:% 02x:% 02x:% 02x:% 02x”,
datagramPtr[8], datagramPtr[9], datagramPtr[10],
datagramPtr[11], datagramPtr[12], datagramPtr[13]);
// Get Identity
datagramPtr += 16;
len = 0;
len |= ((datagramPtr[0]) & 0 x FF << 8) | ((datagramPtr[1])& 0 x FF);
identity.resize(len);
strncpy(identity.data(), datagramPtr+2, len);
// Get Version
datagramPtr += len + 4;
len = 0;
len |= ((datagramPtr[0])& 0 x FF << 8) | ((datagramPtr[1])& 0 x FF);
version.resize(len);
strncpy(version.data(), datagramPtr+2, len);
// Get Platform
datagramPtr += len + 4;
len = 0;
len |= ((datagramPtr[0])&0xFF << 8) | ((datagramPtr[1]) & 0 x FF);
platform.resize(len);
strncpy(platform.data(), datagramPtr+2, len);
// Get Uptime
datagramPtr += len + 4;
len = 0;
len |= ((datagramPtr[0]) & 0 x FF << 8) | ((datagramPtr[1]) & 0 x FF);
uptime.resize(len);
strncpy(uptime.data(), datagramPtr+2, len);
// Get Software-ID
datagramPtr += len + 4;
len = 0;
len |= ((datagramPtr[0])&0xFF << 8) | ((datagramPtr[1])&0xFF);
softwareid.resize(len);
strncpy(softwareid.data(), datagramPtr+2, len);
// Get Board
datagramPtr += len + 4;
len = 0;
len |= ((datagramPtr[0])&0xFF << 8) | ((datagramPtr[1])&0xFF);
board.resize(len);
strncpy(board.data(), datagramPtr+2, len);
// Get Unpack
datagramPtr += len + 4;
len = 0;
len |= ((datagramPtr[0])&0xFF < < 8) | ((datagramPtr[1])&0xFF);
unpack.resize(len);
strncpy(unpack.data(), datagramPtr+2, len);
// Get Interface
datagramPtr += len + 4;
len = 0;
len |= ((datagramPtr[0])&0xFF < < 8) | ((datagramPtr[1])&0xFF);
interface.resize(len);
strncpy(interface.data(), datagramPtr+2, len);