101 lines
3.3 KiB
Markdown
101 lines
3.3 KiB
Markdown
Here's a concise reference guide for using `curl` to retrieve public IP and device information through various online services. This guide also includes some advanced use cases for integrating these commands into broader workflows.
|
|
|
|
### Basic Commands
|
|
|
|
#### **Get Public IP Address**
|
|
- **Plain IP Address**:
|
|
- Command: `curl ifconfig.me`
|
|
- Output: Just your public IP address in plain text.
|
|
- **Detailed IP and Connection Info**:
|
|
- Command: `curl ipinfo.io/json`
|
|
- Output: JSON-formatted details including IP, location, ISP, and more.
|
|
|
|
#### **Alternative Services**
|
|
- **Icanhazip**:
|
|
- Command: `curl icanhazip.com`
|
|
- Description: Returns the IP address in plain text.
|
|
- **Ifconfig.co**:
|
|
- Command: `curl ifconfig.co/json`
|
|
- Description: Provides detailed JSON output similar to ipinfo.io.
|
|
|
|
### Advanced Use Cases
|
|
|
|
#### **1. Logging IP Changes**
|
|
Track changes in your public IP address over time, useful for dynamic IP users:
|
|
```bash
|
|
#!/bin/bash
|
|
CURRENT_IP=$(curl -s ifconfig.me)
|
|
LOG_FILE="ip_change_log.txt"
|
|
|
|
if [ ! -f $LOG_FILE ]; then
|
|
echo "Starting IP: $CURRENT_IP" > $LOG_FILE
|
|
fi
|
|
|
|
LAST_IP=$(tail -n 1 $LOG_FILE | cut -d ' ' -f 3)
|
|
|
|
if [ "$CURRENT_IP" != "$LAST_IP" ]; then
|
|
echo "$(date): IP changed to $CURRENT_IP" >> $LOG_FILE
|
|
fi
|
|
```
|
|
|
|
#### **2. Conditional Actions Based on IP Location**
|
|
Perform actions based on the geographical location of your IP:
|
|
```bash
|
|
#!/bin/bash
|
|
IP_INFO=$(curl -s ipinfo.io/json)
|
|
COUNTRY=$(echo $IP_INFO | jq -r '.country')
|
|
|
|
if [ "$COUNTRY" == "US" ]; then
|
|
echo "Execute tasks specific to US"
|
|
# Add commands here
|
|
else
|
|
echo "Outside US: actions taken will differ"
|
|
# Different commands here
|
|
fi
|
|
```
|
|
|
|
#### **3. Combining IP Data with Network Diagnostics**
|
|
Combine IP information retrieval with local network diagnostics for comprehensive reports:
|
|
```bash
|
|
#!/bin/bash
|
|
echo "Gathering Network Info..."
|
|
PUBLIC_IP=$(curl -s ifconfig.me)
|
|
PING_RESULT=$(ping -c 4 example.com)
|
|
|
|
echo "Public IP: $PUBLIC_IP"
|
|
echo "Ping Test Results:"
|
|
echo "$PING_RESULT"
|
|
```
|
|
|
|
#### **4. Scheduled IP Check with Notifications**
|
|
Use `cron` to schedule regular IP checks and send notifications if the IP changes (Linux):
|
|
```bash
|
|
# Add this script to cron jobs (crontab -e)
|
|
* */6 * * * /path/to/ip_check_script.sh
|
|
```
|
|
The script could use system notifications or email to alert you to changes.
|
|
|
|
### Considerations
|
|
|
|
- **Privacy**: Be cautious with how and where you use these services, as you are revealing your IP to them.
|
|
- **Rate Limiting**: Frequent requests to these services may be rate-limited. Use responsibly.
|
|
- **Dependence on External Services**: These commands depend on external websites, which might change their output format or availability.
|
|
|
|
This guide should serve as a comprehensive starting point for both basic and advanced usage of `curl` for IP and network-related tasks. Adjust and expand based on your specific requirements and environment.
|
|
|
|
```bash
|
|
curl -I "https://prod-grants-gov-chatbot.s3.amazonaws.com/extracts/GrantsDBExtract$(date +\%Y\%m\%d)v2.zip"
|
|
```
|
|
```bash
|
|
watch -n 1 'ls -l /home/medusa/grants_extracts/; tail -n 5 /home/medusa/cron.log'
|
|
```
|
|
|
|
```bash
|
|
# Simulate running at 03:30 CDT (before release):
|
|
TZ="$SERVER_TZ" date -d "2025-08-02 03:30" +%H && ./download_grants.sh
|
|
# Should fetch yesterday's file
|
|
|
|
# Simulate 03:45 CDT (after release):
|
|
TZ="$SERVER_TZ" date -d "2025-08-02 03:45" +%H && ./download_grants.sh
|
|
# Should fetch today's file
|
|
``` |