1. C# / Говнокод #19907

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    public static long NormalizeIp(this long ip)
            {
                var ipAddress = new IPAddress(Math.Abs(ip)).ToString();
                return ipAddress.IpToLong();
            }
    
    
            static long IpToLong(this string ip)
            {
                double num = 0;
                if (!string.IsNullOrEmpty(ip))
                {
                    var ipBytes = ip.Split('.');
                    for (var i = ipBytes.Length - 1; i >= 0; i--)
                    {
                        num += ((int.Parse(ipBytes[i]) % 256) * Math.Pow(256, (3 - i)));
                    }
                }
    
                return (long)num;
    
            }

    Получаем IP вот таким вот методом - BitConverter.ToInt32(IPAddress.Parse(ip) .GetAddressBytes(), 0)
    Приводим к типу long (неявным методом, т.е. long a = ip_address) и в таком виде сохраняем в базу как bigint (int64)
    Затем берем его из базы и пытаемся провернуть с ним вот такой NormalizeIp
    Печаль (

    Запостил: bopoh, 30 Апреля 2016

    Комментарии (41) RSS

    • А потом удивляемся, почему IPv6 никак не взлетит...
      Ответить
      • И это в рашке.
        Ответить
        • В которой от провайдерских натов еще в середине двухтысячных стонали.
          Ответить
          • всем похуй на наты давно
            от них страдают тока торенты, да и там есть всякие UPnP NAT, NAT-PMP, socks в конце концов

            у хороших то провов
            Ответить
            • > UPnP
              Провайдерский нат через UPnP не уломаешь.

              Торрентам по другой причине похуй - исходящих коннектов вполне хватает. Траблы разве что на очень редких релизах, где среди раздающих сплошные инвалиды с NAT'ом...
              Ответить
              • смотря что за пров) довомые вполне можно, серьезных доксисовцев или поновцев хуй конечно

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

                если ты за натом и без upnp, то количество пиров твоих сильно падает

                у меня кстати реальный IP дома, но по другим причинам
                стоит 300 руб мес)
                Ответить
                • я вам по секрету скажу, тока тсс, но хетцнер (такой немецкий тсс хостер) твой впс тоже за нат пихает, с пробросом всех портов с белого айпишника

                  тока пидору не говорите, а то произойдет деление на ноль
                  Ответить
                  • у меня облако на ростелекоме, и там тоже самое

                    мой IP там 192.168.0.2, а снаружи все нормально)
                    так часто делают

                    но проблема в том, что через такой нат (destination nat, DNAT) проходят только UDP и TCP, а например натить GRE он не умеет, и потому PPTP VPN мне там не поднять)
                    Ответить
                    • > GRE
                      Нинужно, ибо говно с хуёвой пробиваемостью. У меня, к примеру, мтс грешные пакеты не пропустил. Пришлось переключать инет на мегафоновскую симку.
                      Ответить
                      • однако PPTP без него не поднять:)

                        На самом деле PPTP конечно тоже не нужен
                        Нужен L2TP/IPSec, но настройка оного куда более сложна, ибо надо настраивать как IKE для IPSec, так и L2TP потом.

                        Зато все скурнее и ходит через обычные TCP порты (правда нужно 2 порта: для IKE и L2TP).

                        Еще хорош OpenVPN, но его клиент не встроен в популярные ОС (а pptp и l2tp встроены)
                        Ответить
                        • > L2TP потом
                          Х.з., если честно. Я L2TP не юзал, только голый IPSec для андроида поднимал.
                          Ответить
                          • IPSec хорош, и L2TP/IPSec это примерно 5% того, что умеет IPSec.

                            но IPSec не обеспечивает маршрутизацию.

                            L2TP создает тебе виртуальный интерфейс, и через него удобно ходить в локалку. А IPSec может просто либо подписывать башку пакета (AH) либо шифровать контент (ESP) либо и то и другое.

                            В теории можно выебнуца и настроить маршрутизатор так, чтобы он пакеты с IPSec пускал внутрь, но как-то сложно.

                            Наверняка дорогие цыски так могут.

                            Кроме того L2TP имеет очень простую авторизацию, и можно RADIUS прикрутить и считать сколько времени человек провел приконнеченым итд.
                            Ответить
                            • > как-то сложно
                              Ну х.з., я тогда на линухе довольно быстро настроил. Дырка для IPSec портов в фаерволе, харон для IKE да маскарад под айпишник VPS'ки. Вроде и всё. Цель была - сделать свой уютный VPN для андроида, чтобы юзать инет из всяких небезопасных мест и заодно ложить хуй на роскомпозоры.

                              Насколько такой конфиг безопасен для боевых применений - х.з.
                              Ответить
                              • >>харон
                                racoon же, не?

                                Я на зюхельной железке как-то настраивал, а клиент у меня был на винде
                                Там очень круто настраивается политика IpSec. Например: "включать IPSec только для пакетов на такой-то IP". Хотя она и в линуксе такая же точно
                                Ответить
                                • > racoon же, не?
                                  Charon от Сильного Лебедя. Кстати, Харон - очень подходящее название для этого демона ;)
                                  Ответить
                                  • а, это часть strongswan, точно

                                    а racoonа я видел на фре
                                    http://linux.die.net/man/8/racoon
                                    Ответить
                                  • а, это часть strongswan, точно

                                    а racoonа я видел на фре
                                    http://linux.die.net/man/8/racoon
                                    Ответить
                        • когда приспичит, то скачают и клиент

                          у нас на работе админ поднял цисковский эниконнект
                          говорит, не в каждой гостинице за рубежом открыты другие порты и протоколы, кроме 80 и 443, приходится скачивать и настраивать (и два разных подключения одновременно не сделать при этом), и вообще бесит этот кусок говна, но все терпят

                          в цоды заказчики частенько дают именно опенвпн, ну и да, циску тоже иногда

                          так что не так страшен этот опенвпн, ебли чуток побольше, это да
                          Ответить
                          • > не так страшен этот опенвпн
                            Ой, да там конфиг закинуть, да ярлычок на рабочий стол вынести... Вот и вся настройка. Тем более сервер вполне может пушить айпишники и т.п. на клиента, так что в конфиге считай одна аутентификация... По-моему все эти штатные PPTP даже геморройней настраивать - больше кликов мышкой.
                            Ответить
                            • «Штатные» PPTP и L2TP встроены в некоторые дешёвые маршрутизаторы, поэтому они востребованы.
                              Ответить
                        • PPTP - это бырявый мелкомягкий впн, который еще в 97-98 обоссали?
                          Ответить
                          • что такое "бырявый"?
                            и что значит "обоссали"?

                            Используй пожалуйста технические термины, а не термины из твоих с Шамилем ролевых игр
                            Ответить
                      • > У меня, к примеру, мтс грешные пакеты не пропустил.

                        Грешные магистры! Дырку над ними в небе!
                        Ответить
                  • И нахуя они это делают? АЛсо
                    >с пробросом всех портов
                    Пробрось их из-за провайдерского ната, пидараха.
                    Ответить
                    • снова пердишь в лужу, евроукр?
                      что такое по твоему проброс портов?
                      перенаправление на другой адрес
                      серверу 172.31.1.100 доступен любой другой белый адрес, исходящие порты не режутся
                      в чем проблема?
                      Ответить
                      • >И нахуя они это делают?

                        Русня, ты что не знаешь что такое провайдерский нат? Или в маааскву такого не завезли? И про домовые сети не слышал?
                        Ответить
            • Попизди мне тут, чертила. Слышал я ваши вопли в середине нулевых.
              Ответить
        • Рашка - это твоя бошка
          Ответить
    • Чето навеяло - смотрите фокус

      https://ideone.com/2yiR7w
      Ответить
      • Красивая типитушня. Надо бы отдельным ГК, если на ГК не было.
        Ответить
      • И после этого ругают Си, JS и PHP за «мягкость»...
        Ответить
    • А у того же блядского mysql есть INET_NTOA и INET_ATON. Кстати, IPv6 вореция вариация тоже есть.
      Ответить
      • inet_pton/inet_ntop ребятам ещё не завезли?
        Ответить
      • А в няшном постгресе есть специальные типы для сетевых адресов.
        Ответить
        • Зачем cпециальный тип, если можно хранить в uint32_t?
          Ответить
          • Там можно всякие 192.168.0.1/16 хранить, ну и IPv6 конечно же.
            Ответить
            • а потом делать выборки всех сетей, в коие входит ип?
              Ответить
              • Ну как вариант (чтобы какие-то правила к нему применить, например забанить). Или наоборот - искать айпишники, попадающие в подсеть.
                Ответить
    • Фишка в том что int32 преобразовали в int64 знак при этом сохранился, а затем у int64 отобрали знак и на его основе создали ipaddress, потом вообще какое-то мракобесие устроили и получили некий int64 который должен равняться исходному int32
      Ответить

    Добавить комментарий