Я хочу слушать только один порт
Вы можете сделать это с помощью сниффера. Просто игнорируйте пакеты из разных портов.
Возможно, мне потребуется остановить отправку некоторых определенных пакетов, потому что моя программа отправит его вместо исходного приложения
Хорошо, здесь я предлагаю вам отказаться от снифферов и использовать технику MITM .
Вам нужно будет полагаться на правило брандмауэра PREROUTING, чтобы перенаправлять пакеты в приложение " proxy ". Предполагая, что UDP, Linux, iptables и « proxy » работают на одном хосте, вот что на самом деле нужно сделать « proxy »:
1. Добавьте правило брандмауэра к divert пакетам (сделайте это вручную, если хотите):
iptables -t nat -A PREROUTING -i <iface> -p <proto> --dport <dport>
-j REDIRECT --to-port <newport>
2. Bind and listen on <newport>
.
3. Ретрансляция всего трафика между 2 конечными точками (клиент и исходный пункт назначения). Если вы используете « proxy » на другом хосте, используйте getsockopt с SO_ORIGINAL_DST
для получения исходного адреса назначения.
Это может звучать сложно, но ... да, это потому, что это немного сложно :-)
Обратитесь к документации вашего брандмауэра, если мои предположения расходятся.