Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A proposed idea for the networking items #11411

Open
girls-whocode opened this issue Dec 28, 2022 · 2 comments
Open

A proposed idea for the networking items #11411

girls-whocode opened this issue Dec 28, 2022 · 2 comments
Labels
Area: plugin Issue or PR related to a plugin Feature New feature or request

Comments

@girls-whocode
Copy link

girls-whocode commented Dec 28, 2022

If the feature request is for a plugin or theme, specify it here.

Networking

I really like the items you have for checking different network items, I am building a modular script called ezsh that takes many different items that I have used throughout my SA roles, and finding others on the net. I came across yours and would like to add many of your functions to my script as well.

My changes

I am trying to make this system as functional compact as possible, so here is what I did with your script. (I may change it to use case instead of if, but everything works great.

#!/bin/zsh
# https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/systemadmin/systemadmin.plugin.zsh

function retlog() {
  if [[ -z ${1} ]];then
    if [[ -f /var/log/nginx/access.log ]]; then
      echo '/var/log/nginx/access.log'
    elif [[ -f /var/log/httpd/access.log ]]; then
      echo '/var/log/httpd/access.log'
    elif [[ -f /var/log/apache/access.log ]]; then
      echo '/var/log/apache/access.log'
    else
      printf "%s" "Could not find web server access log, specify its location"
      exit 127
    fi
  else
    echo ${1}
  fi
}

ip() {
  # gather external ip 4 address
  if [[ "${1}" == "external4" ]] || [[ "${1}" == "external" ]]; then
    curl -s -S -4 https://icanhazip.com
  # gather external ip 6 address
  elif [[ "${1}" == "external6" ]]; then
    curl -s -S -6 https://icanhazip.com
  # determine local IP address(es)
  elif [[ "${1}" == "internal" ]]; then
    if (( ${+commands[ip]} )); then
      ip addr | awk '/inet /{print $2}' | command grep -v 127.0.0.1
    else
      ifconfig | awk '/inet /{print $2}' | command grep -v 127.0.0.1
    fi
  else
    if [ -t 1 ]; then
      command ip -c "$@"
    else
      command ip "$@"
    fi
  fi
}

# Sort connection state
connections() {
  local ezsh_conn_count
  if [[ ${1} == "80" ]]; then
    # View all 80 Port Connections
    netstat -nat|grep -i ":80"|wc -l
  elif [[ ${1} == "404" ]]; then
    # Statistical connections 404
    awk '($9 ~/404/)' "$(retlog[@])" | awk '{print $9,$7}' | sort
  elif [[ ${1} == "ip" ]]; then
    # On the connected IP sorted by the number of connections
    netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
  elif [[ ${1} == "req" ]]; then
    # top20 of Find the number of requests on 80 port
    if [[ "${2}" == "" ]]; then
      ezsh_conn_count=20
    else
      ezsh_conn_count=${2}
    fi
    netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n ${ezsh_conn_count}
  elif [[ ${1} == "tcp4" ]]; then
    # top20 of Using tcpdump ip 4 port 80 access to view
    if [[ "${2}" == "" ]]; then
      ezsh_conn_count=20
    else
      ezsh_conn_count=${2}
    fi
    curl -s -S -4 https://icanhazip.com
    sudo tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -n ${ezsh_conn_count}
  elif [[ ${1} == "tcp6" ]]; then
    # top20 of Using tcpdump ip 6 port 80 access to view
    if [[ "${2}" == "" ]]; then
      ezsh_conn_count=20
    else
      ezsh_conn_count=${2}
    fi
    curl -s -S -6 https://icanhazip.com
    sudo tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -n ${ezsh_conn_count}
  elif [[ ${1} == "wait" ]]; then
    # top20 of Find time_wait connection
    if [[ "${2}" == "" ]]; then
      ezsh_conn_count=20
    else
      ezsh_conn_count=${2}
    fi
    netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n ${ezsh_conn_count}
  elif [[ ${1} == "syn" ]]; then
    # top20 of Find SYN connection
    if [[ "${2}" == "" ]]; then
      ezsh_conn_count=20
    else
      ezsh_conn_count=${2}
    fi
    netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr|head -n ${ezsh_conn_count}
  elif [[ ${1} == "proc" ]]; then
    # Printing process according to the port number
    netstat -ntlp | grep "${1:-.}" | awk '{print $7}' | cut -d/ -f1
  elif [[ ${1} == "access" ]]; then
    # top10 of gain access to the ip address
    if [[ "${2}" == "" ]]; then
      ezsh_conn_count=10
    else
      ezsh_conn_count=${2}
    fi
    awk '{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}' "$(retlog[@])"
  elif [[ ${1} == "visits" ]]; then
    # top20 of Most Visited file or page
    if [[ "${2}" == "" ]]; then
      ezsh_conn_count=20
    else
      ezsh_conn_count=${2}
    fi
    awk '{print $11}' "$(retlog[@])"|sort|uniq -c|sort -nr|head -n ${ezsh_conn_count}
  elif [[ ${1} == "pages" ]]; then
    # top100 of Page lists the most time-consuming (more than 60 seconds) as well as the corresponding page number of occurrences
    if [[ "${2}" == "" ]]; then
      ezsh_conn_count=100
    else
      ezsh_conn_count=${2}
    fi
    awk '($NF > 60 && $7~/\.php/){print $7}' "$(retlog[@])" |sort -n|uniq -c|sort -nr|head -n ${ezsh_conn_count}
  elif [[ ${1} == "traffic" ]]; then
    # Website traffic statistics (G)
    awk "{sum+=$10} END {print sum/1024/1024/1024}" "$(retlog[@])"
  elif [[ ${1} == "status" ]]; then
    # Statistical http status.
    awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}' "$(retlog[@])"
  else
    netstat -nat | awk '{print $6}'|sort|uniq -c|sort -rn
  fi
}

If the feature solves a problem you have, specify it here.

Describe the proposed feature.

With the code written that way, I now have 2 commands ip and connection, with an added argument

ip external || ip external4 || ip external6 || ip a, etc
connection [[options]]

I hope you like it, and are free to use it if you like.

Describe alternatives you've considered

No response

Additional context

No response

Related Issues

No response

@girls-whocode girls-whocode added the Feature New feature or request label Dec 28, 2022
@mcornella
Copy link
Member

Hi Jessica, sorry for the delay. That seems like a nice addition, care to submit a PR?

@mcornella mcornella added the Area: plugin Issue or PR related to a plugin label Apr 4, 2023
@girls-whocode
Copy link
Author

Sure that sounds great, let me get on that

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: plugin Issue or PR related to a plugin Feature New feature or request
Projects
Status: Backlog
Development

No branches or pull requests

2 participants