Пожалуйста, не критикуйте решение. Это не мой дизайн и да, это отстой.
На компьютере под управлением Linux и с использованием C нам необходимо убедиться, что TCP-соединение с процессом установлено на той же машине. Делать это по IP-адресу проблематично, так как ОС генерирует два IP-адреса, а процесс знает только один. В любом случае, проверка по IP-адресу немного плоха.
Мы хотим выполнить проверку, сравнив «удаленный» MAC-адрес с локальным MAC-адресом. Мы уже получили локальный MAC-адрес. Все, что мне нужно знать, это как получить «удаленный» MAC-адрес. Он находится в пакете, который отправляется при формировании соединения (и во всех последующих). Как мы вытаскиваем его из слоя Ethernet?
Прежде чем кто-либо скажет это снова, я ЗНАЮ, что вы не можете получить MAC-адрес удаленного хоста, если он не находится в той же подсети / локальной сети. Все в порядке. Предположительно, мы получим что-то вроде 00: 00: 00: 00: 00: 00, и, поскольку он отличается от локального MAC-адреса, он будет другим - именно то, что мы хотим.
-
Итак, подведем итог: у нас есть сокет TCP-соединения fd, мы получили пакет данных, как нам найти MAC-адрес удаленного хоста, MAC-адрес, который был в заголовке пакета?