По крайней мере в Unices и, например, где используются необработанные сокеты, это невозможно, поскольку пакет копируется в пространство пользователя, и вы работаете только с этой копией.Кроме того, отправка пакета обратно через необработанный сокет может рассматриваться как «исходящий» пакет, так что он фактически не повторно вводится во входной тракт, где он должен быть.Необработанные сокеты, в соответствии с man-страницей Linux, были разработаны для реализации новых протоколов, т. Е. Необработанные сокеты являются «конечной точкой», а не «проходной станцией».), каждая ОС имеет свой набор интерфейсов.В Linux (вы были не совсем точны в отношении того, на кого вы нацелены), это был бы механизм nfqueue, который можно использовать через libnetfilter_queue.И, конечно, именно так Wireshark, если бы он захотел (я не вижу, чтобы он делал изменение пакета в прошлый раз, когда я проверял), сделал бы это.