Network script in linux

How can I check Internet access using a Bash script on Linux?

Personally, I enhance this pattern by making this wget -q —tries=10 —timeout=20 -O — http://google.com > /dev/null . That throws away the output, which means that files aren’t left lying around, and there aren’t any problems with write permissions.

You really should use —spider option as it will send a http HEAD request as opposed to a http GET request. Now, in this case you’re checking against google.com which is a pretty light weight page so it may be ok as it is. But as a general rule you should use a HEAD request if you just want to check if something is available without actually downloading it. I’ve added to the answer accordingly.

If the school actually turns off their router instead of redirecting all traffic to a «why aren’t you in bed» page, then there’s no need to download an entire web page or send HTTP headers. All you have to do is just make a connection and check if someone’s listening.

This will output «Connection to 8.8.8.8 port 53 [tcp/domain] succeeded!» and return a value of 0 if someone’s listening.

If you want to use it in a shell script:

nc -z 8.8.8.8 53 >/dev/null 2>&1 online=$? if [ $online -eq 0 ]; then echo "Online" else echo "Offline" fi 

This is the fastest approach, it pings the dns server instead of getting google’s website data. thumbs up.

#!/bin/bash INTERNET_STATUS="UNKNOWN" TIMESTAMP=`date +%s` while [ 1 ] do ping -c 1 -W 0.7 8.8.4.4 > /dev/null 2>&1 if [ $? -eq 0 ] ; then if [ "$INTERNET_STATUS" != "UP" ]; then echo "UP `date +%Y-%m-%dT%H:%M:%S%Z` $((`date +%s`-$TIMESTAMP))"; INTERNET_STATUS="UP" fi else if [ "$INTERNET_STATUS" = "UP" ]; then echo "DOWN `date +%Y-%m-%dT%H:%M:%S%Z` $((`date +%s`-$TIMESTAMP))"; INTERNET_STATUS="DOWN" fi fi sleep 1 done; 

The output will produce something like:

./internet_check.sh UP 2016-05-10T23:23:06BST 4 DOWN 2016-05-10T23:23:25BST 19 UP 2016-05-10T23:23:32BST 7 

The number in the end of a line shows duration of previous state, i.e. 19 up, 7 seconds down.

Welcome to Stack Overflow! While this code may answer the question, it would be better to include some context, explaining how it works and when to use it. Code-only answers are not useful in the long run.

Had lots of ups and downs in a few minutes. While DropBox was online and surfing the web was possible. See unix.stackexchange.com/a/190610/19694 where they mention nc would be better to use than ping as quite a few hosters disable ICMP as well.

I fail to see how I would get the duration with the code above. I tried it and the ‘duration’ for each line grew monotonically. Doesn’t TIMESTAMP have to be reset each time through the loop?

Читайте также:  Linux read file mode

one problem with this solution is, that some networks might block outgoing pings (my uni had a famous record for doing so). it doesn’t seem the be the case with the OP though.

Without wget

#!/bin/bash echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "Online" else echo "Offline" fi 

Install fping: > fewer problems than ping.

fping google.com | grep alive 
#!/bin/bash itest=$(fping google.com | grep alive) while [ "$itest" == "" ] do sleep 5 itest=$(fping google.com | grep alive) done echo now online 

Using the example above. I wrote this script to log the state of your connection: https://gist.github.com/cganterh/ffc2fffa8263857cbece

First, save the following code into a name.sh file.

#!/bin/bash while true do wget -q --tries=10 --timeout=20 -O - http://google.com > /dev/null if [[ $? -eq 0 ]]; then echo $(date) "1" | tee -a log.csv else echo $(date) "0" | tee -a log.csv fi sleep 5 done 

Then, execute name.sh file in terminal, and then check the log state information in log.csv of the same folder.

I decided to combine a few of the previous answers, so I could later create a plot showing ups, downs, and their durations:

#!/bin/bash # # pinger is a bash shell script that monitors the network # status every 15 seconds and records if it is up '1' or down '0' # into the file log.csv from whence it may be plotted. # # author: J. W. Wooten, Ph.D. # since: 11/12/2019 # version: 1.0 # TIMESTAMP=`date +%s` while [ 1 ] do nc -z -w 5 8.8.8.8 53 >/dev/null 2>&1 online=$? TIME=`date +%s` if [ $online -eq 0 ]; then echo "`date +%Y-%m-%d_%H:%M:%S_%Z` 1 $(($TIME-$TIMESTAMP))" | tee -a log.csv else echo "`date +%Y-%m-%d_%H:%M:%S_%Z` 0 $(($TIME-$TIMESTAMP))" | tee -a log.csv fi TIMESTAMP=$TIME sleep 15 done; 

This outputs to a CSV file every 15 seconds. Using Excel or Numbers, you can read the file and create a plot which will show when the Internet connection was not available and also the duration. If it changes from your sleep interval, then it is spending time trying to connect. I hope to add the ability to send me a text when it detects network is down next.

Источник

Настройка сети в Linux через конфиг-файлы, ч.1

Первое моё общение с Линуксом состоялось около шести лет назад. Тогда это был какой-то свежевышедший Red Hat, который мы с другом смогли установить, но при этом войти в него у нас так и не получилось.
Однако статья не об этом. Позже через мои руки и голову прошли почти все семейства дистрибутивов Linux, и везде я замечал свои подходы к автонастройке сети. И в этом цикле статей я постараюсь осветить наиболее популярные из них. Надеюсь, они будут полезны тем пользователям, которые пока ещё нажимают на кнопки и проставляют галочки в графических менеджерах настройки, но уже понимают, что это не true 🙂
Возможно познавательными эти статьи будут и тем, кто (не от большого знания) пишет свои скрипты управления сетью и помещает их в какой-нибудь rc.local

Читайте также:  Linux awk if else

Итак, в первой части речь пойдёт о семействе номер один, одном из самых обширных по числу дистрибутивов, Red Hat based.

DEVICE=lo
IPADDR=127.0.0.1
NETMASK=255.0.0.0
NETWORK=127.0.0.0
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

Не все параметры, перечисленные здесь являются обязательными. Зачастую чтобы задать интерфейс достаточно указать IPADDR и NETMASK. Параметр DEVICE необходим, если вы хотите, чтобы в имени скрипта после «ifcfg-» стояло не имя интерфейса, а какое-нибудь другое слово. Здесь же можно указывать такие параметры как GATEWAY, BOOTPROTO (static или dhcp), HWADDR (если есть желание изменить mac-адрес интерфейса) и так далее. Полный список возможных параметров зависит от типа поднимаемого интерфейса и дистрибутива. А, учитывая скудность официальной информации, его можно узнать и познать только перелопатив скрипты.

Такими конфиг-файлами можно задавать различные ppp-интерфейсы, ip-туннели, vlan’ы и так далее.

Следующий пример показывает настройку ipip-туннеля (ifcfg-tun0):
DEVICE=tun0
MY_OUTER_IPADDR=172.16.0.2
PEER_OUTER_IPADDR=192.168.0.1
MY_INNER_IPADDR=10.0.0.2
PEER_INNER_IPADDR=10.0.0.1
TYPE=IPIP
TTL=255

В этом примере мы, имея адрес 172.16.0.2, создаём туннель с машиной 192.168.0.1, указывая TTL=255, и присваиваем туннелю адрес 10.0.0.2 peer 10.0.0.1.

Не все знают, что помимо файлов ifcfg-* в этом же каталоге можно помещать соответствующие им файлы rule-* и route-*
Они нужны, соответственно, чтобы прописывать правила маршрутизации и сами маршруты ( ip rule, ip route ), например при использовании source-policy routing.

Для указанного выше туннеля эти файлы могут выглядеть так.

rule-tun0:
from 10.0.0.2 lookup mytable

route-tun0:
default dev tun0 table mytable
192.168.0.0/24 dev tun0

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

Ещё одна интересная возможность — автоматическое создание алиасов. Если у вас есть интерфейс eth0 с адресом 192.168.0.1, а вы хотите повесить ещё и 192.168.0.2, то достаточно создать файл ifcfg-eth0:1, куда вписать помимо вышеперечисленных параметров (IPADDR, NETMASK и так далее), ещё один — REALDEVICE=eth0.
Если же вдруг возникла необходимость в создании большого числа алиасов, а отдельные файлы для каждого создавать не хочется, то и тут есть выход: нас спасёт ifcfg-eth0-range, который может выглядеть так:
IPADDR_START=192.168.0.5
IPADDR_END=192.168.0.15
CLONENUM_START=3

Этот пример создаст интерфейсы eth0:3 — eth0:13 с адресами от 192.168.0.5 до 192.168.0.15.

Ну и, наконец, нельзя не упомянуть о каталогах ifup.d и ifdown.d, лежащих там же (в /etc/sysconfig/network-scripts).
В эти каталоги вы можете поместить свои файлы, которые будут выполняться при поднятии и опускании интерфейса. Вашим скриптам будет передан один параметр $1 — это имя интерфейса, который был поднят или опущен.

Имея сеть, настроенную по этим принципам, вы всегда можете поднять/опустить отдельный интерфейс командой ifup name (ifdown name), где name — это ваш интерфейс. Чтобы перезагрузить всю сеть, достаточно набрать service network reload.

Читайте также:  About vim editor in linux

Следующая часть будет посвящена не семейству, а одному дистрибутиву — Alt Linux. Несмотря на его прямые RedHat-корни, разработчики практически полностью заново написали всю систему управления сетью, которая получила имя etcnet и заслужила (на мой взгляд) более пристального внимания 🙂

Источник

15 Best Linux Networking Commands and Scripts You Should Know

15 Best Linux Networking Commands and Scripts You Should Know

Both servers and software development use Linux. Today, Linux distributions are used by the vast majority of electronics and embedded systems.

Worldwide, Linux servers make up about 90% of all internet servers. Additionally, the Linux kernel is used by around 80% of all smartphones.

Today, every system in the world is linked via a network. Information exchange across systems requires network connectivity.

Computer networking refers to communication over the internet as well as within a network. A network can be as tiny and basic as one in a home or as intricate as one in a space station.

Network configuration and troubleshooting are both parts of networking. We are learning about Linux networking commands in this article.

TL;DR

Linux Networking Commands Description
aria2 aria2 is a command line tool for downloading files in Linux. It is a lightweight alternative to wget and curl.
ifconfig Displays information about currently active network interface and is used to configure kernel-resident network interfaces.
traceroute This command is used to determine the route taken by packets to reach a specified host.
ping Measures the round-trip time for messages sent from the originating host to a destination computer that are echoed back to the source.
curl Helps in transferring data from or to a server without user interaction.
netstat It can be used to view information about active network connections, routing tables, port listening and a variety of other networking-related information.
nmap Nmap is a network exploration and security auditing tool. It can be used to identify hosts and services on a network, as well as security issues.
dig dig command can be used to query DNS information. With dig, you can find out a host’s IP address, MX record, and other DNS information.
bmon The bmon command in Linux is a network monitoring tool that can be used to check the status of your network connection. It can be used to monitor bandwidth usage, packet loss, and other network statistics.
dhclient The dhclient command is a network configuration utility that allows you to configure your system to use a dynamic IP address.
host This command allows users to query DNS records and perform other network-related functions.
iperf This command is used to measure the throughput of a network or the performance of a network device.
ncat ncat command is used for a variety of purposes, from port scanning to file transfers.
ss It is a CLI command that shows the network statistics

Источник

Оцените статью
Adblock
detector