diff options
author | Håkon Nessjøen <haakon.nessjoen@gmail.com> | 2010-09-30 00:13:13 +0200 |
---|---|---|
committer | Håkon Nessjøen <haakon.nessjoen@gmail.com> | 2010-09-30 00:13:13 +0200 |
commit | 87341fcc53b58d270528192607d3ce547abffa77 (patch) | |
tree | 4e00b649e1b6763047f5638e0a09c536771dd48a | |
parent | c90ce96f3f86404ee85b390a3ed4b575a257423d (diff) | |
download | MAC-Telnet-87341fcc53b58d270528192607d3ce547abffa77.tar.gz MAC-Telnet-87341fcc53b58d270528192607d3ce547abffa77.zip |
Added a simple tool for listing local mikrotik routers by mac address
-rw-r--r-- | Makefile | 7 | ||||
-rw-r--r-- | mndp.c | 71 |
2 files changed, 76 insertions, 2 deletions
@@ -1,10 +1,13 @@ -all: mactelnet +all: mactelnet mndp clean: dist-clean dist-clean: - rm -f mactelnet + rm -f mactelnet mndp mactelnet: config.h main.c udp.h udp.c mactelnet.c mactelnet.h console.c console.h devices.c devices.h gcc -g -o mactelnet -lcrypto main.c udp.c mactelnet.c console.c devices.c + +mndp: config.h mndp.c + gcc -g -o mndp mndp.c @@ -0,0 +1,71 @@ +/* + Mac-Telnet - Connect to RouterOS clients via MAC address + Copyright (C) 2010, Håkon Nessjøen <haakon.nessjoen@gmail.com> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +#include <stdlib.h> +#include <stdio.h> +#include <arpa/inet.h> +#include <netinet/ether.h> +#include <string.h> +#include "config.h" + +int main(int argc, char **argv) { + int sock,result; + struct sockaddr_in si_me; + unsigned char buff[1500]; + unsigned short nameLen = 0; + unsigned char name[100]; + unsigned char mac[ETH_ALEN]; + + sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + + memset((char *) &si_me, 0, sizeof(si_me)); + si_me.sin_family = AF_INET; + si_me.sin_port = htons(5678); + si_me.sin_addr.s_addr = htonl(INADDR_ANY); + + if (bind(sock, (struct sockaddr *)&si_me, sizeof(si_me))==-1) { + fprintf(stderr, "Error binding to %s:5678\n", inet_ntoa(si_me.sin_addr)); + return 1; + } + + /* Write informative message to STDERR to make it easier to use the output in simple scripts */ + fprintf(stderr, "Searching for MikroTik routers... Abort with CTRL+C.\n"); + + while(1) { + result = recvfrom(sock, buff, 1500, 0, 0, 0); + if (result < 0) { + fprintf(stderr, "Error occured. aborting\n"); + exit(1); + } + + memcpy(&nameLen, buff+16,2); + nameLen = (nameLen >> 8) | ((nameLen&0xff)<<8); + + /* Max name length = 99 */ + nameLen = nameLen < 100 ? nameLen : 99; + + memcpy(&name, buff+18, nameLen); + name[nameLen] = 0; + + memcpy(&mac, buff+8, ETH_ALEN); + + printf("%17s %s\n", ether_ntoa((struct ether_addr *)mac), name); + } + + return 0; +} |