Bash snippets - heathdbrown/research GitHub Wiki
curl -Iks https://www.google.com
-
-I
- show response headers only -
-k
- insecure connection when using ssl -
-s
- silent mode (not display body)
- Using ping with
&&
and||
for an action afterwards based on positive or negative.
ping 1.1.1.1 -c 3 && echo "It's UP" || echo "It's Down"
- replace first char with " and rewrite file
sed -i 's/^/"/g' file
- replace last char of line with ", and rewrite file
sed -i 's/$/",/g' file
- add line to bottom
sed -i "\$a]" file
- add line to top of file
sed -i "1 i[" file
- seq of numbers
seq 1 58
- for loop with seq
for i in $(1 58); do echo $i; done
- take list of devices with device number and create seperate batches with just devices
for i in $(seq 81 158); do cat all-batches | grep $i$ | awk '{print $1}' | tr [:upper:] [:lower:] > batch$i; done
- run a sequence cp files on success add " to each line then add ", to end of lines then remove the last ',' on the last line then add ] to the last line then add [ to the first line
for i in $(seq 81 158); do cp batch$i batch$i-upload && sed -i 's/^/"/g' batch$i-upload && sed -i 's/$/",/g' batch$i-upload && sed -i '$ s/.$//' batch$i-upload && sed -i "\$a]" batch$i-upload && sed -i "1 i[" batch$i-upload; done
- Remove the first character of a file and replace in place
sed -i "1s/^.//" file
- Remove last character of a file and replace in place
sed -i "$ s/.$//" file
- Print the last awk'd field
awk '{print $NF}'
- Print the first awk'd field
awk '{print $1}'
- ssh agent functions
SSH_ENV="$HOME/.ssh/environment"
function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add;
}
# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn't work under cywgin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
- Create a SSL certificate from a single line in bash for the correct format
(
echo "-----BEGIN CERTIFICATE-----";
echo $CERTIFICATE | sed -e "s/.\{67\}/&\n/g";
echo "-----END CERTIFICATE-----";
) > certificate.pem
- Flush Single Entry in ARP table
arp -d <IP>
- Flush Whole ARP Table
ip -s -s neigh flush all
- Compare two files with sorting without creating a new file and make two column output
diff <(foo) <(bar) -y
- nmap ping scan only
nmap -sn -PE <target>
- Test Port without nmap or telnet
nc -v -z -w1 <target> <port>
- Print 1st column data
cat <file> | awk '{print $1}'
-
Network Tools
- nethogs
- bmon
- iftop -i eth0
- netstat
- ss
-
tcpdump for top talkers based on source
tcpdump -tnnr 2016-02-02.pcap | awk -F "." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | head
- Grep, awk, sed, uniq for returning unique parameters
cat <file> | grep <text> | awk '{print $1}'| sed s/[[0-9]*]//g | uniq
Consider using the application gf which takes standard grep patterns and makes it easier to apply and remember them with simple syntax.
- Grep for RFC1918 IP addresses
grep -P "(10.|192.168|172.1[6-9].|172.2[0-9].|172.3[01].).* "
- Grep for IP addresses (invalid|valid)
grep -oE "([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})"
- Wget timestamping as per Lars Appel - wget
# downloads files from site with 'last modified' timestamps
wget -S http://www.gnu.ai.mit.edu/
# Reattempt to download later and it checks the last-modified headers against the local last modified dates
wget -N http://www.gnu.ai.mit.edu/
- Wget process for grabbing cookies for authentication and saving cookies
# for authenticated website using cookies
wget --keep-session-cookies --save-cookies cookies.txt --post-data 'username=<username>&password=<password>' http://<target>/path/to/login
- Load saved cookies and use recursive to download
wget --load-cookies cookies.txt -r -p http://<target>/path/
- If manual load of cookie does not work manual method to set cookies in wget
# if cookie does not work manual load of cookies
wget --no-cookies --header "Cookie: <cookieid>="<cookie value>" -r -p http://<target>/path/
- Use a loop of a list of domain and enumerate all file links.
for domain in `cat domain-list.txt`; do wget -r --no-parent --spider -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183" https://$domain 2>&1 | tee $domain.log
- To make this easier you can create a function and then call that function instead of the giant command
# vim ~/.bashrc
function wgetspider {
wget -r --no-parent --spider -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183" https://$1 2>&1 | tee $1.log
}
- Gathering all urls from the $1.log
cat '^---' $1.log | awk '{print $NF}' | sort | uniq > urls.txt