Squeak.ru - шаблоны программирования

Как вы можете изменить первые октеты в IP-адресе

Может ли кто-нибудь подсказать мне, как изменить первые два октета в IP-адресе с помощью сценария оболочки?

Я пытался изменить этот код, но это не сработало. Любое руководство или помощь будут оценены.

Этот пример заменит последний октет:

cat test.sh
ip=$1
baseip=`echo $ip | cut -d"." -f1-3`
echo $baseip".0"
./test.sh 192.168.133.14
192.168.133.0
08.01.2013

Ответы:


1

Хороший способ использования способности bash PE:

ip="10.1.2.3"; tmpip="${ip#*.*.}";  echo "192.168.$tmpip"

Также приятно отметить, что вы можете рандомизировать генерируемые IP-адреса. Просто предлагаю некоторые общие идеи.

ip="10.1.2.3"; tmpip="${ip#*.*.}";  echo "$[RANDOM%256].$[RANDOM%256].$tmpip"
11.01.2013
  • Да, конечно, можете. В этом сила функций bash PE (расширение параметров). 11.01.2013

  • 2
    bytes12=10.0
    ip=$(echo $1 | sed "s/\([0-9]\+\.\)\{2\}\(.*$\)/$bytes12.\2/")
    

    sed: s/a/b/ находит a и заменяет его на b. \(\) инкапсулировать подвыражения, которые должны быть обработаны \1, \2, ....

    Первое подвыражение соответствует таким последовательностям, как 192.168., т. е. дважды (\{2\}) по крайней мере одна цифра (\+), за которой следует точка. Второе подвыражение соответствует всему, что находится между ним и концом строки ($).

    Поскольку нас не интересует \1, нам не нужно его упоминать. Мы заменяем его нашим фиксированным представлением байтов более высокого порядка $bytes12. Ожидается, что последние байты будут содержаться в \2, поэтому мы просто добавляем его.

    09.01.2013

    3
    INET_NTOA () { 
        local IFS=. num quad ip e
        num=$1
        for e in 3 2 1
        do
            (( quad = 256 ** e))
            (( ip[3-e] = num / quad ))
            (( num = num % quad ))
        done
        ip[3]=$num
        echo "${ip[*]}"
    }
    
    INET_ATON () {
        local IFS=. ip num e
        ip=($1)
        for e in 3 2 1
        do
            (( num += ip[3-e] * 256 ** e ))
        done
        (( num += ip[3] ))
        echo "$num"
    }
    

    можно найти здесь: Как эффективно конвертировать длинные int в четырехъядерный IP-адрес с точками в bash

    30.04.2015

    4

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

    Я собрал это из различных частей сценария установки сервера, который я использую. Он извлечет имя сетевого интерфейса, извлечет информацию о сети и маске, а затем проанализирует ее, чтобы предоставить вам правильную замаскированную подсеть и нотацию CIDR. На самом деле я только что добавил последнюю часть сегодня, используя эту страницу в качестве руководства, но она полностью автоматизирует процесс для вас:

    #!/bin/bash
    
    subnetip=""
    subnetmask=""
    nicname=""
    
    runme()
    {
        # pull name for primary network interface with internet access
        nicname=$(ip route get 8.8.8.8 | awk '{print $5}')
    
        # pull interface IP Address/subnet info assigned by DHCP
        local subnetmasktemp=$(ip -o -f inet addr show $nicname | awk '{print $4}')
    
        # split ip/subnet into two variables, subnetip and subnetmask
        local IFS=/
        set $subnetmasktemp
        subnetip=$1
        subnetmask=$2
    
        # parse ipaddress and subnet info and output appropriate info for client subnet
        local baseip=0
        if [ "$subnetmask" -le 31 ] && [ "$subnetmask" -ge 24 ]; then
            baseip=`echo $subnetip | cut -d"." -f1-3`
            subnetip=($baseip".0")
        elif [ "$subnetmask" -le 23 ] && [ "$subnetmask" -ge 16 ]; then
            baseip=`echo $subnetip | cut -d"." -f1-2`
            subnetip=($baseip".0.0")
        elif [ "$subnetmask" -le 15 ] && [ "$subnetmask" -ge 8 ]; then
            baseip=`echo $subnetip | cut -d"." -f1`
            subnetip=($baseip".0.0.0")
        fi
    
        echo "$subnetip/$subnetmask"
    }
    
    
    runme;
    
    10.09.2016

    5
  • эхо 192.168.133.14 | sed 's/[0-9][0-9][0-9].[0-9][0-9][0-9]./*.*./' ..133,14 09.01.2013
  • @user152523 мазохист. Также не работает, если первые два октета не являются 3 цифрами. 09.01.2013
  • @user152523 user152523 echo 192.168.133.14 | sed 's/\([0-9]*\)\.\([0-9]*\)\.[0-9]*\.[0-9]*/\1.\2.133.14/' работает, но все же больше боли в заднице, чем awk или cut. 09.01.2013
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...