Internet Radio Stations
by -theJestre- (jestre@usa.net)
A new phenomenon is becoming increasingly popular on the Net: Internet radio stations.
Some of the benefits to these stations are that they can reach a far broader audience than a traditional FM transmitter (anyone with Internet access can listen), and the FCC isn't regulating them because they don't use radio waves. I would like to give some basic information on these because I haven't seen much documentation and they could be useful to further link the underground hacker culture together.
The main company propelling these stations is RealNetworks. They make the RealPlayer, RealServer, etc. and use streaming media techniques. Their software is very buggy, but there isn't much of an alternative. Because this is a new frontier so to speak, most people, including RealNetworks' tech support people, don't fully understand all the details. I am the webmaster for one of these stations and have found that most everyone has a lot of trouble setting them up and making them work.
Right now a majority of the Internet radio stations use one of two main Real servers, the new RealServer G2 or the RealServer 5.x. If you have the RealPlayer (downloadable from www.real.com) you will notice it has a list of presets. All of these presets are required to use the RealServer G2 (even though some of them don't). The RealServer G2 has an interesting feature that the older servers don't: a web-based Java monitor and control center. This control center can usually be accessed by opening the web page:
http://realservername.example.com:PORT/admin/index.htmlWhere realservername is the name of the computer the RealServer is on, and example.com is the domain of the radio's web site. You can also replace everything in front of :PORT with the IP address.
There are a few barriers that one must go through if they want to access the control center, though. First off, you have to know the port number. In the G2 betas the default is usually 8080 but sometimes 9090.
The full G2 version, however, picks a (somewhat) random port value during the installation usually in the 6000s like 6336. The port isn't the hardest thing to figure out if you do a port scan from 6000 - 8000, but the next obstacle is a little trickier. It will ask for a username and password.
The default username is Administrator and the default password is letmein. Any competent administrator will change this quickly, but I'm sure someone out there has left the default settings alone.
If you can gain access to the server the password is encrypted and stored in a file called rmserver.pswd and usually located in Program Files\Real\RealServer or a similar directory. Sometimes the password can also be found in the configuration file rmserver.cfg. The config file is written in XML so if the password is there then you don't have to deal with the encrypted file.
<!-- S Y S T E M --> <Var ProcessorCount="1"/> <!-- P A T H S --> <Var LogPath="/var/hsphere/rmserver/rmaccess.log"/> <Var ErrorLogPath="/var/hsphere/rmserver/rmerror.log"/> <Var PidPath="/var/hsphere/rmserver/rmserver.pid"/> <Var PluginDirectory="/hsphere/shared/RealServer/Plugins"/> <Var SupportPluginDirectory="/hsphere/shared/RealServer/Lib"/> <Var LicenseDirectory="/hsphere/shared/RealServer/License"/> <!-- P O R T S --> <!--UNIX customers must have root privileges to execute the server --> <!--with the RTSP port set to 554. --> <!--The following are the default ports that RealPlayer and --> <!--RealPlayer Plus clients will connect to for an URL that has --> <!--no port specified: --> <!-- RTSP: 554 --> <!-- PNM: 7070 --> <!-- HTTPs : 80 (...then 8080 if 80 is unavailable) --> <Var RTSPPort="554"/> <Var PNAPort="7070"/> <Var HTTPPort="8080"/> <Var MonitorPort="9090"/> <Var AdminPort="27781"/> <!-- P A S S W O R D S --> <Var MonitorPassword="123456"/> <!-- A L L O W A N C E --> <Var ValidPlayersOnly="0"/> <Var EnableCookieBasedIDs="0"/> <!-- L O G G I N G --> <Var LoggingStyle="5"/> <Var StatsMask="3"/> <!-- L I V E A R C H I V I N G --> <List Name="LiveArchive"> <List Name="*"> <Var TargetDirectory="/Archive/"/> <Var BandwidthNegotiation="0"/> <Var FileSize="0"/> <Var FileTime="0m0h0d"/> <Var NoArchive="0"/> </List> </List> <!-- H T T P S U P P O R T --> <List Name="HTTPDeliverable"> <Var Path_0="/admin"/> <Var Path_1="/ramgen"/> <Var Path_2="/farm"/> <Var Path_3="/httpfs"/> <Var Path_4="/viewsource"/> </List> <!-- <Var Path_0="/scalable"/> --> <!-- M I M E T Y P E S --> <List Name="MimeTypes"> <List Name="text/html"> <Var Ext_1="html"/> <Var Ext_2="htm"/> </List> <List Name="audio/x-pn-realaudio"> <Var Ext_1="ram"/> </List> <List Name="image/gif"> <Var Ext_1="gif"/> </List> <List Name="image/jpg"> <Var Ext_1="jpg"/> <Var Ext_2="jpeg"/> </List> </List> <!-- A U T H E N T I C A T I O N --> <List Name="AuthenticationRealms"> <List Name="SecureAdmin"> <Var Realm="ultra.shiva.AdminRealm"/> <List Name="BasicAuthenticator"> <Var PluginID="rn-auth-basic"/> <Var DatabaseID="Admin_Basic"/> </List> </List> <List Name="SecureEncoder"> <Var Realm="ultra.shiva.EncoderRealm"/> <List Name="RN5Authenticator"> <Var PluginID="rn-auth-rn5"/> <Var DatabaseID="Encoder_RN5"/> </List> </List> <List Name="SecureContent"> <Var Realm="ultra.shiva.ContentRealm"/> <List Name="RN5Authenticator"> <Var PluginID="rn-auth-rn5"/> <Var DatabaseID="Content_RN5"/> </List> </List> </List> <!-- C O M M E R C E --> <List Name="CommerceRules"> <List Name="SecureUserContent"> <Var ProtectedVirtualPath="/secure"/> <Var Realm="ultra.shiva.ContentRealm"/> <!-- <Var UseGUIDValidation="True"/ --> <Var EvaluatePermissions="0"/> <Var DatabaseID="Content_RN5"/> <!-- <Var AllowDuplicateIDs="True"/ --> </List> <List Name="SecureG2LiveContent"> <Var ProtectedVirtualPath="/encoder/secure"/> <Var Realm="ultra.shiva.ContentRealm"/> <!-- <Var UseGUIDValidation="True"/ --> <Var EvaluatePermissions="0"/> <Var DatabaseID="Content_RN5"/> <!-- <Var AllowDuplicateIDs="True"/ --> </List> <List Name="SecurePreG2LiveContent"> <Var ProtectedVirtualPath="/live/secure"/> <Var Realm="ultra.shiva.ContentRealm"/> <!-- <Var UseGUIDValidation="True"/ --> <Var EvaluatePermissions="0"/> <Var DatabaseID="Content_RN5"/> <!-- <Var AllowDuplicateIDs="True"/ --> </List> <List Name="SecurePlayerContent"> <Var ProtectedVirtualPath="/secure/player"/> <Var UseGUIDValidation="0"/> <Var EvaluatePermissions="0"/> <Var DatabaseID="PlayerContent"/> <!-- <Var AllowDuplicateIDs="True"/ --> </List> </List> <List Name="GUIDRegistrationPrefixes"> <List Name="PlayerContentRegistration"> <Var GUIDRegistrationPrefix="register"/> <Var DatabaseID="PlayerContent"/> </List> </List> <!-- D A T A B A S E S --> <List Name="Databases"> <List Name="Admin_Basic"> <Var PluginID="rn-db-flatfile"/> <Var Path="/hsphere/shared/RealServer/adm_b_db"/> </List> <List Name="Encoder_RN5"> <Var PluginID="rn-db-flatfile"/> <Var Path="/hsphere/shared/RealServer/enc_r_db"/> </List> <List Name="Content_RN5"> <Var PluginID="rn-db-flatfile"/> <Var Path="/hsphere/shared/RealServer/con_r_db"/> </List> <List Name="PlayerContent"> <Var PluginID="rn-db-flatfile"/> <Var Path="/hsphere/shared/RealServer/con_p_db"/> </List> </List> <!-- V I E W S O U R C E --> <List Name="ViewSourceConfiguration"> <Var ViewSourceLongName="View Source Tag FileSystem"/> <List Name="/"> <Var AllowViewSource="1"/> <Var HidePaths="1"/> </List> </List> <!-- C O N T E N T B R O W S I N I G --> <List Name="ContentBrowsing"> <List Name="BrowsableMountPoints"> <Var Mount_1="/"/> <Var Mount_2="/shiva/"/> </List> <List Name="IndexExtensions"> <Var Ext_1="*"/> </List> </List> <!-- F I L E S Y S T E M S --> <!-- ---------------------- --> <List Name="FSMount"> <!-- Local File System; Media --> <List Name="RealSystem Content"> <Var ShortName="pn-local"/> <Var MountPoint="/"/> <Var BasePath="/hsphere/shared/RealServer/Content"/> </List> <!-- Local File System; Secure Media --> <List Name="RealSystem Secure Content"> <Var ShortName="pn-local"/> <Var MountPoint="/secure/"/> <Var BasePath="/hsphere/shared/RealServer/Secure"/> </List> <!-- Local File System; HTML --> <List Name="RealSystem Administrator HTML"> <Var ShortName="pn-local"/> <Var MountPoint="/admin/html/"/> <Var BasePath="/hsphere/shared/RealServer/RealAdministrator"/> </List> <!-- Local File System; DOCS --> <List Name="RealSystem Administrator DOCS"> <Var ShortName="pn-local"/> <Var MountPoint="/admin/Docs/"/> <Var BasePath="/hsphere/shared/RealServer/RealAdministrator/Docs"/> </List> <!-- Local File System; IMAGES --> <List Name="RealSystem Administrator IMAGES"> <Var ShortName="pn-local"/> <Var MountPoint="/admin/images/"/> <Var BasePath="/hsphere/shared/RealServer/RealAdministrator/images"/> </List> <!-- Local File System; JAVAMONITOR --> <List Name="RealSystem Administrator JAVAMONITOR"> <Var ShortName="pn-local"/> <Var MountPoint="/admin/JavaMonitor/"/> <Var BasePath="/hsphere/shared/RealServer/RealAdministrator/JavaMonitor"/> </List> <!-- XML Tag Handler File System --> <List Name="Real System Administrator SSI"> <Var ShortName="pn-xmltag"/> <Var MountPoint="/admin/includes/"/> <Var BaseMountPoint="/admin/html/"/> <List Name="TagHandlers"> <Var h1="pn-includer"/> <Var h2="pn-vsrctaghdlr"/> </List> </List> <!-- Admin File System --> <List Name="RealSystem Administrator Files"> <Var ShortName="pn-admin"/> <Var MountPoint="/admin/"/> <Var BaseMountPoint="/admin/includes/"/> <Var Realm="ultra.shiva.AdminRealm"/> </List> <!-- Splitter Broadcast --> <List Name="Splitter_DoubleURL"> <Var ShortName="pn-splitter"/> <Var MountPoint="/split/"/> <Var Port="3030"/> </List> <!-- G2 Encoders --> <List Name="RealSystem G2 Encoders"> <Var ShortName="pn-encoder"/> <Var MountPoint="/encoder/"/> <Var Port="4040"/> <Var EncoderRealm="ultra.shiva.EncoderRealm"/> </List> <!-- Pre-G2 Encoders --> <List Name="Pre-RealSystem G2 Encoders"> <Var ShortName="pn-live3"/> <Var MountPoint="/live/"/> <Var Port="5050"/> <!-- Var Password="123456"/ --> </List> <!-- RAM File Generator --> <List Name="RAM File Generator"> <Var ShortName="pn-ramgen"/> <Var MountPoint="/ramgen/"/> </List> <!-- View Source File system --> <List Name="View Source File System"> <Var ShortName="pn-vsrcfsys"/> <Var MountPoint="/vsrcfsys/"/> </List> <!-- View Source Tag File System; Source Insertion --> <List Name="View Source Tag FileSystem"> <Var ShortName="pn-xmltag"/> <Var MountPoint="/viewsource/"/> <Var BaseMountPoint="/vsrcfsys/"/> <List Name="TagHandlers"> <List Name="ViewSource Tag Handler"> <Var ShortName="pn-vsrctaghdlr"/> </List> </List> </List> <!-- General Ad Insertion --> <List Name="General Ad Insertion"> <Var ShortName="pn-xmltag"/> <Var MountPoint="/adtag/general/"/> <Var BaseMountPoint="/"/> <List Name="TagHandlers"> <List Name="Ad Tag Replacement Plugin"> <Var ShortName="rn-adtaghandler"/> <Var AdRetrievalMountPoint="/httpfs/"/> <Var AdPlaybackMountPoint="/httpfs/"/> <Var Rotate="0"/> <Var Bitrate="4000"/> <Var Interval="30"/> <Var RotationMountPoint="/shellfs/"/> </List> </List> </List> <!-- Banner Ad SMIL Generation --> <List Name="Banner Ad SMIL Generation"> <Var ShortName="pn-smilgen"/> <Var MountPoint="/smilgen/banner/"/> <Var BaseMountPoint="/"/> <Var Layout="AdBottom"/> <Var OuterPadding="5"/> <Var InnerPadding="5"/> <Var BGColor="black"/> <Var AdType="Banner"/> <Var EnablePlaylist="0"/> <Var AdWidth="468"/> <Var AdHeight="60"/> </List> <!-- Lead-in Ad SMIL Generation --> <List Name="Lead-in Ad SMIL Generation"> <Var ShortName="pn-smilgen"/> <Var MountPoint="/smilgen/leadin/"/> <Var BaseMountPoint="/"/> <Var Layout="AdCenter"/> <Var OuterPadding="5"/> <Var InnerPadding="5"/> <Var BGColor="black"/> <Var AdType="Leadin"/> <Var EnablePlaylist="0"/> <Var AdWidth="468"/> <Var AdHeight="60"/> </List> <!-- Continuous Rotating Banner Ad SMIL Generation --> <List Name="Continuous Rotating Banner Ad SMIL Generation"> <Var ShortName="pn-smilgen"/> <Var MountPoint="/smilgen/rbanner/"/> <Var BaseMountPoint="/"/> <Var Layout="AdBottom"/> <Var OuterPadding="5"/> <Var InnerPadding="5"/> <Var BGColor="black"/> <Var AdType="RotatingBanner"/> <Var EnablePlaylist="0"/> <Var AdWidth="468"/> <Var AdHeight="60"/> </List> <!-- HTTP File System --> <List Name="HTTP File System"> <Var ShortName="pn-http"/> <Var MountPoint="/httpfs/"/> <Var ConnectionTimeout="10"/> <Var ServerTimeout="10"/> <Var MangleCookies="0"/> </List> <!-- RealSystem Shell File System --> <List Name="RealSystem Shell File System"> <Var ShortName="pn-shell"/> <Var MountPoint="/shellfs/"/> <Var AdRetrievalMountPoint="/httpfs/"/> <Var AdPlaybackMountPoint="/httpfs/"/> </List> <List Name="Users"> <Var MountPoint="/shiva/"/> <Var BasePath="/hsphere/local/real/home/"/> <Var ShortName="pn-local"/> </List> </List> <!-- C A C H I N G --> <Var TSPort="7802"/> <Var TSEnable="1"/> <Var TSLog="1"/> <Var TSLogPath="/hsphere/shared/RealServer/Logs/cache.log"/> <!-- M U L T I C A S T --> <List Name="Multicast"> <List Name="ControlList"> <List Name="100"> <Var Allow="Any"/> </List> </List> <Var RTSPPort="554"/> <Var PNAPort="7070"/> <Var DeliveryOnly="0"/> <Var Resend="1"/> <Var TTL="16"/> </List> <List Name="MediaExportInterface"> <Var LogFile="/hsphere/shared/RealServer/Logs/cache.log"/> <Var LoggingEnabled="1"/> <Var TransferSize="2048"/> <Var Enabled="1"/> <Var ListenPort="7878"/> <Var ChainingID="007b4603"/> <Var Tracemask="0x0"/> <Var LogFormat="MEI1"/> <Var Timeout="120"/> </List> <Var CloakingHint="1"/> <Var Capacity="10000"/> <Var PlusOnly="0"/> <Var MaxBandwidth="0"/> <Var User="%-1"/> <Var RTSPMessageDebug="0"/> <Var LiveFileBandwidthNegotiation="0"/> <Var MonitorConnections="4"/> <Var Group="%-1"/> <Var MinPlayerProtocol="0"/> <Var ClientConnections="0"/> <List Name="ISPHosting"> <List Name="TranslationMounts"> <List Name="users"> <Var UserPath="/shiva/"/> <Var MountPoint="/shiva/"/> </List> </List> <List Name="UserLists"> <Var File_2="/hsphere/local/config/RealServer/user.list"/> </List> </List>The Java control center allows you to alter anything to do with the RealServer, such as change port settings, restart the server, add/alter usernames and passwords for the RealServer, and other fun oddities such as track the listening audience.
A few notes for someone trying to set up their own Internet radio station: The encoder program (which sends out the content to the server) and the server program must be run on separate computers.
Unless you have very high speed access to the Internet (like a T1), I would not recommend setting up all the software for a station because the server uses a lot of bandwidth. This shouldn't prevent you from broadcasting, though! You can download a "test version" of the RealEncoder (for 5.x servers or below) or the RealProducer (for G2) at www.real.com for free.
The encoders will not work on a Windows NT platform, just Windows 95/98 and some flavors of UNIX. You can then send your encoded stream to a remote server and use their bandwidth! Before you can do this, though, you need to find a server that doesn't have restrictions set on encoders or hack the G2 administrator and change the restrictions. The default is to have no restrictions. It is probably not advisable to "overstay your welcome" on a server because they can track where the stream is coming from. So in other words, do a good job covering your tracks and don't do something stupid like a 24-hour broadcast seven days a week!
Some final notes - if you do a port scan on the RealServer it will usually have ports 554 (for RTSP), 4040 (for the encoder), one port from 6000-8080 (for the administrator), and 8080 (for misc HTTP) open among others. The port 9090 is the default monitoring point and will only be open if a monitor is also open. I recommend scanning in the 9000s before attempting to try anything because the monitor can tell how many monitor connections are open and where they are coming from. If an administrator is casually monitoring the server and suddenly sees an extra monitor pop-up he might get a little suspicious.
I hope this information has been useful to at least a few people out there.
On a final note, all this information has been gathered using the Windows NT versions. Although the other versions are bound to be similar, I cannot say for certain.