I've been fiddling with low level networking for the past few weeks and wanted to try it on my ESP module but I've run into a bit of a bump.
What I would like to do is listen on the WiFi interface for all packets, not just those intended for the ESP module.
This is different from the promiscuous mode I've read about in relation to the ESP which seems to be for sniffing an entirely different thing.
With this code:
netif_input_fn OriginalInputFn = NULL;
struct EtherFrame {
uint8_t DestMAC[ 6 ];
uint8_t SourceMAC[ 6 ];
uint16_t LengthOrType;
} __attribute__( ( packed ) );
int MACsprintf( const uint8_t* MAC, char* Buffer, size_t BufferLength ) {
return snprintf( Buffer, BufferLength, "%02X:%02X:%02X:%02X:%02X:%02X", MAC[ 0 ], MAC[ 1 ], MAC[ 2 ], MAC[ 3 ], MAC[ 4 ], MAC[ 5 ] );
}
err_t MyInputFn( struct pbuf* p, struct netif* inp ) {
struct EtherFrame* FrameHeader = ( struct EtherFrame* ) p->payload;
static char Text[ 1024 ];
char SourceMAC[ 32 ];
char DestMAC[ 32 ];
uint16_t Type = 0;
MACsprintf( FrameHeader->SourceMAC, SourceMAC, sizeof( SourceMAC ) );
MACsprintf( FrameHeader->DestMAC, DestMAC, sizeof( DestMAC ) );
Type = ( ( FrameHeader->LengthOrType >> 8 ) & 0xFF ) | ( ( FrameHeader->LengthOrType << 8 ) & 0xFF00 );
snprintf( Text, sizeof( Text ), "%s: Source: %s Dest: %s Type: %04X\n", __FUNCTION__, SourceMAC, DestMAC, Type );
Serial.print( Text );
return OriginalInputFn( p, inp );
}
....
void setup( void ) {
struct netif* ESPif = NULL;
int i = 0;
Serial.begin( 115200 );
while ( ! Serial.availableForWrite( ) )
yield( );
for ( i = 0; i < 32; i++ ) {
Serial.write( 0 );
delay( 1 );
}
Serial.println( "\nReady..." );
do {
IsConnectedToWiFi = ConnectToWiFi( 10000 );
} while ( ! IsConnectedToWiFi );
Serial.println( " Connected!" );
Serial.print( "Local IP: " );
Serial.println( WiFi.localIP( ) );
/* DebugPort.begin( ); */
if ( ( ESPif = eagle_lwip_getif( 0 ) ) != NULL ) {
Serial.println( "Got ESP IF\n" );
OriginalInputFn = ESPif->input;
ESPif->input = MyInputFn;
}
}
I am able to see some raw ethernet frames, but obviously none that aren't intended for the ESP.
Is it at all possible to put the connected WiFi interface into promiscuous mode so I can receive and send whatever I would like on the ethernet layer?
From what I've read it's not looking too good
Thank you for any input you might have.