2013-06-06 3 views
-2

Я работаю над встроенным устройством под управлением Linux (с BusyBox). Мне нужно предоставить инструмент командной строки для конфигурирования статического IP-адреса. Есть некоторые ограничения.Как настроить ip-адрес во встроенной Linux?

  1. Использование ifconfig не будет делать эту работу, потому что он будет теряться, когда система перезагружается.
  2. С очень ограниченным ресурсом нет графического интерфейса.
  3. Текстовый редактор vi для изменения файла конфигурации Linux. Но так или иначе это не принято. Поскольку предположение заключается в том, что клиенты не знают, как использовать vi или более глубокое понимание Linux. Мне нужно предоставить инструмент, чтобы они могли просто нажимать что-то вроде «ConfigMyIP 192.168.0.1 255.255.255.0», и работа выполнена.

Любая идея, как это можно сделать? (С использованием shell или C или обоих)

+0

Кажется, что вы знаете, какой конфигурационный файл должен быть изменен и что нужно изменить в этом файле, и вы спрашиваете, как предоставить графический интерфейс для достижения этой модификации. Если это так, возможно, так много ответов, как есть программисты. FWIW, я бы сделал это с помощью скрипта Tcl/Tk; если это еще не на коробке, я бы установил его, так как лично, едва ли прошло час, когда я не хочу писать такой скрипт. – nurdglaw

+0

@nurdglaw Не совсем. Нет графического интерфейса, просто оболочки, из-за ограниченного ресурса встроенного устройства.Я не знаком с Tcl/Tk, но установка нового программного обеспечения также не является вариантом. –

+0

Вы используете веб-сервер на коробке? В какой системе вы ожидаете, что ваши клиенты будут запускать графический интерфейс? Если это не поле, то как эта система свяжется с полем? (Прочтите «встроенное устройство» для коробки :-)) – nurdglaw

ответ

0

Почему бы не написать программу на выбранном вами языке, которая предложит пользователю ввести требуемый IP-адрес? Затем скопируйте существующий файл конфигурации в резервную версию и создайте новый файл конфигурации, читая резервную версию строки за раз.

Если строка указывает IP-адрес, то отбросьте его и напишите новую строку, указав новый IP-адрес, иначе просто напишите существующую строку.

Если важно, чтобы ваши клиенты вводили параметры из командной строки, как показано в вашем вопросе, ознакомьтесь с документацией на выбранном вами языке, чтобы увидеть haw для доступа к аргументам командной строки. Если вы используете C, посмотрите на аргументы argc и argv, которые передаются в main.

2

Я сам пришел к другому решению. Общая идея заключается в создании сценария оболочки, который может конфигурировать IP-адрес в каталоге инициализации системы. Вот код:

#include <stdio> 
#define MAXBUF 100 

int main(int argc, char** argv) 
{ 
    FILE* f; 
    char content[MAXBUF]; 
    f = fopen("/etc/init.d/configip", "w+"); 
    strcat("#!/bin/sh\n", content); 
    strcat("ifconfig ", content); 
    strcat(argv[1], content); 
    strcat(" ", content); 
    strcat(argv[2], content); 
    strcat(" up", content); 
    fwrite(content, 1, strlen(content) + 1, f); 
    fclose(f); 
    return 0; 
} 

Когда эта программа была выполнена с аргументами типа «192.168.0.1 255.255.255.0», он будет генерировать скрипт в etc/init.d:

#!/bin/sh 
ifconfig 192.168.0.1 255.255.255.0 up 

Скрипт будет загружен каждый время загрузки Linux.

+0

Да, но вы должны проверить ввод пользователя, иначе команда может выйти из строя. В качестве примера: неверное значение сетевой маски o gateway out lan. –

+0

@ OttavioCampana Хорошая точка. Я добавлю дополнительную проверку. Но для простоты я не буду обновлять код здесь. –

0

Если я это хорошо понимаю, цель запускается BusyBox.

Так почему бы не добавить custom applet для обеспечения этого «простого интерфейса», позволяющего пользователю постоянно изменять соответствующие файлы конфигурации?

Я думаю, что этот вариант может соответствовать лучше, чем внешний программа с очень ограниченной обстановкой, которую вы описываете.