First you should create a new scope

Goto:
Shared Services Administration: SharedServices1 > Search Settings  

View scopes
New scopes

The rule you need to define a scope that will only search sites is
contentclass = STS_Web
I called mine JustSite, very creative.

Now go back to your regular site
Home > Site Settings > Scopes > View Scopes 

 On this page you wish to enable your new scope.  

Now you can use the code below to search your entire farm for a single site. All returns will be sites, and nothing but sites.

string

query = @"SELECT Title, Url FROM SCOPE() WHERE 'Scope'= 'JustSite' AND FREETEXT('Sitename') ";
using (SPSite site = new SPSite(GlobalSettings.Instance.BASESHAREPOINTURL)) {
KeywordQuery q =
new KeywordQuery(site);
FullTextSqlQuery qry =
new FullTextSqlQuery(site);
qry.ResultTypes = ResultType.RelevantResults;
qry.EnableStemming =
true;
qry.TrimDuplicates =
true;
qry.QueryText = query;
ResultTableCollection results = qry.Execute();
ResultTable resultTable = results[ResultType.RelevantResults];
}