In a PHP code, ping the client IP and track that, or even better, send them a predetermined sized .CSS file, and track it how long it takes to send it using microtime().
use flash and time the amount of time it takes to load a 50K flash file
If they are on 56k, and lucky, in practice it will take about 9 secs (4.5 secs for the ISDN user) to download the flash file. I am not sure a lot of these users wait that long to see what's going to happen. In my experience flash is a real turnoff for 56k/128k users.
Asking the user their connection type seems to work ok and it is easier on the user than timing downloading a file which I think is the only other practical solution.