> For the complete documentation index, see [llms.txt](https://alomancy.gitbook.io/guides/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://alomancy.gitbook.io/guides/cheat-sheets/bash-cheat-sheets/networking.md).

# Networking

## Networking

### **Resolve a domain to IP address(es)**

```
dig +short www.example.com

# or
host www.example.com
```

### **Get DNS TXT record a of domain**

```
dig -t txt www.example.com

# or
host -t txt www.example.com
```

### **Send a ping with a limited TTL to 10 (TTL: Time-To-Live, which is the maximum number of hops that a packet can travel across the Internet before it gets discarded.)**

```
ping 8.8.8.8 -t 10
```

### **Print the route packets trace to network host**

```
traceroute google.com
```

### **Check connection to host (e.g. check connection to port 80 and 22 of google.com)**

```
nc -vw5 google.com 80
# Connection to google.com 80 port [tcp/http] succeeded!

nc -vw5 google.com 22
# nc: connect to google.com port 22 (tcp) timed out: Operation now in progress
# nc: connect to google.com port 22 (tcp) failed: Network is unreachable
```

### **Nc as a chat tool!**

```
# From server A:
$ sudo nc -l 80
# then you can connect to the 80 port from another server (e.g. server B):
# e.g. telent <server A IP address> 80
# then type something in server B
# and you will see the result in server A!
```

### **Check which ports are listening for TCP connections from the network**

```
#notice that some companies might not like you using nmap
nmap -sT -O localhost

# check port 0-65535
nmap  -p0-65535 localhost
```

### **Check if a host is up and scan for open ports, also skip host discovery.**

```
#skips checking if the host is alive which may sometimes cause a false positive and stop the scan.
$ nmap google.com -Pn

# Example output:
# Starting Nmap 7.01 ( https://nmap.org ) at 2020-07-18 22:59 CST
# Nmap scan report for google.com (172.217.24.14)
# Host is up (0.013s latency).
# Other addresses for google.com (not scanned): 2404:6800:4008:802::200e
# rDNS record for 172.217.24.14: tsa01s07-in-f14.1e100.net
# Not shown: 998 filtered ports
# PORT    STATE SERVICE
# 80/tcp  open  http
# 443/tcp open  https
#
# Nmap done: 1 IP address (1 host up) scanned in 3.99 seconds
```

### **Scan for open ports and OS and version detection (e.g. scan the domain "scanme.nmap.org")**

```
$ nmap -A -T4 scanme.nmap.org
# -A to enable OS and version detection, script scanning, and traceroute; -T4 for faster execution
```

### **Look up website information (e.g. name server), searches for an object in a RFC 3912 database.**

```
whois google.com
```

### **Show the SSL certificate of a domain**

```
openssl s_client -showcerts -connect www.example.com:443
```

### **Display IP address**

```
ip a
```

### **Display route table**

```
ip r
```

### **Display ARP cache (ARP cache displays the MAC addresses of device in the same network that you have connected to)**

```
ip n
```

### **Add transient IP addres (reset after reboot) (e.g. add 192.168.140.3/24 to device eno16777736)**

```
ip address add 192.168.140.3/24 dev eno16777736
```

### **Persisting network configuration changes**

```
sudo vi /etc/sysconfig/network-scripts/ifcfg-enoxxx
# then edit the fields: BOOTPROT, DEVICE, IPADDR, NETMASK, GATEWAY, DNS1 etc
```

### **Refresh NetworkManager**

```
sudo nmcli c reload
```

### **Restart all interfaces**

```
sudo systemctl restart network.service
```

### **To view hostname, OS, kernal, architecture at the same time!**

```
hostnamectl
```

### **Set hostname (set all transient, static, pretty hostname at once)**

```
hostnamectl set-hostname "mynode"
```

### **Find out the web server (e.g Nginx or Apache) of a website**

```
curl -I http://example.com/
# HTTP/1.1 200 OK
# Server: nginx
# Date: Thu, 02 Jan 2020 07:01:07 GMT
# Content-Type: text/html
# Content-Length: 1119
# Connection: keep-alive
# Vary: Accept-Encoding
# Last-Modified: Mon, 09 Sep 2019 10:37:49 GMT
# ETag: "xxxxxx"
# Accept-Ranges: bytes
# Vary: Accept-Encoding
```

### **Find out the http status code of a URL**

```
curl -s -o /dev/null -w "%{http_code}" https://www.google.com
```

### **Unshorten a shortended URL**

```
curl -s -o /dev/null -w "%{redirect_url}" https://bit.ly/34EFwWC
```

### **Perform network throughput tests**

```
# server side:
$ sudo iperf -s -p 80

# client side:
iperf -c <server IP address> --parallel 2 -i 1 -t 2 -p 80
```

### **To block port 80 (HTTP server) using iptables.**

```
sudo iptables -A INPUT -p tcp --dport 80 -j DROP

# only block connection from an IP address
sudo iptables –A INPUT –s <IP> -p tcp –dport 80 –j DROP
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://alomancy.gitbook.io/guides/cheat-sheets/bash-cheat-sheets/networking.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
