Navigate to http://get.udid.io/ from Safari on your iOS device. It works like a charm and requires neither iTunes nor any other computer. No app installed either.
EDIT:
Also, have a look at Getting a device UDID from .mobileconfig if you (understandably) would rather have this .mobileconfig certificate hosted on a server of yours.
MAKE YOUR OWN:
Have a copy of the .mobileconfig example hosted on your server and write 2-3 small scripts in your favorite language to handle the following flow:
- Navigate on Safari to a URL redirecting to enroll.mobileconfig below. This makes iOS open the Settings app and show the profile.
- Upon accepting the profile, iOS switches back to Safari and posts the DeviceAttributes array to the URL specified enroll.mobileconfig.
- The POST data will contain a .plist file with the requested attributes (see example below). One of which will be the holy UDID.
Remark: You should probably have some user friendly messages. Specifically, we even have a step 0. where the user is asked to provide their name and e-mail that we store temporarily in the HTTP session and then redirect the request to the mobileconfig profile. We ultimately match this info with the iPhone data and send a friendly confirmation e-mail. HTH.
enroll.mobileconfig
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<dict>
<key>URL</key>
<string>http://support.devcorp.com/uuid/returnurl/</string>
<key>DeviceAttributes</key>
<array>
<string>DEVICE_NAME</string>
<string>UDID</string>
<string>PRODUCT</string>
<string>VERSION</string>
<string>SERIAL</string>
</array>
</dict>
<key>PayloadOrganization</key>
<string>DevCorp Inc.</string>
<key>PayloadDisplayName</key>
<string>Profile Service</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>C5FB9D0D-0BE7-4F98-82CC-5D0EA74F8CF8</string> <!-- any random UUID -->
<key>PayloadIdentifier</key>
<string>com.devcorp.profile-service</string>
<key>PayloadDescription</key>
<string>This is a temporary profile to enroll your device for ad-hoc app distribution</string>
<key>PayloadType</key>
<string>Profile Service</string>
</dict>
</plist>
sample .plist POSTed by the iPhone to the given URL
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PRODUCT</key>
<string>iPhone4,1</string>
<key>SERIAL</key>
<string>DNPGWR2VCTC0</string>
<key>UDID</key>
<string>b01ea7bc2237fed21bfe403c6d2b942ddb3c12c3</string>
<key>VERSION</key>
<string>11A465</string>
</dict>