pour le matériel:
ArduinoEnc28J60StereoMegaTwoWired
light
do nothing
proof of concept ; watch throughput
pourrait servir à observer le trafic entre deux boites noires, voir
SondeEthernet
// framework "man in the middle"
// http://antiguide.free.fr/wiki/wakka.php?wiki=ArduinoEnc28J60StereoManInTheMiddleFrame
// Ethercard is cloned yo EtherCard_bis, all elements sufixed _bis!
#include <EtherCard.h>
#include <EtherCard_bis.h>
// TWO mac address to & from terminals
// my private values!
byte VOSTROMAC[6] = { 0,0x24,0xE8,0xE6,0xEE,0x85};
byte ACERMAC[6]={00,0x24,0x21,7,0x8E,0x25};
byte FREEBOXMAC[6]={00,0x24,0xD4,A7,0xd9,0xC9};
byte IPDUMMY[4]={0,0,0,0};
#define PINCSZOMBIE 49
#define PINCSLAN 53
#define LENBUFFER 1800 // more than max windows tcp
byte ENC28J60::buffer[LENBUFFER];
byte ENC28J60_bis::buffer[LENBUFFER];
int qreceivedfromzombie=-1;
int qreceivedfromlan=-1;
int success=0;
void setup () {
Serial.begin(9600);
Serial.println("[TCP-Pass-Through_(manInTheMiddle)]");
digitalWrite(10,HIGH);
Serial.print( "Access Ethernet controller... on pin ");
Serial.print(PINCSZOMBIE);
// if (ether.begin(sizeof ENC28J60::buffer, mymaczombie,PINCSZOMBIE) == 0) {
if (ether.begin(sizeof ENC28J60::buffer, ACERMAC,PINCSZOMBIE) == 0) {
Serial.println( " Failed!");
return;
}
Serial.println( "Success.!");
Serial.print( "Access Ethernet controller... on pin ");
Serial.print(PINCSLAN);
if (ether_bis.begin(sizeof ENC28J60_bis::buffer, VOSTROMAC,PINCSLAN) == 0) {
Serial.println( " Failed!");
return;
}
Serial.println( " Success.!");
// zombie
memcpy(ether.myip,IPDUMMY,4);
memcpy(ether.mymask,IPDUMMY,4);
memcpy(ether.gwip,IPDUMMY,4);
memcpy(ether.dnsip,IPDUMMY,4);
//lan
memcpy(ether_bis.myip,IPDUMMY,4);
memcpy(ether_bis.mymask,IPDUMMY,4);
memcpy(ether_bis.gwip,IPDUMMY,4);
memcpy(ether_bis.dnsip,IPDUMMY,4);
success=1;
}
//---------------------------------------------------------------
// --------------------------------------------------------------
void loop () {
if (!success) return;
// ------------------------- get onr ZOMBIE
qreceivedfromzombie= ether.packetReceive();
if (qreceivedfromzombie>0) {
// put on lan
ether_bis.sendEthernet((char *)ether.buffer,qreceivedfromzombie);
return;
}
// get on lan
qreceivedfromlan= ether_bis.packetReceive();
if (qreceivedfromlan>0) {
// put on Zombie
ether.sendEthernet((char *)ether_bis.buffer,qreceivedfromlan);
}
}