e
This commit is contained in:
parent
f7d6c3109a
commit
ba786e388c
6 changed files with 90 additions and 149 deletions
57
src/Lookup.h
57
src/Lookup.h
|
|
@ -5,42 +5,41 @@
|
||||||
* Author: jdi
|
* Author: jdi
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "lookupTable.h"
|
#include "table.h"
|
||||||
|
|
||||||
static lookupTable rcv_lookup = { { 1, "type" }, //string
|
static table rcv_lookup = { { 1, table::STRING, "type" }, //string
|
||||||
{ 2, "hostname" }, //string
|
{ 2, table::STRING, "hostname" }, //string
|
||||||
{ 3, "mac" }, //byte[6]
|
{ 3, table::HEX, "mac" }, //byte[6]
|
||||||
{ 4, "ip_addr" }, //byte[4]
|
{ 4, table::DEC, "ip_addr" }, //byte[4]
|
||||||
{ 5, "ip_mask" }, //byte[4]
|
{ 5, table::DEC, "ip_mask" }, //byte[4]
|
||||||
{ 6, "gateway" }, //byte[4]
|
{ 6, table::DEC, "gateway" }, //byte[4]
|
||||||
{ 7, "firmware_version" }, //string
|
{ 7, table::STRING, "firmware_version" }, //string
|
||||||
{ 8, "hardware_version" }, //string
|
{ 8, table::STRING, "hardware_version" }, //string
|
||||||
{ 9, "dhcp" }, //bool byte
|
{ 9, table::DEC, "dhcp" }, //bool byte
|
||||||
{ 8704, "802.1q vlan" }, //???
|
{ 8704, table::HEX, "802.1q vlan" }, //???
|
||||||
//{0000," "},
|
//{0000," "},
|
||||||
};
|
};
|
||||||
|
|
||||||
static lookupTable snd_lookup = {
|
static table snd_lookup = {
|
||||||
|
|
||||||
// TODO find out if id is unique in response
|
// TODO find out if id is unique in response
|
||||||
{ 10, "???" }, //after login
|
{ 10, table::HEX, "???" }, //after login
|
||||||
{ 2, "???" }, //after login
|
{ 2, table::HEX, "???" }, //after login
|
||||||
{ 512, "login_user" }, //string
|
{ 512, table::STRING, "login_user" }, //string
|
||||||
{ 513, "new_user" }, //string
|
{ 513, table::STRING, "new_user" }, //string
|
||||||
{ 514, "login_password" }, //string
|
{ 514, table::STRING, "login_password" }, //string
|
||||||
{ 515, "new_passwoord" }, //string
|
{ 515, table::STRING, "new_passwoord" }, //string
|
||||||
{ 2200, "vlan" },
|
{ 2200, table::HEX, "vlan" }, { 2305, table::HEX, "???" }, //sent before login and before change hostname
|
||||||
{ 2305, "???" }, //sent before login and before change hostname
|
{ 4608, table::HEX, "port_trunk" }, //byte[5] last byte bitmask??
|
||||||
{ 4608, "port_trunk" }, //byte[5] last byte bitmask??
|
{ 8192, table::HEX, "mtu_vlan" }, //byte[2] first byte bool, second byte port id
|
||||||
{ 8192, "mtu_vlan" }, //byte[2] first byte bool, second byte port id
|
{ 8449, table::HEX, "port_vlan" }, //???
|
||||||
{ 8449, "port_vlan" }, //???
|
|
||||||
|
|
||||||
{ 8704, "802.1q vlan" }, //??? get vlan / set status
|
{ 8704, table::HEX, "802.1q vlan" }, //??? get vlan / set status
|
||||||
{ 8705, "802.1q vlan" }, //???
|
{ 8705, table::HEX, "802.1q vlan" }, //???
|
||||||
{ 8706, "802.1q vlan pvid" }, //????
|
{ 8706, table::HEX, "802.1q vlan pvid" }, //????
|
||||||
|
|
||||||
{ 12288, "QoS Basic" }, //bool = QoS Mod
|
{ 12288, table::HEX, "QoS Basic" }, //bool = QoS Mod
|
||||||
{ 16640, "port_mirror" }, //byte[10] second byte port id??
|
{ 16640, table::HEX, "port_mirror" }, //byte[10] second byte port id??
|
||||||
{ 17152, "loop_prevention" }, //bool byte
|
{ 17152, table::HEX, "loop_prevention" }, //bool byte
|
||||||
//{0000," "},
|
//{0000," "},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
#include "Types.h"
|
#include "Types.h"
|
||||||
|
|
||||||
#define VERSION "smrtlink (v1 Linux)\n"
|
#define VERSION "smrtlink (v1 Linux)\n"
|
||||||
#define USAGE "usage: %s [-bdhrvswx] [-i interface] [-u [password:]username]\n\
|
#define USAGE "usage: %s [-bdhjrvswx] [-i interface] [-u [password:]username]\n\
|
||||||
[-p password] <command>\n\n"
|
[-p password] <command>\n\n"
|
||||||
#define HELP "\
|
#define HELP "\
|
||||||
Option Summary:\n\
|
Option Summary:\n\
|
||||||
|
|
@ -21,6 +21,7 @@
|
||||||
-r switch ports to emulate switch while sniffing\n\
|
-r switch ports to emulate switch while sniffing\n\
|
||||||
-b --header Show header\n\
|
-b --header Show header\n\
|
||||||
-x --hex Display Packets as Hex String\n\
|
-x --hex Display Packets as Hex String\n\
|
||||||
|
-j --json Display Packets as JSON\n\
|
||||||
-i --interface <iface> only use one Interface\n\
|
-i --interface <iface> only use one Interface\n\
|
||||||
-u --user <[password:]username>\n\
|
-u --user <[password:]username>\n\
|
||||||
-p --password <password>\n\
|
-p --password <password>\n\
|
||||||
|
|
@ -38,8 +39,8 @@
|
||||||
encode use encoding algorithm on hex data separated by colon\n\
|
encode use encoding algorithm on hex data separated by colon\n\
|
||||||
get Not yet implemented\n\
|
get Not yet implemented\n\
|
||||||
set Not yet implemented\n\
|
set Not yet implemented\n\
|
||||||
save Not yet implemented: save config to file\n\
|
get|save Not yet implemented: save config to file\n\
|
||||||
restore Not yet implemented: restore onfig from file\n\
|
set|restore Not yet implemented: restore onfig from file\n\
|
||||||
flash Not yet implemented: replace firmware\n\
|
flash Not yet implemented: replace firmware\n\
|
||||||
reboot Not yet implemented\n\
|
reboot Not yet implemented\n\
|
||||||
reset Not yet implemented\n\n\
|
reset Not yet implemented\n\n\
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,21 @@ int Program::sniff() {
|
||||||
auto lookup=(options.flags & FLAG_REVERSE)?snd_lookup:rcv_lookup;
|
auto lookup=(options.flags & FLAG_REVERSE)?snd_lookup:rcv_lookup;
|
||||||
if(lookup.exists(d.type)) {
|
if(lookup.exists(d.type)) {
|
||||||
if(d.len>0) {
|
if(d.len>0) {
|
||||||
std::cout<<std::dec<<"\t++"<<std::hex<<d.type<<"++ :"<<d.value<<std::dec<<"\n";
|
const table::set *s = lookup.get(d.type);
|
||||||
|
switch(s->format) {
|
||||||
|
case table::STRING:
|
||||||
|
std::cout<<std::dec<<"\t"<<s->name<<": "<<&d.value[0]<<std::dec<<"\n";
|
||||||
|
break;
|
||||||
|
case table::HEX:
|
||||||
|
std::cout<<std::dec<<"\t"<<s->name<<": "<<std::hex<<d.value<<std::dec<<"\n";
|
||||||
|
break;
|
||||||
|
case table::DEC:
|
||||||
|
std::cout<<std::dec<<"\t"<<s->name<<": "<<std::dec<<d.value<<std::dec<<"\n";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
std::cout<<std::dec<<"\t"<<s->name<<": "<<std::hex<<d.value<<std::dec<<"\n";
|
||||||
|
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
std::cout<<std::dec<<"#"<<d.type<<"\tLength: "<<d.len<<"\n";
|
std::cout<<std::dec<<"#"<<d.type<<"\tLength: "<<d.len<<"\n";
|
||||||
std::cout<<std::hex<< "\tHex: " <<d.value<<"\n";
|
std::cout<<std::hex<< "\tHex: " <<d.value<<"\n";
|
||||||
|
|
@ -120,6 +134,7 @@ int Program::encode(std::string s) {
|
||||||
int Program::setProperty() {
|
int Program::setProperty() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Program::getProperty() {
|
int Program::getProperty() {
|
||||||
printf("Get:\n");
|
printf("Get:\n");
|
||||||
Packet p = Packet(Packet::GET);
|
Packet p = Packet(Packet::GET);
|
||||||
|
|
@ -164,6 +179,7 @@ int Program::getProperty() {
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Program::save() {
|
int Program::save() {
|
||||||
Switch sw = Switch();
|
Switch sw = Switch();
|
||||||
sw.settings.hostname = "testname.lan";
|
sw.settings.hostname = "testname.lan";
|
||||||
|
|
@ -171,6 +187,7 @@ int Program::save() {
|
||||||
f.write(sw.toString());
|
f.write(sw.toString());
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Program::restore() {
|
int Program::restore() {
|
||||||
File f;
|
File f;
|
||||||
Switch sw;
|
Switch sw;
|
||||||
|
|
@ -180,18 +197,22 @@ int Program::restore() {
|
||||||
<< sw.settings.ip_addr << "\n";
|
<< sw.settings.ip_addr << "\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Program::flash() {
|
int Program::flash() {
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Program::reboot() {
|
int Program::reboot() {
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Program::reset() {
|
int Program::reset() {
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Program::init() {
|
void Program::init() {
|
||||||
if (options.interface.compare("") == 0)
|
if (options.interface.compare("") == 0)
|
||||||
options.interface = host.getIface();
|
options.interface = host.getIface();
|
||||||
|
|
|
||||||
|
|
@ -67,63 +67,46 @@ int Switch::parse(std::string str) {
|
||||||
device.hardware_version = json["hardware_version"].GetString();
|
device.hardware_version = json["hardware_version"].GetString();
|
||||||
if (json.HasMember("firmware_version"))
|
if (json.HasMember("firmware_version"))
|
||||||
device.hardware_version = json["firmware_version"].GetString();
|
device.hardware_version = json["firmware_version"].GetString();
|
||||||
|
if (json.HasMember("ports") && json["ports"].IsArray()) {
|
||||||
|
const rapidjson::Value& a = json["ports"];
|
||||||
|
for (rapidjson::SizeType i = 0; i < a.Size(); i++)
|
||||||
|
if (a[i].IsObject()) {
|
||||||
|
port p;
|
||||||
|
if (a[i].HasMember("id")&&a[i]["id"].IsInt()) {
|
||||||
|
p.id=a[i]["id"].GetInt();
|
||||||
|
std::cout << a[i]["id"].GetInt() << "\n";
|
||||||
|
}
|
||||||
|
ports.push_back(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (json.HasMember("vlans") && json["vlans"].IsArray()) {
|
||||||
|
const rapidjson::Value& a = json["vlans"];
|
||||||
|
for (rapidjson::SizeType i = 0; i < a.Size(); i++)
|
||||||
|
if (a[i].IsObject()) {
|
||||||
|
vlan v;
|
||||||
|
if (a[i].HasMember("name")&&a[i]["name"].IsString()) {
|
||||||
|
v.name=a[i]["name"].GetString();
|
||||||
|
std::cout << a[i]["name"].GetString() << "\n";
|
||||||
|
}
|
||||||
|
vlans.push_back(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
json.AddMember("ports", jsonNode(ports, json), allocator);
|
|
||||||
json.AddMember("vlans", jsonNode(vlans, json), allocator);
|
|
||||||
|
{
|
||||||
|
const rapidjson::Value& a = json["a"];
|
||||||
|
assert(a.IsArray());
|
||||||
|
for (rapidjson::SizeType i = 0; i < a.Size(); i++)
|
||||||
|
printf("a[%d] = %d\n", i, a[i].GetInt());
|
||||||
|
|
||||||
|
int y = a[0].GetInt();
|
||||||
|
(void) y;
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
// Since version 0.2, you can use single lookup to check the existing of member and its value:
|
|
||||||
/*
|
|
||||||
rapidjson::Value::MemberIterator hello = json.FindMember("hello");
|
|
||||||
assert(hello != json.MemberEnd());
|
|
||||||
assert(hello->value.IsString());
|
|
||||||
assert(strcmp("world", hello->value.GetString()) == 0);
|
|
||||||
(void) hello;
|
|
||||||
|
|
||||||
assert(json["t"].IsBool()); // JSON true/false are bool. Can also uses more specific function IsTrue().
|
|
||||||
printf("t = %s\n", json["t"].GetBool() ? "true" : "false");
|
|
||||||
|
|
||||||
assert(json["f"].IsBool());
|
|
||||||
printf("f = %s\n", json["f"].GetBool() ? "true" : "false");
|
|
||||||
|
|
||||||
printf("n = %s\n", json["n"].IsNull() ? "null" : "?");
|
|
||||||
|
|
||||||
assert(json["i"].IsNumber()); // Number is a JSON type, but C++ needs more specific type.
|
|
||||||
assert(json["i"].IsInt()); // In this case, IsUint()/IsInt64()/IsUInt64() also return true.
|
|
||||||
printf("i = %d\n", json["i"].GetInt()); // Alternative (int)document["i"]
|
|
||||||
|
|
||||||
assert(json["pi"].IsNumber());
|
|
||||||
assert(json["pi"].IsDouble());
|
|
||||||
printf("pi = %g\n", json["pi"].GetDouble());
|
|
||||||
|
|
||||||
{
|
|
||||||
const rapidjson::Value& a = json["a"]; // Using a reference for consecutive access is handy and faster.
|
|
||||||
assert(a.IsArray());
|
|
||||||
for (rapidjson::SizeType i = 0; i < a.Size(); i++) // rapidjson uses SizeType instead of size_t.
|
|
||||||
printf("a[%d] = %d\n", i, a[i].GetInt());
|
|
||||||
|
|
||||||
int y = a[0].GetInt();
|
|
||||||
(void) y;
|
|
||||||
|
|
||||||
// Iterating array with iterators
|
|
||||||
printf("a = ");
|
|
||||||
for (rapidjson::Value::ConstValueIterator itr = a.Begin();
|
|
||||||
itr != a.End(); ++itr)
|
|
||||||
printf("%d ", itr->GetInt());
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Iterating object members
|
|
||||||
static const char* kTypeNames[] = { "Null", "False", "True", "Object",
|
|
||||||
"Array", "String", "Number" };
|
|
||||||
for (rapidjson::Value::ConstMemberIterator itr = json.MemberBegin();
|
|
||||||
itr != json.MemberEnd(); ++itr)
|
|
||||||
printf("Type of member %s is %s\n", itr->name.GetString(),
|
|
||||||
kTypeNames[itr->value.GetType()]);
|
|
||||||
*/
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
/*
|
|
||||||
* lookupTable.h
|
|
||||||
*
|
|
||||||
* Created on: 11.10.2015
|
|
||||||
* Author: jdi
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include "lookupTable.h"
|
|
||||||
|
|
||||||
lookupTable::lookupTable(std::initializer_list<set> l) {
|
|
||||||
int i = 0;
|
|
||||||
this->data.resize(l.size());
|
|
||||||
for (set s : l) {
|
|
||||||
this->data[i] = s;
|
|
||||||
this->left[s.type] = &this->data[i];
|
|
||||||
this->right[s.name] = &this->data[i];
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const short& lookupTable::operator[](std::string s) {
|
|
||||||
return this->right[s]->type;
|
|
||||||
}
|
|
||||||
const std::string& lookupTable::operator[](short n) {
|
|
||||||
return this->left[n]->name;
|
|
||||||
}
|
|
||||||
bool lookupTable::exists(std::string s) {
|
|
||||||
return !(right.find(s) == right.end());
|
|
||||||
}
|
|
||||||
bool lookupTable::exists(short n) {
|
|
||||||
return !(left.find(n) == left.end());
|
|
||||||
}
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
/*
|
|
||||||
* lookupTable.h
|
|
||||||
*
|
|
||||||
* Created on: 11.10.2015
|
|
||||||
* Author: jdi
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef LOOKUPTABLE_H_
|
|
||||||
#define LOOKUPTABLE_H_
|
|
||||||
|
|
||||||
#include <map>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
class lookupTable {
|
|
||||||
public:
|
|
||||||
struct set {
|
|
||||||
short type;
|
|
||||||
std::string name;
|
|
||||||
};
|
|
||||||
lookupTable(std::initializer_list<set> l);
|
|
||||||
const short& operator[](std::string s);
|
|
||||||
const std::string& operator[](short n);
|
|
||||||
bool exists(std::string s);
|
|
||||||
bool exists(short n);
|
|
||||||
private:
|
|
||||||
std::vector<set> data;
|
|
||||||
std::map<short, set*> left;
|
|
||||||
std::map<std::string, set*> right;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* LOOKUPTABLE_H_ */
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue