LINUX.ORG.RU

виртуальные машины с параметрами или эмуляция ICMP-ответов в Linux


0

1

(в конце интересный вопрос про виртуальные машины)

Пишу модуль для оценки состояния хостов по ICMP пингам. Чтобы протестировать, хотелось бы иметь некий софт, который бы отвечал как будто такие хосты есть. Сижу в сети с одним компом, никаких других нет.

Понимаю что эта цель жутко экзотическая, на грани извращения, но мало ли...

Как вариант, можно запустить N виртуальных машин. Но вопрос - есть ли способ запускать виртуальные машины (будь то VirtualBox, QEMU или что угодно другое) с параметрами? Как программы? Чтобы был один образ виртуальной машины в режиме read-only всех носителей и при этом можно было например каждой задать IP-адрес как параметр, а то и вовсе - файл с настройками или данными, чтобы у каждой виртуальной машины, в зависимости от параметров, были свои данные. А виртуальная машина и софт на ней допустим один и тот же, один образ.

ЗЫ У меня есть N одинаковых приборов и почти одинаковой прошивкой на базе Linux, разница лишь в небольшом файлике параметров. Хотелось бы протестировать без беготни с девайсами...

★★★★★

Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

этот некий софт ~ небольшая програмка (например, на питоне, несколько десятков строк кода), которая будет слушать RAW сокет, ловить в нём ICMP и слать ответы.

Или даже более хардкорный путь, перехват sendmsg() через LD_PRELOAD.

mashina ★★★★★
()
Последнее исправление: mashina (всего исправлений: 1)

есть ли способ запускать виртуальные машины (будь то VirtualBox, QEMU или что угодно другое) с параметрами? Как программы? Чтобы был один образ виртуальной машины в режиме read-only всех носителей и при этом можно было например каждой задать IP-адрес как параметр, а то и вовсе - файл с настройками или данными

DHCP же

tailgunner ★★★★★
()

Капитан круче всех

ping 127.0.0.1
ping 127.0.0.2
ping 127.0.0.3

А эмулировать нестабильный канал виртуалки все равно не умеют.

thesis ★★★★★
()
Ответ на: комментарий от tailgunner

DHCP же

Для IP-адресов - да. А чтобы файлы для каждой виртуалки были разные? Хотя... я вот думаю QEMU же параметры принимает, можно образы разные подсовывать - а можно ли ФАЙЛЫ? Под видом носителей?

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

я вот думаю QEMU же параметры принимает, можно образы разные подсовывать - а можно ли ФАЙЛЫ? Под видом носителей?

Чем не устраивает /net/server/setting-$YOUR_IP или /net/server/setting-$YOUR_HOSTNAME ?

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

что ты подразумеваешь под «файлами под видом носителей»? чтобы образ был один и тот же, но один файл в образе изменялся в зависимости от параметров запуска? можно просто два параметра задавать - один - основной образ, а второй - зависящий от запуска, и внутри виртуалки монтировать второй в нужное место, типов носителей тот же qemu понимает много, от raw и qcow2 до 9p.

maloi ★★★★★
()
Ответ на: комментарий от maloi

Да, типа того. Это в самый раз, вот наверное raw - то что надо. Я так понимаю это тупо N байт в файле, а я в виртуальной машине вижу такой же тупой блок N байт без ФС и прочего - так?

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Спасибо! В общем, тема решена:

sudo ifconfig lo:1 192.168.17.20 netmask 255.255.255.255
и так только будто 192.168.17.20 есть. Убрать alias я так понял это тупо sudo ifconfig lo:1 down...

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Еще глупый вопрос. Просто имитировать наличие устройств по заданным IP - удалось.

Но можно ли, пока не используя виртуальные машины, имитировать такой сценарий: 1) запускается N серверов с портами 2500N, доступные через алиас lo:N с адресом 192.168.0.N 2) программа клиент подключается к адресу 192.168.0.N по порту 25000, а все запросы к 25000 порту переводятся на 2500N, т.е. чтобы имитировать реальную обстановку, где у всех серверов будет как бы одинаковый порт но по разным IP

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

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

У большинства программ есть параметр: на каком интерфейсе слушать. Задаётся IP адресом. Этот вариант не годится?

Обычно там ставят 0.0.0.0, что означает слушать на всех интерфейсах. Тебе надо указывать конкретный адрес.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от i-rinat

У большинства программ есть параметр: на каком интерфейсе слушать. Задаётся IP адресом. Этот вариант не годится?

У меня самописная программа-сервер - её я хочу тестировать с реальными IP (за не имением оборудования, которое еще не скоро будет).

Я кажется понял суть предложения! В смысле, я укажу своей программе слушать алиас lo:N на порту 25000 и таким образом подключаясь к алиасам клиентом - пакеты на один порт 25000 будут попадать только на определенный сервер, как мне и требуется.

Правильно понимаю?

Пока не знаю всех возможностей алиасов, надеюсь получится встать на прослушивание одного порта по сути одного интерфейса...

Как попробую - отпишусь.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

я укажу своей программе слушать алиас lo:N на порту 25000

функции bind() передаётся struct sockaddr *my_addr. Вот туда и назначаешь разные адреса, а не 0.0.0.0, как обычно.

Правильно понимаю?

Да, в целом всё верно.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Нашел время и проверил - получилось! Проверил с помощью netcat, действительно если слушать на своем алиасе, то и подключаясь по одному и тому же порту к разным алиасам - только нужный сервер отвечает.

I-Love-Microsoft ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.