全部TCP/UDPパケットをいったん別のソケットにリダイレクトする方が簡単だろ?
一旦正規のソケットに仲介させることで中身をいじるのは簡単になる

1.接続要求がきたら自分のListenポートに修正
2.本来のポートに普通にコネクションを張る
3.自分のソケットから本来のポートに対するパケットのソースアドレスを元に戻す
4.以後はそのパターンでソースとデスティネーションを書き換え続ける

これで完全に仲介したソケットが完成して、本来の接続プログラムが
リモホを参照してもちゃんと元のリモホとして認識されるはず
これでいけると思うんだけど間違ってるかな?
この方法で問題になるのが自分でconnectやacceptする部分であらかじめポート番号を決定できた方が都合がいいんだけど
Winsockってそういうことは可能なんだっけ?