il group by serve a raggruppare e non a scegliere un valore che non hai nel raggruppamento (id_movimento) .... e poi il raggruppamento prende il primo record che trova fisicamente nella tabella che soddisfa la richiesta. la query va vista diversamente.

Prova ad esempio:

codice:
SELECT id_movimento, ip, mac, id_rete
FROM movimenti 
WHERE id_movimento IN(SELECT MAX(id_movimento)
                                FROM movimenti
                                group by id_rete, ip)
order by id_rete, ip
eventualmente cambia l'order by o il group by secondo il tuo bisogno.