The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |  
Форум Программирование под UNIX
Одна копия telegram bot на python, !*! hebeseyir, (Python) 25-Сен-19, 14:52  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Подскажите средство для того чтобы всегда была запущена только одна копия python скрипта на разных серверах, которая запускает бота
Иначе, если запущено 2 бота, то сообщения в чате дублируются
Странное поведение хеша в perl ???, !*! tian, (Perl) 25-Сен-19, 09:16  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Приветствую!
Подскажите знающие - второй день мучаюсь, ничего не пойму.
Есть perl версии:
This is perl 5, version 18, subversion 1 (v5.18.1) built for x86_64-linux-thread-multi
Также есть такой простой код:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my %hash_cl = ( fields=>{ id=>853, id_link=>890 } );
my %hash_cl_slave = %hash_cl;

print Dumper(\%hash_cl);
print "\n";
print Dumper(\%hash_cl_slave);
print "\n";

$hash_cl_slave{"fields"}{"id"} = $hash_cl_slave{"fields"}{"id_link"};

print Dumper(\%hash_cl);
print "\n";
print Dumper(\%hash_cl_slave);
print "\n";

На выходе имею следующее:
$VAR1 = {
          'fields' => {
                        'id_link' => 890,
                        'id' => 853
                      }
        };

$VAR1 = {
          'fields' => {
                        'id_link' => 890,
                        'id' => 853
                      }
        };

$VAR1 = {
          'fields' => {
                        'id_link' => 890,
                        'id' => 890
                      }
        };

$VAR1 = {
          'fields' => {
                        'id_link' => 890,
                        'id' => 890
                      }
        };

Вопрос таков: почему также меняется значение хеша $hash_cl{"fields"}{"id"} ???
Почему ???
Такое впечатление, что я не скопировал хеш, а ссылку создал, но ведь это не так.


Нужна помощь по awk, !*! NotFreeman, (C/C++) 19-Сен-19, 13:43  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Есть файл вот с таким содержимым:
ОРГАНИЗАЦИЯ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
ОРГАНИЗАЦИЯ
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
ОРГАНИЗАЦИЯ
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
ОРГАНИЗАЦИЯ
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
ОРГАНИЗАЦИЯ
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
ОРГАНИЗАЦИЯ
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|
НАЧИСЛЕНИЕ|

Таких строк может быть любое количество, как в меньшую, так и в большую сторону. После слов "ОРГАНИЗАЦИЯ" строка продолжается наименованием и реквизитами организации.
После слов "НАЧИСЛЕНИЕ" строка продалжается суммой начисления и пр. данными.
Разделитель |
Задача такая - с помощью awk найти слово "ОРГАНИЗАЦИЯ", скопировать содержимое этой строки и привязанные к ней строки "НАЧИСЛЕНИЕ".
Т.е. первую строку "ОРГАНИЗАЦИЯ" и две строки ниже со словом "НАЧИСЛЕНИЕ". Вывести эти 3 строки в отдельный файл.
Найти след. строки по такому же принципу и опять в отдельный файл.
По этому примеру должно быть 6 файлов и каждый со своей организацией и начислениями.
Пробовал так:
awk " /ОРГАНИЗАЦИЯ/{flag=1}flag; /ОРГАНИЗАЦИЯ/{flag=0} " E:\Мой файл.txt >> E:\Exit.txt  - выводятся строки только с этими словами, но не строки между ними.
awk " length($1) = 11 "  FS="|" E:\Мой файл.txt >> E:\Exit.txt - записывается все строки со словом ОРГАНИЗАЦИЯ
awk " length($1) >= 10 "  FS="|" E:\Мой файл.txt >> E:\Exit.txt Получаю все строки со словами ОРГАНИЗАЦИЯ и НАЧИСЛЕНИЕ
Извиняюсь за дурацкий вопрос. Знаний по awk нет, а задача есть.

Вопросы по созданию rc скрипта, !*! DHCPep, (Shell скрипты) 15-Сен-19, 21:57  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Здравствуйте Уважаемые!

Пишу тут стартовый скрипт, чтобы при старте системы запускал мой воркер. Хочу сделать по уму, т.е. через стартовые скрипты, а не жостко прописать в rc.local

Итак, всё это в FreeBSD.
rc.conf:
====================================================
MyWorker_enable="YES"
MyWorker_dir="/var/www/vhosts/my.app"


Стартовый скрипт MyWorker:
====================================================
#!/bin/sh

. /etc/rc.subr

name="MyWorker"
rcvar=`set_rcvar`

: ${MyWorker_dir:=}

command_interpreter="/bin/sh"
command="worker/shell/start.worker.sh"
pidfile="/var/run/${name}.pid"

start_precmd="${name}_prestart"

# Проверяем наличие стартовых скриптов и переходим в указанную папку
MyWorker_prestart(){
    # Должен быть указан базовый каталог приложения
    if [ -z ${MyWorker_dir} ] ; then
        warn "MyWorker_dir is not set."

        return 1
    fi

    # Он должен существовать
    if [ ! -d ${MyWorker_dir} ] ; then
        warn "MyWorker dir [ ${MyWorker_dir} ] not exists."

        return 1
    fi

    # Должен существовать стартовый скрипт воркера
    if [ ! -f ${MyWorker_dir}/worker/shell/start.worker.sh ] ; then
        warn "Main worker script [ ${MyWorker_dir}/worker/shell/start.worker.sh ] not exist."
        warn "incorrect MyWorker_dir settings?"

        return 1
    fi

    # Go to basedir
    cd ${MyWorker_dir}

    return 0
}

load_rc_config ${name}
run_rc_command "$1"

=============================================
В чём проблема? Проблема в том, что путь в котором запускаемый этим скриптом файл, лежит в каталоге задаваемом в rc.conf MyWorker_dir
И значит в стартовом скрипте я не могу статически прописать значение command=..., т.к. полный путь зависит от настройки в rc.conf

Я понимаю, что это можно решить заменив стартовую процедуру start_cmd="${name}_start"
и в ней описать уже имея на руках значение этой переменной из rc.conf, но тогда я не понимаю - как сделать чтобы pid файл корректно создался? Как передать системе инициализаци после команды start, какой PID надо сохранить в pid файле указанном в pidfile="/var/run/${name}.pid"?

Помогите пожалуйста разобраться.

Подскажите проекты или пример кода графической картой в Linux, !*! Аноним, (Разное) 02-Сен-19, 00:28  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Итак, хотелось бы использовать напрямую графическую подсистему Linux (т.е. на сколько я понял сегодня это DRM). Можно использовать Wayland, но порог вхождения высокий и в целом не нужен он для нашей задачи. Тае же ставить X11 смысла нет - место занимает да и нафиг не сдался. Смотрели на SDL2 но хотелось бы понять есть ли путь работы с DRM. В связи с чем вопрос работал ли кто-то или исследовал работу DRM в Linux есть ли где-то толковое простое описание статья или даже пример кода. Заранее спасибо
Тестовая аппа.., !*! Аноним, (C/C++) 21-Авг-19, 14:26  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Доброго,

ваю сабж, целевые Centos 6, U 16.04 и еще пучок другой.. x86, x64 и т.п.
Исходники v4l-utils U 18.04, часть касаемая v4lconvert выдернута в аппу (Qt, qmake).

На всех целевых 32 разрядных все фурычит.

Из целевых x64 под рукой только U 18.04:
скотина падает, все в одном потоке управления, источник нашел усечение указателя, см. далее лог и код.

ЧЗНХ ? Куда копать ? и т.д.
Вообщем, хотелось бы найти виновных или места проживания таковых вна этом празднике жизни

лог:

v4lconvert_create: v4lprocessing_data: (nil)
v4lprocessing_create: v4lprocessing_data: 0x555555a18110
v4lconvert_create: v4lprocessing_data: 0x55a18110
v4lconvert_create: v4lconvert_data: 0x555555aa9c50
v4lconvert_create: v4lcontrol_data: 0x555555a2a810
v4lconvert_create: v4lprocessing_data: 0x55a18110

код:

... v4lprocessing_create(...)
{ ...
    data->fd = fd;
    data->control = control;
fprintf(stderr, "v4lprocessing_create: v4lprocessing_data: %p\n",(void *)data);
    return data;
}


... v4lconvert_create(...)
{ ...
fprintf(stderr, "v4lconvert_create: v4lprocessing_data: %p\n",(void *)data->processing);
    data->processing = v4lprocessing_create(fd, data->control);
fprintf(stderr, "v4lconvert_create: v4lprocessing_data: %p\n",(void *)data->processing);
    if (!data->processing) {
        v4lcontrol_destroy(data->control);
        free(data);
        return NULL;
    }
  fprintf(stderr, "v4lconvert_create: v4lconvert_data: %p\n",(void *)data);
  fprintf(stderr, "v4lconvert_create: v4lcontrol_data: %p\n",(void *)data->control);
  fprintf(stderr, "v4lconvert_create: v4lprocessing_data: %p\n",(void *)data->processing);

    return data;
}

lua, __gc, !*! test, (C/C++) 25-Июл-19, 01:09  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
создаю метатаблицу, переопределяю метод __gc
он вызывается норм, далее пытаюсь оттуда достучаться до полей метатаблицы но в Lua_State только одно значение boolean

int test_destroy(lua_State* L)
{
  int top = lua_gettop(L); // 1
  int type = lua_type(L, top); // 7
  return 0;
}

куда чего стучаться?!

shell форматированный вывод, !*! Alex, (Shell скрипты) 18-Июл-19, 10:00  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Необходимо как то красиво сформировать столбики.
Вот пример:

ролрллрлор................зшзшзшзщшз..............гарарарар
выв.......................рапави..................рараррра
ааарарарарарарарарарарар..рпрррррр................рпапапапапа
опп.......................парараррарарарарарарара.рпрпрппп


В примере точки для красоты. В реальности нужно без точек.
Смотрю в торону printf пока не получается.
Не могу найти как печатать сначало с первой позиции, а потом не переводя строки начать напечатать с 27 позиции.
Ширину табуляции пока тоже не придумал как увеличить.

Подскажи плз, как можно решить проблемку.

Нужна простая помощь в тестировании движка Key-Value (libmdbx), !*! erthink, (Разное) 12-Июл-19, 22:04  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Прошу помочь в тестировании key-value движка MDBX. Хватит даже полудохлой (в разумных пределах) виртуалки с установленным компилятором C++, make и компрессором lz4 для логов.

Достаточно клонировать репозиторий и запустить «на выходные» скрипт, т.е. выполнить три команды:

git clone https://github.com/leo-yuriev/libmdbx
cd libmdbx
./test/long_stochastic.sh

ВАЖНО: будет почищен каталог /dev/shm !!! Поэтому, если у вас работает какой-нибудь postgresql, то его следует остановить. Как вариант - закомментировать в скрипте соответствующую строку.

Немного пояснений:
- тест стохастический «от легкого к тяжелому».
- тест работает в памяти, потому нагрузит memory bandwidth и CPU, но не диск.
- тест сам подстроится под размер ОЗУ.
- тест можно считать «бесконечным» и прервать/перезапустить когда он станет мешать.
- чем больше (суммарно) отработает тест, тем тщательнее будет проверка.

В случае сбоя нужно быть готовым предоставить инфу:
- «последний экран» вывода в терминал и lz4-файл из /dev/shm.
- минимальную информацию о системе (версию компилятора и т.п.)
- технически это лучше делать через заведение issue на github, а остальные варианты обсуждать здесь.

На всякий:
- комбинаторная сложность возможных состояний БД и последовательности операций такова, что примерно невозможно проверить все варианты.
- в такой ситуации стохастический тест (со случайным поведением) является разумным компромиссом.
- соответственно, «коллективное стохастическое тестирование» будет плюсом к собственным тестам (которые периодически прогоняются по нескольку сотен часов).

Всем добра.

Сообразить алгоритм подбора по длительности?, !*! Gremlin_Rage, (C/C++) 14-Июн-19, 20:23  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Нужен алгоритм подбора музыки по длительности для такого расписания
9:00-10:00 - музыка
10:00-(зависит от длительности программы)-программа(интервью или что то в этом духе обычно минут 20)
(зависит от длительности программы)-11:30-музыка
11:30-(зависит от длительности программы) - интервью(или образовательная программа
(зависит от длительности программы)-12:00-музыка(иногда может программа быть до 12 часов)
файл с музыкой путь к файлу и длительность в секундах playlist2.m3u8 https://dropmefiles.com/eYACc
файл с интервью образовательными программами playlist3.m3u8 https://dropmefiles.com/9rVLu
сама программа
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstdlib>
//#include <sstream>
//#include <locale>
#include <time.h>
#include "mp3.h"
#include "mp3frame.h"
//#define _CRT_SECURE_NO_WARNINGS
long int rez = 0;
struct Type
{
  std::string filename;
  float length;
};

int main(int argc, char* argv[])
{

  Type elem;
  
  setlocale(LC_ALL, "Russian");

  std::ifstream fin("playlist2.m3u8");
  if (!fin.is_open())
  {
    std::cout << "File not found!" << std::endl;
  }
  std::string str="";
  while (std::getline(fin,elem.filename))
  {
    std::getline(fin, str);
    elem.length = std::stof(str);
    if(elem.length != 0.0)
      vector2->push_back(elem);
  }
  fin.close();
  
  int sum = 0;
  for (int i = 0;i < vector2->size();i++)
    if ((*vector2)[i].length == 0.0)
      sum++;
  
  std::cout <<"size="<< vector2->size() << std::endl<<"0: " <<sum<< std::endl;
  
  std::cout << (*vector2)[0].filename << std::endl << (*vector2)[0].length << std::endl;
  std::cout << (*vector2)[vector2->size()-1].filename << std::endl << (*vector2)[vector2->size() - 1].length << std::endl;
  

  //setlocale(LC_ALL, "ru_RU.UTF-8");
  std::vector<Type> *vector3 = new std::vector<Type>();
  std::ifstream fin2("playlist3.m3u8");
  if (!fin2.is_open())
  {
    std::cout << "File not found!" << std::endl;
  }
  while (std::getline(fin2, elem.filename))
  {
    std::getline(fin2, str);
    elem.length = std::stof(str);
    if (elem.length != 0.0)
      vector3->push_back(elem);
  }
  fin2.close();
  
  sum = 0;
  for (int i = 0;i < vector3->size();i++)
    if ((*vector3)[i].length == 0.0)
      sum++;
  
  std::cout << "size=" << vector3->size() << std::endl << "0: " << sum << std::endl;
  std::cout << (*vector3)[0].filename << std::endl << (*vector3)[0].length << std::endl;

  std::cin.get();
  return 0;
}
и файлы из кривой библиотеки mp3 https://github.com/TheOnlyCaky/libmp3 выходной файл такого вида должен быть playlist.m3u8 https://dropmefiles.com/6sU0G
P.S. В принципе я думаю можно упростить алгоритм до подбора 1го пункта расписания т.е. подобрать песен на один час,а остальные пункты будут аналогично делаться

openssl проверить ГОСТ подпись., !*! kot_k_k, (Разное) 02-Май-19, 14:21  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Добрый день (извините если не туда).
Ест XML и его подпись в бинарном формате (ГОСТовская).

перерыл кучу всего никак не могу проверить валидность подписи и этого xml.

вот так получил подпись в PEM:
openssl pkcs7 -inform DER -outform PEM -in c1.bin -out c1.pem

файл вот такого формата
-----BEGIN PKCS7-----
MIIaWAYJKoZIhvcNAQcCoIIaSTCCGkUCAQExDDAKBgYqhQMCAgkFADALBgkqhkiG
........
Et8zFAMIHR1AGZWK9+dSgUdQZhtbw9/6zkDqGg==
-----END PKCS7-----


из нее вытащил сертификат:
openssl pkcs7 -print_certs -in c1.pem -out c1.cer

формат файла вот такого вида:

subject=emailAddress = ...........
issuer=emailAddress = ...........
-----BEGIN CERTIFICATE-----
MIIHTDCCBvugAwIBAgIKMvG12QAAAAABhDAIBgYqhQMCAgMwggFKMR4wHAYJKoZI
.................
zVOySmH5/HRjkWIh5NIN6JrcNqf0I0bhOKpilRDnWpycwbO0ElQ6baLtZyzphVzz
-----END CERTIFICATE-----

subject=street = .......
issuer=emailAddress = .......
-----BEGIN CERTIFICATE-----
MIIOODCCDeegAwIBAgIRAOkZuenyQBag6BFvjoo4D0UwCAYGKoUDAgIDMIIBhzEi
..........
BroqlhydyBtkneXpe17WYrwrgqIOYovMLpxzZJicDkwz3a5dPqdZrrCXjeY=
-----END CERTIFICATE-----

из сертификата получил публичный ключ:
openssl x509 -pubkey -noout -in c1.cer > c1_pub.pem

вроде все правильно ключ имеет вид
-----BEGIN PUBLIC KEY-----
MGMwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEDQwAEQMbwzX/8iDw7NXqB
..............
0QT32M0=
-----END PUBLIC KEY-----

осталось проверить вот этой командой - в которой публичный ключ, подпись и файл
openssl dgst -engine gost -verify c1_pub.pem -signature c1.bin c1.xml

но результат
engine "gost" set.
Verification Failure
1


пытался другими командами проверить
например так
openssl smime -verify -in c1.bin -noverify -inform der -content c1.xml
но просто выводит на экран xml

без -engine gost
openssl dgst -verify c1_pub.pem -signature c1.bin c1.xml

просто пишет
Verification Failure
1

ощущение что я или что-то не так делаю или не доделываю какой-то этап.


непонятки с stdin\stdout, !*! noname_123йцуфыв, (Python) 13-Апр-19, 20:33  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Здравствуйте.

Проблемка в получении вывода родительского для скрипта процесса.

Есть процесс(lighttpd) который запускает скрипт командой "sh -c script" и передает ему свой вывод.
Мне надо получать этот вывод и в зависимости от длинны строки или записывать его или нет.
Если скрипт написан на bash то все работает, и скрипт получает вывод от lighttpd.
Вот простой работающий пример:

#!/bin/sh

char="1"
end="2"

while [ $char != $end ];
do
read ok
echo $ok >>/var/log/lighttpd/log
done

А вот с помощью питона я получить вывод не могу, причем если запускать скрипт вручную и вводить что-либо, то скрипт работает, если передавать ему значения через "echo | ./script.py" то он тоже работает, а вот от lighttpd уже нет.
Простой неработающий пример:

#!/usr/bin/python3

import sys
import time


logfile = open('/var/log/lighttpd/log', mode='at', encoding='UTF-8')

while True:

        line = input()
#       line = sys.stdin()
#       line = sys.stdin.read()
#       line = sys.stdin.readline()
#       line = sys.stdin.readlines()
        logfile.write(line)                    #пишем в файл

logfile.close()

почему так?

TCP соединение из пространства ядра, !*! Pavel515, (Сеть, сокеты) 08-Апр-19, 09:43  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Здравствуйте

Существует ли возможность создать TCP соединение из пространства ядра.

Например.
Модуль ядра, корый обеспечивает некоторую взаимосвязь, т.е. описаны функции передачи пакетов в обе стороны, но существует необходимость при работе этих функций получить некоторые данные из сети TCP.
При активизации модуля установить TCP соединение с неким сервером в сети, а при деактивизации - это соединение корректно завершить.

С уважением, Павел.

Получить системный cacerts keystore и склеить с requests. Как?, !*! And, (Python) 30-Мрт-19, 14:59  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Python Requests не видит самоподписных доверенных сертов в системном keystore, использует свой кастомный из каталога установки либы.

1а - Как правильно получать содержимое системного trusted keystore, чтобы указывать кистор при вызове requests(cert=/ла/ла/системный-кистор.pem)??? Чтобы переключить либу на системный кистор.

1б - Как это делать платформенно независимо?

2 - Или: Как правильно работать с этим их собственным кистором для реквестов? Кроме как ещё и свой собственный дополнительно поддерживать.


Есть "домашняя лаба" с сервисами на серых самоподписных сертификатах. Python Requests имеет собственный и отдельный от системного файл с cacerts (файл лежит в разных местах в разных инсталляциях и дистрах - добавлять туда не так-то просто, "нужны приседания и наклоны"). В системный кистор библиотека не смотрит.

Есть опция, через которую можно указать прямо файл с доверенными:
http://docs.python-requests.org/en/latest/api/#requests.Sess...

Но - этот файл надо или уметь находить или поддерживать собственный. Как с этим правильно работать?

Возможен предварительный запуск программы?, !*! Hikolaich, (Shell скрипты) 28-Мрт-19, 11:58  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Доброго!
Допустим в скрипте работает цикл с проверкой, к примеру, строки из ps -ef и некоторой задержкой по sleep. В цикле используются grep, awk и др. Поясните, bash один раз грузит с диска проги используемые внутри цикла или при каждом повторе цикла? Если второе, то можно ли предварительно загрузить их в память, дабы не дёргать каждый раз винт и тем самым увеличить быстродействие? RAM диск не рассматриваем.
Спасибо.
Модуль lapbether, !*! Pavel515, (Сеть, сокеты) 06-Мрт-19, 18:11  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Здравствуйте


Есть такая штука

/*
*    "LAPB via ethernet" driver release 001
*
*    This code REQUIRES 2.1.15 or higher/ NET3.038
*
*    This module:
*        This module 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 is a "pseudo" network driver to allow LAPB over Ethernet.
*
*    This driver can use any ethernet destination address, and can be
*    limited to accept frames from one dedicated ethernet card only.


Скажите, пожалуйста, как её использовать?
Делаю
insmod lapb
insmod lapbether
insmod x25
ifconfig lapb0 up
x25route add 33 lapb0

x25client 44 33 (<- программа создает x25 сокет и пытается установить соединение на X25 адрес 33. Маршрутизатор направляет пакет на устройство lapb0. Tcpdump показывает пакет 01 - запрос соединения)

с какими параметрами создавать socket
У меня получилость ТОЛЬКО принять этот байт программой (это просто sniffer. Ну уж если Tcpdump ловит...) (далее)
при попытке отправить - ошибка (понятно, что sniffer работает только по приему...)

# ./lapb3
len = 1
(01)
write error: 22(Invalid argument)

[ccode]
int main(int argc,char** argv)
{
    int fd,rc,nr,i;
    unsigned char packet[40];

    if((fd = socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL))) == -1){
    printf("Socket error (%d)(%s)\n",errno,strerror(errno));
    return -1;
    }

    struct sockaddr_ll sll;
    struct ifreq ifr;

    memset( &sll, 0, sizeof( sll));
    memset( &ifr, 0, sizeof( ifr));

    strcpy( ifr.ifr_name, "lapb0");

    if(( ioctl( fd, SIOCGIFINDEX, &ifr))==-1)
    {
    printf( "error\n");
        return(-1);
    }
    sll.sll_family = AF_PACKET;
    sll.sll_ifindex = ifr.ifr_ifindex;
    sll.sll_protocol = htons(ETH_P_ALL);
      
    rc =  bind( fd, (struct sockaddr*)&sll, sizeof( sll));


    if(rc == -1){
    printf("Bind socket error (%d)(%s)\n",errno,strerror(errno));
    return -1;
    }

        
    nr = read(fd,packet,40);
    if(nr < 0){
        printf("Read socket error (%d)(%s)\n",errno,strerror(errno));
    return -1;
    }
    printf("len = %d\n",nr);
    for(i=0;i<nr;i++)printf("(X)",packet[i]);
    printf("\n");

    nr = write(fd,packet,1);
    if(nr != 1){
    printf("write error: %d(%s)\n",errno,strerror(errno));
    }

    close(fd);

    return 0;
}

[/ccode]

пробовал добавлять ip адрес и работать через AF_INET - вообще ничего не принимает
таким образом какой-то караул
Вопросы

socket(????? family, ???????? typ, ??????? protocol <- ну тут исходя из исходников lapcether.c вроде как ETH_P_DEC (?)
с bind-ом понятнее (пристыковываем к устройству)

Если кто встречался - помогите, пожалуйста.

С уважением, Павел

Объединить 2 команды в одну, !*! VaynaDDOG, (Shell скрипты) 02-Мрт-19, 00:55  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Всем привет!
Подскажите пожалуйста как в bash объединить команды.

Пример:
мне нужно скопировать скрипт на сервер и потом выполнить его (авторизация по ключу, ключ с парольной фразой)
приходится 2 раза вводить парольную фразу - неудобно

; и && не подойдут

Поменять метрики нескольких default-маршрутов, !*! jr, (Shell скрипты) 26-Фев-19, 13:59  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Нужно при помощи shell (sh, не bash!) поменять метрики default-маршрутов системы. Количество default-маршрутов может быть произвольным (от нуля до N). В sh, насколько я знаю, нет массивов и я не пойму как без них решить эту задачу...

Пример с четыремя default-маршрутами.

До изменения:

$ ip -4 route | grep default
default via 10.1.1.1 dev eth1 proto static metric 10
default via 10.2.2.2 dev eth2 proto static metric 20
default via 10.3.3.3 dev eth3 proto static metric 30
default via 10.4.4.4 dev eth4 proto static metric 40

Что должно быть после изменения:

$ ip -4 route | grep default
default via 10.1.1.1 dev eth1 proto static metric 40
default via 10.2.2.2 dev eth2 proto static metric 10
default via 10.3.3.3 dev eth3 proto static metric 20
default via 10.4.4.4 dev eth4 proto static metric 30

Иными словами должно произойти изменение метрик путем смещения:

10 -> 40
20 -> 10
30 -> 20
40 -> 30

Команда на изменение маршрута -- это его удаление и установка нового:

ip route delete default via 10.1.1.1 dev eth1 metric 10
ip route add default via 10.1.1.1 dev eth1 metric 40

Парсинг смешанного порядка аргументов функций, !*! universite, (Shell скрипты) 02-Фев-19, 23:39  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Имеется Дебиановский баш и функция вида:

site_create <domain name> [ipv4=<ipv4 address>] [ipv6=<ipv6 address>] [<template>]

Порядок аргументов [ipv4=<ipv4 address>] [ipv6=<ipv6 address>] [<template>] может быть разный.

Пока сделал черновик:


site_create() {
    local CONFIG_TEMPLATE="default"

    if [[ -z "$1" ]]
    then
         echo -e "${COLOR_RED}Failure.${FORMAT_END} Please specify a site name."
         exit 1
    fi

    # todo $3 and $4
    if [[ ! -z "$2" ]] && [[ -z "$3" ]] && [[ -z "$4" ]]
    then
         local CONFIG_TEMPLATE="$2"
    else
        if test; then
              echo error;
        fi

    fi

    for arg in $2 $3 $4 ;
    do
        local localARGv4=$(echo $arg | awk -F= '/^ipv4=/{print $2;}')
        local localARGv6=$(echo $arg | awk -F= '/^ipv6=/{print $2;}')
        if [[ ! -z "$localARGv4" ]]
        then
            Ipv4=$localARGv4
        fi
        if [[ ! -z "$localARGv6" ]]
        then
            Ipv6=$localARGv6
        fi
    done
    ...

}

Если строгий порядок, то проще.
А со смешанным порядком - хз как определять...

Guile(Scheme), !*! NuINu, (Технологии программирования) 23-Янв-19, 12:12  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Есть ли люди интересующиеся программированием на языке Scheme в guile?
Чтение и редактирование XML файла, !*! universite, (Shell скрипты) 12-Янв-19, 13:09  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Имеется конфиг файл xml-config.xml в формате XML:

<?xml version="1.0" encoding="UTF-8"?>
<zonelist>
        <domain name="domain01.com" admin="dns@domainadmin.com" ttl="1D" refresh="8H" retry="2H" expire="1W" negttl="60M">
                <record type="NS" value="ns1.domain01.com." />
                <record type="NS" value="ns2.domain01.com." />
                <record type="A" value="123.255.255.123" ttl="600" />
                <record type="A" domain="subdomain01" ttl="4H" value="123.255.255.255" />
                <record type="CNAME" domain="www" value="domain01.com." />
                <record type="MX" priority="10" value="mail1.server.com." />
                <record type="MX" priority="20" value="mail2.server.com." />
                <record type="MX" priority="30" value="mail3.server.com." />
                <record type="SPF" value="123.255.255.123,_spf.google.com" />
                <record type="TXT" value="This is a text record" />
        </domain>
        <domain name="domain02.net" admin="dns@domainadmin.com" ttl="1D" refresh="8H" retry="2H" expire="1W" negttl="60M">
                <record type="NS" value="ns1.domain02.net." />
                <record type="NS" value="ns2.domain02.net." />
                <record type="A" value="123.255.255.125" ttl="600" />
                <record type="A" domain="subdomain05" ttl="4H" value="123.255.255.255" />
                <record type="CNAME" domain="www" value="domain02.net." />
                <record type="MX" priority="10" value="mail1.server.com." />
                <record type="MX" priority="20" value="mail2.server.com." />
                <record type="MX" priority="30" value="mail3.server.com." />
                <record type="SPF" value="123.255.255.125,_spf.google.com" />
                <record type="TXT" value="This is a text record" />
        </domain>
</zonelist>

Нужно:
1) считать type="A" для домена domain02.net
2) ножно изменить IP для поддомена subdomain01.domain01.com


По пункту 1) остановился на:


echo 'cat zonelist/domain/record' | \
xmllint --shell  xml-config.xml | grep 'type="A"'

По пункту 2) кроме как sed не приходить в голову.

P.S. где бы еще про xmllint почитать примеры?
а то регэкспы вида:


echo 'cat zonelist/@*[name()="domain01.com" or name()="File"]' | \
    xmllint --shell  xml-config.xml
мне не понятны



UDP C размер принятого пакета, !*! youran, (C/C++) 31-Дек-18, 15:36  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Есть некий код

#include<stdio.h>    //printf
#include<string.h> //memset
#include<stdlib.h> //exit(0);
#include<arpa/inet.h>
#include<sys/socket.h>

#define SERVER "127.0.0.1"
#define BUFLEN 512    //Max length of buffer
#define PORT 8888    //The port on which to send data

void die(char *s)
{
    perror(s);
    exit(1);
}

int main(void)
{
    struct sockaddr_in si_other;
    int s, i, slen=sizeof(si_other);
    char buf[BUFLEN];
    char message[BUFLEN];

    if ( (s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
    {
        die("socket");
    }

    memset((char *) &si_other, 0, sizeof(si_other));
    si_other.sin_family = AF_INET;
    si_other.sin_port = htons(PORT);
    
    if (inet_aton(SERVER , &si_other.sin_addr) == 0)
    {
        fprintf(stderr, "inet_aton() failed\n");
        exit(1);
    }

    while(1)
    {
        printf("Enter message : ");
        gets(message);
        
        //send the message
        if (sendto(s, message, strlen(message) , 0 , (struct sockaddr *) &si_other, slen)==-1)
        {
            die("sendto()");
        }
        
        //receive a reply and print it
        //clear the buffer by filling null, it might have previously received data
        memset(buf,'\0', BUFLEN);
        //try to receive some data, this is a blocking call
        if (recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen) == -1)
        {
            die("recvfrom()");
        }
        
        puts(buf);
    }

    close(s);
    return 0;
}

Как определить размер принятого пакета функцией recvfrom() ?

awk не выполняется в perl скрипте, !*! rammon, (Perl) 15-Дек-18, 13:41  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Доброго времени суток!
Подскажите пож-ста почему awk не хочет выполнять свои функции в таком скрипте

#! /usr/bin/perl
my $var=` uptime | awk '{print $11}' `;
print $var;

Выводит только результат команды "uptime"

Ошибки при запуске скрипта, !*! RoenEr, (Shell скрипты) 13-Дек-18, 00:19  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Прошу помощи. Нарыл в интернете скрипт, люди пишут что работает но вот у меня почему то не запускается. Подскажите  чем проблема?
Вот такое выдает:
': not a valid identifier: `arr
': not a valid identifierrows
': not a valid identifiercols
laba2.sh: line 49: syntax error: unexpected end of file

Проверял на шеллчекнет, там все зелененькое, хз в чем дело

#!/bin/bash
declare -a arr
# Ввод размерности матрицы
echo -n "Строк:"
read rows
echo -n "Колонок:"
read cols
# Ввод элементов матрицы
row=0
while [[ $row -lt $rows ]] ; do
  col=0
  while [[ $col -lt $cols ]] ; do
    echo -n "[$row][$col]:"
    read val
    index=$((row*cols+col))
    arr[$index]=$val
    let "col+=1"
  done
  let "row+=1"
done
  
# Вывод матрицы для проверки  
echo "Массив:"
row=0
while [[ $row -lt $rows ]] ; do
  col=0
  while [[ $col -lt $cols ]] ; do
    index=$((row*cols+col))
    echo -n "${arr[$index]} "
    let "col+=1"
  done
  echo
  let "row+=1"
done
  
# Суммируем по столбцам
echo "Суммы элементов по столбцам:"
col=0
while [[ $col -lt $cols ]] ; do
  sum=0
  row=0
  while [[ $row -lt $rows ]] ; do
    index=$((row*cols+col))
    let "sum+=${arr[$index]}"
    let "row+=1"
  done
  echo "Столбец: $col, сумма: $sum"
  let "col+=1"
done



Прочитать файл в переменную, зазиповать и выдать в браузер, !*! Афоня, (Perl) 12-Дек-18, 09:32  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Всем привет

Apache, на нём Perl-скрипт, который читает файл и выдаёт его в браузер:

open(my $F, '<', "/Folder/logs/error.log") or die $!;
binmode($F);
{
  local $/;
  my $Result = <$F>;
}
close($F);

print "Content-type: application/txt; charset=UTF-8\n";
print "Content-Disposition: attachment; filename="error.log\n\n";
print $Result;


Иногда лог просто гигантский и его необходимо зазиповать перед выдачей.

1. Как сделать это красиво "в воздухе", без пересохранения файла при зиповании?
2. Как зазиповать несколько файлов, тем же способом, т.е. манипулируя только лишь переменными?


Заранее спасибо!

Доступ к регистрам CPU (freebsd, arm) - как?, !*! OldMonster, (C/C++) 08-Дек-18, 10:17  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
ДВС.
Есть необходимость читать/писать регистры настройки перефирии SoC.
ОС - freebsd 12, gcc, камень BCM2837
Как пример - аппаратный ШИМ
из даташита:

PWM DMA is mapped to DMA channel 5.
DMA Controller Registers:
DMA Channel 5 is located at the address of 0x7E007500

регистры ШИМ
смещение адреса - имя - размер:
0x0 - CTL PWM Control - 32
0x4 - STA PWM Status - 32

Имею опыт писать под микроконтроллеры, но с какой стороны к ЭТОМУ колобку подступиться - пока не могу сообразить.
1. Фря вообще даст напрямую лезть в потрошки камню?
2. Мне бы вот простенький примерчик считать/записать, ну пусть, регистр CTL PWM Control...

Bash Brainfuck , !*! pavlinux, (Shell скрипты) 29-Ноя-18, 16:32  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Задание на зимние каникулы.

Создать скрипт выводящий элементы массива/списка в случайном порядке.
Элементы вводятся через аргументы (argv). Размер массива - динамический (не известен).

Прим.


$> ./test "Vasya Anton Petya Dima Anton Anton Vova Sasha Gray Anton"  

Petya
Anton
Anton
Anton
Vova
Sasha
Gray
Dima
Vasya


На трояк - любое решение;
На 4 - без захламления кода, читаемый, вменяемое время работы.
на 5 - работа через stdin, работа на 10000 эл. не более 30 сек.
на 5+ - минимизация внешних вызовов (утилит)
на 5++  - прохождение теста DieHard http://webhome.phy.duke.edu/~rgb/General/dieharder.php
на 5+++ - время выполнения при 1 млн элементов не более 10 сек.

Freebsd Cron и Mysql, !*! botanik26rus, (Shell скрипты) 17-Ноя-18, 09:03  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Добрый день.

Frebsd 8.4 Имеется скрипт

#/usr/local/bin/bash
for ip in `mysql -Ns -h1.1.1.1 -upolzak -pparol baza -e "select DISTINCT inet_ntoa(conv(HEX(ip), 16, 10)) as ip from tablica"`
do
echo $ip >> "/usr/home/user/mysql.txt"
done;
...........
Если я его выполняю вручную, то все работает норм. Если ставлю выполнение через cron, то скрипт сам выполняется, но из БД приходит 0
Запись из crontab:

10      *     *       *       *       user     sh /home/user/test.sh
Из-за чего так может быть?

ffmpeg/libav api, кто знает как выбрать input s_video/composite, !*! xxxx, (Библиотеки, функции) 16-Окт-18, 10:52  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
собственно сабж..
карта имеет два входа, как менять через API?
Преобразование палитры средствами Pillow., !*! Аноним, (Python) 07-Окт-18, 14:04  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Нужно склеить 2 изображения с разными палитрами. (Одно требуется сохранить без изменений, в другом изменения допустимы.) Поступил просто: создал 3-е изображение нужного размера с палитрой от 1-го, Image.paste()-ом вставил туда 1-е и 2-е. В результате во 2-ом часть оттенков синего стала жёлтыми. Попробовал предварительно преобразовать 2-е в 24-битное — синие цвета покрылись красными точками. Если перед paste() обрабатывать вставляемое convert()-ом, результат тот же (как и следует из докуентации).

ar1 =  fromfile( f1, dtype=uint8 )
pal1 = fromfile( p1, dtype=uint8 )
pic1 = Image.frombuffer( 'P', (32*13, 32*3), ar1, 'raw', 'P', 0, 1 )
pic1.putpalette(pal1[0:768])

ar2 =  fromfile( f2, dtype=uint8 )
pal2 = fromfile( p2, dtype=uint8 )
pic2 = Image.frombuffer( 'P', (32*13, 32*3), ar2, 'raw', 'P', 0, 1 )
pic2.putpalette(pal2[0:768])
pic2.show()
#pict = pic2.convert( mode='RGB' )
#pic3 = pict.convert( mode='P', palette=pic1.getpalette() )

picc = Image.new( 'P', (32*13*2, 32*3) )
picc.putpalette(pal1[0:768])
picc.paste( pic1, ( 0, 0 ) )
picc.paste( pic2, ( 32*13, 0 ) )
#picc.paste( pict, ( 32*13, 0 ) )
#picc.paste( pic3, ( 32*13, 0 ) )
picc.show()

Каким образом управлять преобразованием палитры? Особо точное совпадение мне не нужно, главное — сохранить яркость и уровень синего.

Документация на readthedocs.io устарела. В частности, она неверно описывает заголовок Image.frombuffer()

Заранее спасибо.

 
Пометить прочитанным Создать тему
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру