diff --git a/projects/curl.md b/projects/curl.md new file mode 100644 index 0000000..eba4c23 --- /dev/null +++ b/projects/curl.md @@ -0,0 +1,84 @@ +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. \ No newline at end of file