Разобрать вывод конфигурации маршрутизатора - PullRequest
1 голос
/ 26 апреля 2009

Мой маршрутизатор поддерживает сеансы telnet для настройки моего маршрутизатора, я хочу сделать приложение на c #, которое анализирует вывод консоли на что-то полезное.

edit: строки разделяются символом "\ n \ r", и символы \ t не используются, все разделено

Пример:

 bridge configuration for "bridge" :
OBC       : dest : Internal
            Connection State: connected   Retry: 10
            Priority Tagging: Disabled
            Port: OBC            PortNr: 0          PortState: forwarding  Interface: up
            Multicast filter: disabled              Dynamic VLAN    : disabled
            IGMP snooping   : enabled
            VLAN: Default VLAN: default  Ingressfiltering: disabled  Acceptvlanonly: disabled
            VLAN: Priority: disabled  IP Prec: disabled  Priority: 0  Regeneration table: 0 1 2 3 4 5 6 7
            RX bytes: 1978767922 frames: 21288686
            TX bytes: 481256491  frames: 16224065     dropframes: 13671

ethport1  : dest : ethif1
            Connection State: connected   Retry: 10
            Priority Tagging: NA (destination switch interface)
            Port: ethport1       PortNr: 1          PortState: forwarding  Interface: up
            Multicast filter: disabled              Dynamic VLAN    : disabled
            IGMP snooping   : enabled
            VLAN: Default VLAN: default  Ingressfiltering: disabled  Acceptvlanonly: disabled
            VLAN: Priority: disabled  IP Prec: disabled  Priority: 0  Regeneration table: 0 1 2 3 4 5 6 7
            RX bytes: 44045      frames: 0
            TX bytes: 12618      frames: 0            dropframes: 0

Может кто-нибудь дать мне несколько советов? Моей первой мыслью было регулярное выражение, но я не знаю, как это сделать в таком масштабе.

1 Ответ

2 голосов
/ 26 апреля 2009

«Для чего-то полезного» означает для меня, что ваш первый шаг - создать классы, структуры и перечисления, которые представляют ваши данные:

public class RouterEntry
{
    public ConnectionState ConnectionState { get; }
    public int Retry { get; }
    ...
    public long BytesTX { get; }
}

Затем начните думать о том, как проанализировать строки результата. Я бы, вероятно, написал метод Deserialize(StringReader) (или что-то в том же духе), чтобы ваш объект анализировал данные построчно.

Вы также можете использовать string.Split с перегрузкой SplitOptions, чтобы помочь вам игнорировать любые пробелы.

Так, например, если вы используете

Port: OBC            PortNr: 0        PortState: forwarding  Interface: up

в качестве строки ввода и

char[] delims = new char[] { ':', ' ' };

как ваши разделители, затем называете это так

string[] tokens = line.Split(delims, StringSplitOptions.RemoveEmptyEntries);

приведет к tokens, содержащему

[Port, OBC, PortNr, 0, PortState, forwarding, Interface, up]

Для строк, которые имеют несколько «значений» для ключа (например, Regeneration table: 0 1 2 3..., вы просто должны учитывать тот факт, что каждое из этих значений будет отдельной строкой в ​​массиве токенов).

Ключ в том, что если вы разберете свою проблему один раз за раз, она станет более управляемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...