• WinForm | Как записать текст из textBox в файл?

    @none7
    std::string ToCppString(String^ s, Text::Encoding^ enc = Text::Encoding::ASCII) {
        array<unsigned char>^ chars = enc->GetBytes(s);
        pin_ptr<unsigned char> pp = &chars[0];
        char *first = (char*)pp, *last = first + chars->Length;
        return std::string(first, last);
    }
    Ответ написан
  • По поводу руткитов, работы компьютера и т.п?

    @none7
    Эти посты за 2000 год всё ещё актуальны, Native API очень стабильно несмотря на угрозы MS всё поменять. Основное изменение это появление amd64 и arm. В amd64 нет инструкций call/jmp $+imm64, только call/jmp $+imm32, что не позволяет прыгнуть в большую часть диапазона памяти. push imm64 и ret должны работать, наверное. Так же придётся разбираться с wow32.
    Причём тут кстати C#? На нём конечно тоже можно писать, но всё равно ведь придётся манипулировать сырыми указателями и отдельными машинными инструкциями. И работать через WinAPI если не Native API.
    Ответ написан
  • На что влияют разрешения брандмауэра защитника Windows?

    @none7
    Эти окошки вылезают исключительно для входящих соединений. В результате нажатия кнопки "разрешить доступ" создаётся правило разрешающее приложению принимать подключения на любой порт. При нажатии на кнопку отмена, создаётся правило блокирующее входящие подключения. Профили(общественный,частный) значат лишь то, что когда когда сетевой адаптер назначает себе профиль, то активируются и правила брандмауэра этого профиля. Отличие частных сетей от общественных, заключается в наличии брандмауэра на шлюзе изолирующего сеть от подключений извне, что делает весь входящий трафик чуть более доверенным. Никаких фильтров по разрешённым ip-адресам автоматически не назначается. Так, что если есть IPv6 и нет фильтра на шлюзе, то частный профиль перестаёт отличаться от общественного.
    Ответ написан
    Комментировать
  • При регистрации юзера его имя на русском передаётся в базу данных в неправильной кодировке. Что делать?

    @none7
    Сперва выполните в phpMyAdmin запрос
    UPDATE `users` SET `name`=CONVERT(UNHEX(HEX(CONVERT(`name` using latin1))) using cp1251);

    После этого уже добавляйте $mysql->query("SELECT NAMES 'utf8'") перед INSERT.
    В третьих Ваш html документ распознаётся как windows-1251. Возможно, что сервер отправляет в Content-Type кодировку windows-1251, а она имеет приоритет перед тэгами META, смотрите в отладчике браузера. Можете добавить в форму скрытый input c юникодным символом и проверять на сервере в правильной ли он кодировке.
    Ответ написан
    4 комментария
  • Можно ли сделать такую авторизацию?

    @none7
    Можно, если эти данные зашифровать приличным криптоалгоритмом. Естественно, что ключ шифрования нужно генерировать из /dev/random и регулярно его менять. Так же храним в кукам id ключа(не чек-сумму), а на сервере все использованные ранее ключи. Так же можно заменить шифрование, на хеш с использованием аналогичного временного ключа. Если ключ сильно протух, то ему не доверяем. Только настоятельно не советую записывать в куки role, ведь если у человека отобрали привилегии, запись в куках всё равно останется с role=admin. Традиционные сессии гораздо надёжнее.
    Ответ написан
    2 комментария
  • Изгиб кабеля GPON влияет на скорость интернета?

    @none7
    Это слишком разные уровни, чтобы говорить точно. Оптоволоконный кабель это не труба, которая при пережатии уменьшает скорость потока. При изгибах часть лазерного излучения теряется. В следствии чего сигнал становиться слишком слабым для работы на частоте сети. Только в отличии от радиосетей или xDSL, xPON не умеет динамически менять частоту. Работа с недостаточной мощностью сигнала приводит к ошибкам при приёме данных, что на уровне TCP/IP приводит к утери пакетов,(или к ошибкам передачи). Если Вы попробуете пинговать скажем ya.ru используя размер пакета 1400, то заметите неприемлемый уровень потерь. Но вот если бы до Вас шёл световой поток с хоть каким то запасом, то ошибок передачи не было бы. В частности оборудование провайдера сигнал с вашего лазера видит без ошибок. В любом случае этот кабель не Ваш и это проблема провайдера.
    Ответ написан
    Комментировать
  • Как правильно подключить шаблон с вёрсткой блока из отдельного файла?

    @none7
    При подключении файлов из функции, область видимости подключенного файла ограничивается областью функции. То есть в вашем случае должно быть видно только this и его содержимое. Во вторых include возвращает boolean, а не строку. Для захвата потока используйте функции из набора ob_*.
    Ответ написан
  • Как получить маску сети на php?

    @none7
    function getip4mask($bits) {
        $ret = 0;
        for($i = 0; $i < $bits; $i++)
            $ret |= 1 << 31-$i;
        return $ret;
    }
    
    $cidr = '84.22.142.192/27';
    $matches = null;
    if(preg_match('/^((?:(?:(2(?:5[0-5]|[0-4]\d))|1*[0-9]{0,2})\.){3}(?3))\/(\d|[1-2]\d|3[0-2])$/', $cidr, $matches))
    {
        list('1' => $ip4, '3' => $bits) = $matches;
        $ip4l = ip2long($ip4);
        $maskl = getip4mask($bits);
        $first_ip = $bits == 32 ? $ip4l : ($ip4l & $maskl) + 1;
        
        echo long2ip($first_ip),"\n";
        echo long2ip($maskl),"\n";
    }
    Ответ написан
    1 комментарий
  • Как добавить многопоточность в этот код?

    @none7
    Создаёшь функцию c yield return для перечисления всех чисел. Создаёшь Semaphore(30, 30). Затем перебирая эти числа foreach блокируешь семафор(один из 30 слотов) и запускаешь таски, которые по завершению семафор освобождают. Но нужно не забыть, что, выход из foreach не означает завершение всех задач, а так же не стоит забывать про синхронизацию.
    Как то так:
    spoiler

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Threading;
    
    namespace WindowsFormsApp1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            string key = "";
            char StartChar = '1';
            bool lifeWork = false;
            int line = 0, success = 0;
            private void button1_Click(object sender, EventArgs e)
            {
                key = textBox1.Text;
                StartChar = Convert.ToChar(textBox1.Text.Substring(0, 1));
                timerLog.Interval = 100;
                timerLog.Enabled = true;
                lifeWork = true;
                _ = Work();
            }
    
            IEnumerable<long> GetWorks(string key)
            {
                long value = EncodeBase36(key);
    
                while (true)
                {
                    long newValue = value - 1;
                    if (StartChar != Convert.ToChar(DecodeBase36(newValue).Substring(0, 1)))
                    {
                        break;
                    }
                    yield return newValue;
                    value = newValue;
                }
            }
            private async Task Work()
            {
                var set = new HashSet<Task>();
                var jobsSim = new SemaphoreSlim(30, 30);
                var lockSim = new SemaphoreSlim(1, 1);
    
                foreach(var value in GetWorks(key))
                {
                    if (!lifeWork) break;
    
                    // ограничиваем число потоков
                    // по большей части лимит нужен, чтобы не зафлудить сервер запросами
                    await jobsSim.WaitAsync();
                    Task task = GetResponce(DecodeBase36(value));
                    await lockSim.WaitAsync();
                    set.Add(task);
                    lockSim.Release();
                    _ = task.ContinueWith(async(t) => {
                        await lockSim.WaitAsync();
                        success++;
                        set.Remove(t);
                        lockSim.Release();
                        jobsSim.Release();
                    });
                    line++;
                }
    
                await lockSim.WaitAsync();
                var tasks = set.ToList();
                lockSim.Release();
    
                await Task.WhenAll(tasks);
    
                MessageBox.Show("Off work");
            }
            private async Task GetResponce(string value)
            {
                // Тут будет происходить гет запрос и прочая работа с строкой . По времени занимает от 5 до 15 секунд.
                // Так что код сделла чисто для симуляции времени работы .
                Random rnd = new Random();
                int timeOutn = rnd.Next(5, 15);
                await Task.Delay(timeOutn * 1000);
            }
            public static long EncodeBase36(string number, int radix = 36)
            {
                const string Digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
                if (radix < 2 || radix > Digits.Length)
                    throw new ArgumentException("The radix must be >= 2 and <= " +
                        Digits.Length.ToString());
    
                if (String.IsNullOrEmpty(number))
                    return 0;
    
                // Make sure the arbitrary numeral system number is in upper case
                number = number.ToUpperInvariant();
    
                long result = 0;
                long multiplier = 1;
                for (int i = number.Length - 1; i >= 0; i--)
                {
                    char c = number[i];
                    if (i == 0 && c == '-')
                    {
                        // This is the negative sign symbol
                        result = -result;
                        break;
                    }
    
                    int digit = Digits.IndexOf(c);
                    if (digit == -1)
                        throw new ArgumentException(
                            "Invalid character in the arbitrary numeral system number",
                            "number");
    
                    result += digit * multiplier;
                    multiplier *= radix;
                }
    
                return result;
            }
    
            private void timerLog_Tick(object sender, EventArgs e)
            {
                lbLine.Text = line.ToString();
                lbSuccess.Text = success.ToString();
            }
    
            public static string DecodeBase36(long decimalNumber, int radix = 36)
            {
                const int BitsInLong = 64;
                const string Digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
                if (radix < 2 || radix > Digits.Length)
                    throw new ArgumentException("The radix must be >= 2 and <= " +
                        Digits.Length.ToString());
    
                if (decimalNumber == 0)
                    return "0";
    
                int index = BitsInLong - 1;
                long currentNumber = Math.Abs(decimalNumber);
                char[] charArray = new char[BitsInLong];
    
                while (currentNumber != 0)
                {
                    int remainder = (int)(currentNumber % radix);
                    charArray[index--] = Digits[remainder];
                    currentNumber = currentNumber / radix;
                }
    
                string result = new String(charArray, index + 1, BitsInLong - index - 1);
                if (decimalNumber < 0)
                {
                    result = "-" + result;
                }
    
                return result;
            }
        }
    }

    Ответ написан
    Комментировать
  • Где же все-таки находится ссылка на таблицу методов в .NET?

    @none7
    Когда не знаешь чему верить, то верь отладчику.
    Там так:
    static void test(object o) {
        Type t = o->type; // offset 0
        IntPtr *vt = t->vtable_of_type; // offset 0x28 на x86
        vt[3](); // call
    }
    Ответ написан
    Комментировать
  • Система лайков. Как передать конкретный post_id на js файл?

    @none7
    Добавьте внутрь <div class='post_container'>
    <input type="hidden" name="post_id" value="$post_id" />

    И в JS
    var post_id=$(this).parents(".post_container").children("input[name=post_id]").val());

    ---------------------
    Или можно сделать по совету Сергей и добавить в button атрибут data-post-id="$post_id" и вытащить через $(this).data("post-id"). И наверное так даже правильнее для html5.
    Ответ написан
    2 комментария
  • Почему возникает NullReferenceException?

    @none7
    Нельзя просто взять и создать Text. Его должен создавать GameObject. Пример.
    Ответ написан
  • Проблема в изучении c# ,зачем и как использовать возможности языка?

    @none7
    Ивенты это просто сахар для колбэков объекта, внутри там Form.OnClickEventAdd(Delegate d). Колбэки объекта нужны для долгоживущих объектов вроде оконных форм или ячейки записи в бд с уведомлением об изменении, записям в книге контактов с событиями по появлению онлайн, инициализации им звонка, изменение контактом своей иконки. В общем событий каждый объект может генерировать уйму. Как альтернатива, есть наследование с переопределением виртуальных методов, но оно не позволяет отправить сигнал множеству связанных объектов, а так же можно писать лапшекод, который без абстракций вызывает методы других классов по событию.
    Назначение тех или иных конструкций должно становится понятным при написании максимально абстрактного кода.
    Ответ написан
    Комментировать
  • Как вынуть публичный ключ из сертификата, для дальнейшей подписи и шифрования данных через библиотеку CryptoAPI?

    @none7
    По идее токен это не просто флешка. Вытащить секретный ключ из него должно быть невозможно. Следовательно Вам копать в сторону PKCS7 и функций
    CryptSignMessage
    CRYPT_SIGN_MESSAGE_PARA
    CERT_CONTEXT
    CertEnumCertificatesInStore
    CertOpenStore
    и т.д.
    P.S. примера кода не дам.
    Ответ написан
    Комментировать
  • Есть ли утилита учёта трафика для Linux, как в смартфонах?

    @none7
    В Android, каждое приложение запускается под отдельным пользователем. В таком виде трафик можно считать средствами iptables, журналируя состояния счётчиков раз в день и чаще. Красивый график можно получить в аналогах Excel. Журналировать трафик по приложениям невозможно уже потому, что приложение в Linux может без труда изменить своё имя.
    Ответ написан
    Комментировать
  • Как мне изменить IP адреса в пакете ICMP?

    @none7
    API драйвера отправляющего ICMP запросы не предусматривает выбор адреса отправки. Вы можете запускаться с админскими привилегиями и использовать RAW-сокеты, для самостоятельного формирования и разбора IP-пакетов. И это даже можно сделать на C# через обычный System.Net.Sockets.Socket. Только вот очень вероятно, что если Вы отправите пакет с адресом не тем, что Вам выдал провайдер, то он такой пакет дропнет.
    Ответ написан
    Комментировать
  • Как настроить маршрутизацию нескольких туннелей ipv6?

    @none7
    Потому, что нет маршрута для 2001:470:39:1da::1. Зачем Вам указывать адрес шлюза? Протокол 6in4(sit) не предусматривает какие то физические адреса. И via имеет смысл, только для 6to4, 6rd. В таком случае интерфейс создаётся с remote any, а в route via адрес шлюза указывается в стиле ::192.88.99.1, ну или аналог ipv4 адреса в форматах 6to4, 6rd.
    Ipv6 адрес шлюза туннеля нужен только для пингов.
    Ответ написан
  • C++ как преобразовать string в bitset?

    @none7
    template <class _Elem = char, class _Traits = char_traits<_Elem>, class _Alloc = allocator<_Elem>>
    std::string getstrbits(const std::basic_string<_Elem, _Traits, _Alloc>& s) {
        std::stringstream ret;
        const constexpr int digits = std::numeric_limits<_Elem>::digits + std::numeric_limits<_Elem>::is_signed;
        for (auto c : s) ret << std::bitset<digits>(c).to_string();
        return ret.str();
    }
    Пропускаешь строчку через функцию, а затем скармливаешь bitset. Только нужно понимать, что bitset это массив фиксированного размера, а string динамического.
    Ответ написан
    Комментировать
  • Как добавить несколько ipv4-to-ipv6 туннелей?

    @none7
    Он скорее всего ругается на существование default маршрута с той же метрикой, с какой Вы пытаетесь добавить. Маршруты добавленные через ip route не наследуют метрику интерфейса.
    Ответ написан
    7 комментариев