So what you want is not the Ethernet signaling but knowing if the internet is reachable or not...
This is something computers or smartphones do ➜ when checking if the internet is up, many systems (like Google Chrome, Android, Windows, Apple, ...) contact a lightweight, highly available URL that returns a known small response.
For Google services, the typical URL used is
http://www.gstatic.com/generate_204
or in some cases
http://clients3.google.com/generate_204.
These URLs return an HTTP 204 No Content response, which allows the device to detect connectivity without downloading a full page
you could ping this service like once every minute (Google won't likely worry about that) to see if the Internet is reachable
may be some code like this would do
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);
EthernetClient client;
const char server[] = "www.gstatic.com";
const int port = 80;
unsigned long lastCheck = 0;
const unsigned long interval = 60000ul; // 60 seconds in ms = 1 minute
const int redLedPin = 2;
const int greenLedPin = 3;
void setup() {
pinMode(redLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, LOW);
Ethernet.begin(mac, ip);
delay(1000);
}
void loop() {
unsigned long now = millis();
if (now - lastCheck >= interval) {
lastCheck = now;
bool connected = false;
if (client.connect(server, port)) {
client.println("GET /generate_204 HTTP/1.1");
client.println("Host: www.gstatic.com");
client.println("Connection: close");
client.println();
while (client.connected() && !client.available()) delay(1);
if (client.available()) {
String line = client.readStringUntil('\n');
if (line.indexOf("HTTP/1.1 204") >= 0) {
connected = true;
}
}
client.stop();
}
if (connected) {
digitalWrite(greenLedPin, HIGH);
digitalWrite(redLedPin, LOW);
} else {
digitalWrite(greenLedPin, LOW);
digitalWrite(redLedPin, HIGH);
}
}
}