Hi everyone,
I can 100% confirm siGht's and
Frommelgoal's posts above. In fact, I may be very near to a solution, I'll hopefully know in the next few days.
I've gone through a number of steps which I will outline below.
I used the wonderful GPL Packet Sniffer "Ethereal" (
http://www.ethereal.com/) to listen and record packets when starting games of PES4 with a friend where I could be HOST and he could be CLIENT and we could have a successful game. We only noticed the problem when we tried to reverse roles, him as HOST, me as CLIENT and the game would not start. This, it turned out when I read lots of forums, is a common problem.
Okay, so what do I know about packets sent during PES4 connection:
1) Person as HOST: when waiting for a game the prog simply sits and waits for a CLIENT to connect. Does not seem to send out any packets.
2) Person as CLIENT:
i) when trying to connect client sends UDP packets TO (this is the important part) destination port 5739 at the host IP address entered. (You can use ethereal to test this and use a bogus IP address... PES4 will still try to connect and send UDP packets). As a test I ran the game settings link in the start menu (not the in-game settings) and changed the UDP port. Whatever I changed the UDP port to, the UDP packet is sent TO that port on the destination machine. So far so good.
ii) BUT: When looking at the packets ethereal recorded there was a problem. Every UDP packet was headed to the correct IP address on the correct port (UDP 5739) but the SOURCE of the packet on the client machine was a different UDP port. Even crazier, was the fact that each time the connection failed (or was cut) and then an attempt was made to reconnect, the CLIENT program used a COMLETLEY DIFFERENT SOURCE PORT (re-inforcing siGht's observations).
Also, for each new connection tried (without quitting PES4) the UPD port changes by going up in small increments... ie one game it would be something like (and I am making these ports up as I don't have the ethereal output in front of me) 6031 and then the next try to connect (after that one failed) would be on 6035.
If the CLIENT's game was shut down, and then restarted it would be a dramatically different port (like 8050 or something) and then for each try would once again increment up. I will refer to this changing port as PORT X.
-----
Okay, so what ramifications does this have for successful connection? Well, if you are not behind a router and use no firewall or a software firewall you can tell it to autodetect and allow all ports in and out that PES4 wants to use and you have no problems (ie, people NOT behind routers often have no problem joinng or hosting).
BUT if you are behind a router then you MUST configure the ports specifically for each game. This is why enabling DMZ works for some people, as the router passes all traffic along, rather than processing it against the firewall rules. The DMZ option allows the local machine to deal with blocking or allowing specific ports. Although we know that enabling DMZ still does not work for everyone.
SO, to get things to work (in theory):
a) The CLIENT needs to be able to SEND TO port 5739 on the HOST. This means if you are behind a router you need to ensure the OUTGOING PORT udp 5739 is open.
b) The CLIENT needs to be able to RECEIVE udp packets on PORT X (and possibly port 5739 as well, i got some weird results with ethereal that could be the initial gamestart 'handshake'.. so I need to check this). This means if you are behind a router you need to open INCOMING PORT X (and possibly port 5739) to allow incoming packets from the HOST to reach you on your weird random port x.
c) The HOST needs to be able to RECEIVE packets on port 5739 from the CLIENT. This means if you are behind a router you need to ensure the INCOMING PORT udp 5739 is open.
d) The HOST needs to be able to SEND udp packets TO PORT X (and possibly port 5739). This means if you are behind a router you need to open PORT X (and possibly port 5739) to allow OUTGOING packets from the HOST to reach PORT X on the client.
It becomes very clear that for a successful game behind routers PORT X must be known , and not only that, be allowed every game!!!
To make matters worse, if you set up ethereal to sniff packets during gamestart, you'll find there is a finite time before the client times out and stops trying to connect. If by this time the router(s) have not been configured you'll need to do it all over again as the client source port will change upon the next time you try to connect.
The other problem, is that in trying this (and I have only tried once) we ran into other problems, so we didn't get to thoroughly test this.
siGht's idea to open a range of ports is a good one, and will help to cater for the mystical PORT X, but it is not ideal from a security perspective.
There is ONE other option that I am testing tight now, and that is using packet tunneling software to set up a VPN to forward a range of udp ports through ONE KNOWN PORT. I have not done extensive testing yet, but it looks promising!
NOTE:
I tested the packets of some other games I own that only require one port to be open for netplay to occur. This was to ensure that for these games, they only require the use of one port. As I expected, the SOURCE and DESTINATION ports for all the packets were the same.
THUS, I come to the conclusion that either KONAMI have no idea about PC network gaming and the importance of forwarding the CORRECT port...
OR...
there is a massive bug in their code that causes the client's source port (PORT X) to be random (well, not random, the way that it increments suggests that some variable within the game code is being modified in a consistent [even if unintended] manner).
I'd say the reason this has gone unnoticed by KONAMI (even after the bug has been reported) is because in-house testing does not need to worry about opening or closing specific ports on their internal network, it will seem to work until you need to forward packets when behind a router.
I'll let you all know about how the port tunnel stuff goes this weekend. In the meantime, if anyone knows someone on the PES4 team over at KONAMI can you let them know about all of this for me?!
Cheers,
Hali