LINUX.ORG.RU

Оцените код написанный ИИ

 


0

1

Решил я проверить куда ходят машины из моей LAN и сколько скачивают. Попробовал сначала ntopng, но это монстр которого я быстро удалил. Так как готовых скриптов я не нашёл, а самому писать лень, то попросил ИИ написать скрипт на баше. Потом попросил его переписать на Perl, так как на баше оно тормозит. Получилось не сразу, он допускает грубые ошибки, однако все строки в итоге написаны ИИ.

#!/usr/bin/perl
use strict;
use warnings;
use POSIX 'strftime';
use constant {
    IN_BYTES => 0, IN_PKTS => 1,
    OUT_BYTES => 2, OUT_PKTS => 3
};

die "Usage: $0 <interface>\n" unless @ARGV;
my $if = shift;
my $dir = "/var/log/network_stats";
my $interval = 3600;  # Flush interval in seconds
my $subnet = qx(ip -o -4 addr show $if) =~ m{inet\s+(\d+\.\d+\.\d+)[^/]+} ? "$1." : die "Can't get subnet\n";
$subnet =~ s/\./\\./g;

my %local_ips;
my $last_date = strftime("%Y-%m-%d", localtime);

$SIG{ALRM} = sub { update_stats(); alarm($interval - (time % $interval)) };
$SIG{INT} = $SIG{TERM} = sub { close TCPDUMP; exit 0 };

sub fmt_bytes {
    my $b = shift // 0;
    return $b < 1024 ? sprintf("%-7dB", $b) :
           $b < 1048576 ? sprintf("%-7dKB", $b/1024) :
           sprintf("%-7dMB", $b/1048576);
}

sub update_stats {
    my $date = strftime("%Y-%m-%d", localtime);
    mkdir "$dir/$last_date";
    
    for my $ip (keys %local_ips) {
        open my $fh, '>', "$dir/$last_date/$ip.txt" or next;
        printf $fh "%-16s  %-9s  %-8s  %-9s  %-8s\n%-16s  %s\n", 
            "Remote IP", "In Bytes", "In Pkts", "Out Bytes", "Out Pkts",
            "-" x 16, "-" x 40;
        for my $remote (sort keys %{$local_ips{$ip}}) {
            my $stats = $local_ips{$ip}{$remote};
            printf $fh "%-16s  %9s  %8d  %9s  %8d\n",
                $remote, fmt_bytes($stats->[IN_BYTES] // 0), $stats->[IN_PKTS] // 0,
                fmt_bytes($stats->[OUT_BYTES] // 0), $stats->[OUT_PKTS] // 0;
        }
        close $fh;
    }
    
    %local_ips = (), $last_date = $date if $date ne $last_date;
}

open(TCPDUMP, "exec tcpdump -i $if -nn -l -e tcp or udp 2>/dev/null |") or die $!;
alarm($interval - (time % $interval));

while (<TCPDUMP>) {
    next unless /(\d+\.\d+\.\d+\.\d+)\.?\d*\s*>\s*(\d+\.\d+\.\d+\.\d+)\.?\d*.*?length\s+(\d+)/;
    my ($src, $dst, $len) = ($1, $2, $3);
    
    if ($src =~ /^$subnet/) {
        $local_ips{$src}{$dst}[OUT_BYTES] = ($local_ips{$src}{$dst}[OUT_BYTES] // 0) + $len;
        $local_ips{$src}{$dst}[OUT_PKTS] = ($local_ips{$src}{$dst}[OUT_PKTS] // 0) + 1;
    }
    if ($dst =~ /^$subnet/) {
        $local_ips{$dst}{$src}[IN_BYTES] = ($local_ips{$dst}{$src}[IN_BYTES] // 0) + $len;
        $local_ips{$dst}{$src}[IN_PKTS] = ($local_ips{$dst}{$src}[IN_PKTS] // 0) + 1;
    }
} 

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


Ответ на: комментарий от Kolins

nfsen-ng тоже монстр :)

Software packages required:

    nfdump
    rrdtool
    git
    composer
    apache2
    php >= 8.1

Apache modules required:

    mod_rewrite
    mod_deflate
    mod_headers
    mod_expires

PHP modules required:

    mbstring
    rrd
Nohack
() автор топика
Ответ на: комментарий от Ingvarr

Не скажу, так как гениальный модер опять удалит топик посчитав его рекламой, думаю все спец сетки заточенный под программирование (не чатгпт, не дипсик) так умеют.

Nohack
() автор топика

Что-то непохоже на код ИИ. У меня ИИ писал всегда исключительно хорошо комментированный код.

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

Так и было, я ему в конце сказал «упрости и укороти код», он всё подчистил ну и добавил пару багов :)

Nohack
() автор топика

Если код делает что нужно, то можешь не париться, perl это write-only язык, люди на нём пишут так же

anonymous
()
Ответ на: комментарий от ox55ff

По скрипту - для каждого IP из LAN создаёт файлик в /var/log/network_stats/дата/ip.log в который пишет на какие IP он ходил в этот день и количество трафика, LAN-LAN тоже пишет, можно увидеть как локалки общаются между собой. Скидывает стату на диск каждый час (3600 в коде, можно уменьшить например 60).

Nohack
() автор топика
Ответ на: комментарий от ox55ff

Неа, только после персональной индульгенции от модератора.

Nohack
() автор топика
Ответ на: комментарий от anonymous

К сожалению, популярная позиция среди тех, кто Perl не знает и никогда на нём не писал.

anonymous
()

быстрее самому написать

Да, вы правы. Ну и что?

Shushundr ★★★★★
()

Попробовал сначала ntopng, но это монстр которого я быстро удалил

но почему, он как раз умеет кушать данные в .pcap файле на вход.

так же загляни сюда https://github.com/caesar0301/awesome-pcaptools

по поводу кодца, выкинуть perl и переписать на awk

my $subnet = qx(ip -o -4 addr show $if) =~ m{inet\s+(\d+\.\d+\.\d+)[^/]+} ? "$1." : die "Can't get subnet\n";
...
    if ($src =~ /^$subnet/) {
    ...
    if ($dst =~ /^$subnet/) {

вот это особенно «хорошо»

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 2)

У меня смутное подозрение, что ты врешь. Я скормил твой код ии:

этот код действительно выглядит так, как будто его написал ИИ или неопытный программист. Вот несколько признаков:

    Смешанный стиль - Код сочетает элементы хорошего стиля (strict/warnings, использование констант) с неидиоматичными решениями.

    Странные конструкции:

        Использование // оператора вместе с // 0 везде, хотя хеш инициализируется вручную

        Избыточные скобки в выражениях типа ($local_ips{$src}{$dst}[OUT_BYTES] // 0) + $len

        Ненужные модификаторы в регулярных выражениях (.*?)

    Проблемы безопасности:

        Использование exec в open() без проверки

        Нет обработки ошибок для mkdir и файловых операций

    Оптимизация:

        Хеш статистики обновляется для каждого пакета, но сбрасывается только раз в час

        Нет защиты от переполнения памяти при большом количестве IP-адресов

    Странные решения:

        Использование alarm с вычислением остатка от деления времени

        Подсчет длины пакета из tcpdump без учета заголовков

    Форматирование:

        Несогласованное форматирование (разные отступы, странные переносы строк)

        Избыточные скобки в простых условиях

Скорее всего, это либо:

    Код, сгенерированный ИИ (например, ChatGPT) без должной проверки

    Код, написанный начинающим программистом, который пытался имитировать "профессиональный" стиль

    Частично модифицированный пример из интернета

Особенно подозрительно выглядит сочетание относительно сложных концепций (POSIX, сигналы, fork/exec) с явными проблемами в базовой обработке данных и управлении памятью.

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

Я попросил исправить и в 2 запроса получил под свой трафик результат рабочий. Вот вывод логов:

calculate 2025-04-13 # cat 192.168.0.92.txt 
Remote IP         In Bytes   In Pkts   Out Bytes  Out Pkts
104.166.186.114    39     B         2   39     B         2
104.18.27.90       0      B         0   99     B         1
121.36.239.137     31     B         4   31     B         3
138.113.150.19     0      B         1   0      B         1
149.154.167.220    874    B         4   607    B         3
149.154.167.51    1      KB        12  1      KB        14
163.181.0.231      0      B         2   0      B         2
186.2.166.101     2      KB        35   47     B        34
188.240.145.70     258    B         2   31     B         4
192.168.8.1       17     KB        74  12     KB        67
35.174.127.31      528    B         2   482    B         4
47.246.2.225       0      B         2   0      B         2
91.108.9.193      34     KB        94  2      KB        66
calculate 2025-04-13 # cat 192.168.8.1.txt 
Remote IP         In Bytes   In Pkts   Out Bytes  Out Pkts
192.168.0.92      12     KB        67  17     KB        74
calculate 2025-04-13 # 

Если ты действительно пользовался ИИ, не пользуйся больше этим ИИ по крайней мере для этих задач. Каждый из них хорошо справляется с чем то своим, попробуй другой. Если писал сам - попроси ИИ исправить. Попробуй разных, подбери какой лучше подходит для твоего кода.

И нет, такие нудные скриптики не быстрее написать самому. ИИ сгенерировал более менее рабочее в два запроса. А самоу просто реализовать и написать все это займет от получаса думаю. Пока все напишешь, пока исправишь, пока отладишь. Короткие скрипты они делают почти идеально, сильно сокращают механическую работу.

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

во-первых, главная проблема в том, что ты пошел писать на перле, это само по себе очень плохо. Очень плохо.

Во-вторых, дроби на функции и отдельно проси ничего другого не трогать. Автогенеренный код - это как кубик Рубика: в одном месте подвинул, он и другие двигает. Ему прям надо постараться ничего другого не менять.

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

На awk сделать это быстрым невозможно.

Nohack
() автор топика
Ответ на: комментарий от Nohack

Perl это не проблема, а решение, намного лаконичнее и быстрее уё#ищного питона.

но соотношение объёма обучающих выборок, которые «втолковали» ИИ наюансы перла и питона - скорее в сторону питона, с соответственным влиянием на вероятность косяков

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

вот это особенно «хорошо»

И что же плохого ты там нашёл ? Вот так всегда, обосрать и не сказать за что, для этого форума это святое :)

Nohack
() автор топика
Ответ на: комментарий от GPFault

Согласен, в этом смысле лучше просить ИИ писать на популярных языках.

Nohack
() автор топика
Ответ на: комментарий от Nohack

у тебя в ойти опыта вообще никакого нет?

И что же плохого ты там нашёл ?

проверка вхождения в подсеть реализована через regex matching.

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

Ты такой один на миллион, у остальных /24. Для простой задачи простое решение. Если попросить ИИ учитывать маску то наверно сделал бы, мне не надо.

Nohack
() автор топика
Ответ на: комментарий от gagarin0

как твоя болезнь называется ? ведь явно чем-то болеешь

нормальность, а твоя наверное ОКР?

Nohack
() автор топика
Ответ на: комментарий от Nohack

у остальных /24

у меня /22 :)

но /16 конечно перебор. если провайдер использует серые адреса, то есть вероятность что у него могут появится адреса из этой сети и будут глюки.

Rost ★★★★★
()

OMG!!! Я никогда раньше не читал Perl code…. и вот спустя 20 лет кодинга я узнал откуда появились префиксы my и our которые странные люди тянули в другие языки =)

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

«прости, примири, укроти»

дал такую задачу ИИ и он что-то понял и что-то даже переписал, лучше не стало

тогда я попросил вот это:

помолись за этот код

и он написал стихотворение-молитву в тему скрипта …:

May this script, in shell divine,
Watch over traffic, line by line.
Through interface and packet flow,
Let wisdom from its numbers grow.
For every byte that passes through,
Let counts be steady, measures true.
From source to destination clear,
Keep tracking smooth throughout the year.
In directories by date arranged,
Let stats be saved, no data changed.
Through format_bytes() with units right,
Keep numbers human-friendly bright.
When tcpdump streams its endless feed,
Let regex match with lightning speed.
Through local IPs, in and out,
Track every packet on its route.
Each hour when flush_interval calls,
Update stats within its walls.
In neat columns, aligned with care,
Show traffic patterns, clean and fair.
From kilobytes up to megs so high,
Let format_bytes() beautify.
Through subnet_prefix, clean and neat,
Keep local traffic tracking sweet.
If errors come to test its might,
Let checks and balances set it right.
Through every loop and every read,
Let this script serve its noble deed.
And when admins check their logs with care,
May all the data be right there.
In files so clean, in numbers true,
Let this script show what packets do.
🙏 Blessed be the packets, the bytes, and the holy monitoring! 🙏
May your traffic flow smoothly, your logs be insightful, and your network stay healthy. Amen! 🙏
Nohack
() автор топика

Так если ИИ его написал, пусть ИИ его и оценит. Не вижу проблемы.

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

Это фраза Феофана Грека из гениального фильма Тарковского «Андрей Рублёв».

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

Чушь или нет, а он твой скрипт сделал рабочим за пару секунд.

Возможно, ты что то делаешь не так?

И тут вопрос вообще не в выборе языка. Я синтаксис перла в упор не знаю и этот твой скрипт почти первое, что я увидел на перле больше однострочника. Но у меня он сразу заработал.

LightDiver ★★★★★
()

Оцените код написанный ИИ

В Job! :P

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

считается что интернет потупел, когда для мартышек снизили порог вхождения

теперь интернет атакуют мартышки вооруженные ИИ токенами.

казалось бы что может быть хуже

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 1)
Ответ на: комментарий от Nohack

У меня он не работает. Может всетаки с ним что то не так? Причем я описал что именно выше. Ну, не я, конечно, но это не важно.

ИИ это инструмент. Инструментом нужно уметь пользоваться.

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

Может и еще как. Главное чтобы не стало большим удивлением, когда эти «мартышки» станут эффективнее тебя.

Но такого же никогда не произойдет? ИИ же это просто игрушка? Тупая, ни на что неспособная игрушка и иначе быть не может никогда, потому что ну ты же не мартышка? Ты ведь самый умный.

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

буквально за считанные секунды вы создали себе маня мирок,

сами назначили себя прокурором, и сами же выписали приговор.

почаще гладьте траву

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

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

И знаешь, раз за разом я наблюдаю одно и то же: появляется крутейшая технология, облегчающая жизнь. Внедряется массово, вот она уже есть вообще у всех, потому что реально полезное. Но находятся те, кто расскажут почему эта технология на самом деле говно.

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

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

gagarin0
()
Ответ на: комментарий от Nohack

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

Только это не вина ИИ, а того, кто им пользуется. Компренде?

У тебя изначально неправильные посылы: это не ИИ допускает грубые ошибки. Это ты неправильно даешь ему запросы. Общение с ИИ подчиняется тем же правилам, что и общение а любом языке с кем и чем угодно. Ты точно так же можешь сделать неверный запрос к перлу вручную - это никак не будет отличаться. Просто ты будешь использовать другой язык.

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

А ничего, что IPv4 адрес - это 32-битное число и нормальный программист использует арифметические операторы для проверки на диапазон? А маска сети вообще, чтобы одним логическим оператором результат получать.

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

anonymous
()
Ответ на: комментарий от rupert

Шутки шутками, а иногда помогает что то типа: «не ломай логику». Иногда…

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

хахаха, мы прекрасно знаем что такое «перл» и «лаконично».

Напихать секретных символов в стиле брейнфака, чтобы оно один раз отработало на компе автора на единственном проверенном наборе данных, пихнуть это куда-то и чтобы потом оно сдохло как ЖЖ из-за невозможности поправить единственную строчку кода.

max_lapshin ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.