May 29
Multicore microprocessor ( or chip-level multiprocessor, CMP) is one that combines two or more independent processors into a single package, often a single integrated circuit (IC). A dual-core device contains two independent microprocessors and a quad-core device contains four microprocessors. A multi-core microprocessor implements multiprocessing in a single physical package. Cores in a multicore device may share a single coherent cache at the highest on-device cache level (e.g. L2 for the Intel Core 2) or may have separate caches (e.g. current AMD dual-core processors). The processors also share the same interconnect to the rest of the system. Each “core” independently implements optimizations such as superscalar execution, pipelining, and hyperthreading. A system with N cores is effective when it is presented with N or more threads concurrently. The most commercially significant (or at least the most ‘obvious’) multi-core processors are those used in computers (primarily from Intel & AMD) and games consoles (eg the Cell processor in the PS3). In this context, “multi” typical means a relatively small number of cores. However, the technology is widely used in other technology areas, especially those of embedded processors such as network processors and digital signal processors, and in GPUs. In these applications, multi-core processors with higher numbers of processing elements (hundreds on one die) now exist.
May 27

Open source search engines

* DataparkSearch
* Egothor
* Gonzui
* Ht://dig
* Lucene
* Lemur Toolkit & Indri Search Engine
* mnoGoSearch
* Namazu
* Nutch
* OpenFTS
* SWISH-E
* Terrier Search Engine
* Wikiasari
* Xapian
* YaCy
* Zettair

Metasearch engines

* Bioinformatic_Harvester
* Brainboost
* Clusty
* Dogpile
* Excite
* HotBot
* Info.com
* Ixquick
* Mamma
* Metacrawler
* MetaLib
* Myriad Search
* SideStep
* Turbo10
* WebCrawler

Regional search engines

* Accoona, China/US
* Alleba, Philippines
* Ansearch, Australia/US/UK/NZ
* Araby, Middle East
* Baidu, China
* Daum, Korea
* In.gr, Greece
* Najdi.si, Slovenia
* Naver, Korea
* Rambler, Russia
* Rediff, India
* SAPO, Portugal
* Search.ch, Switzerland
* Walla!, Israel
* Yandex, Russia

People search engines

* Zoominfo

Email-based search engines

* TEK

Visual search engines

* Grokker
* Kartoo
* Quintura

Answer-based search engines

* Answers.com
* AskMeNow
* BrainBoost
* Google Answers
* Lexxe
* Lycos iQ
* Windows Live QnA
* Yahoo! Answers

Google-based search engines

* AOL Search
* MySpace Search
* Netscape

Yahoo!-based search engines

* AltaVista
* AlltheWeb
* GoodSearch

Windows-Live-based search engines

* A9.com
* Lycos
* Cialiseo

Job search engines

* Naukri.com (India)
* Bixee.com (India)
* Craigslist (by city)
* Eluta.ca (Canada)
* CareerBuilder.com (USA)
* Hotjobs.com (USA)
* Indeed.com (USA)
* Monster.com (USA)
* Recruit.net (International)
* SimplyHired.com (USA)

Forum search engines

* Omgili

Blog search engines

* Amatomu
* Bloglines
* IceRocket
* Sphere
* Technorati

News search engines

* Google News
* MagPortal
* Newslookup
* Nexis (Lexis Nexis)
* Topix.net
* Yahoo! News

Multimedia search engines

* blinkx
* Picsearch
* Podscope

Code search engines

* Google Code Search
* JExamples
* Krugle
* Koders

BitTorrent search engines

* Isohunt
* Mininova
* The Pirate Bay
* TorrentSpy
* FlixFlux
* pointblank

May 26
Windows “Vienna” (formerly known as Blackcomb) is a codename for a future version of Microsoft Windows, originally announced in February 2000, that has been subject to major delays and rescheduling. It is expected to be the successor to both Windows Vista and Windows Server 2008. Microsoft has announced it will be released in 2009, and according to “Smart Computing In Plain English”, a technology magazine, work on it began right after Windows Vista was released. As of February 2007, the name of the operating system used internally is undisclosed and is not used publicly by Microsoft, though “Windows 7″ has been noted in job postings as a working name for the project.

Microsoft has refrained from discussing the details about “Vienna” publicly as they focus on the release and marketing of Windows Vista, though some early details of various core operating system features have emerged at developer conferences such as Windows Hardware Engineering Conference in 2006.

The code name “Blackcomb” was originally assigned to Windows NT 6, an operating system that was planned to follow both the desktop/workstation-oriented Windows XP (Windows NT 5.1, codenamed “Whistler”; both named after the Whistler-Blackcomb resort) and the server-oriented Windows Server 2003 (Windows NT 5.2). In late 2001 the release of Blackcomb was being scheduled for 2005 and in August it was announced that a minor intermediate release, Vista (codenamed “Longhorn” after a bar in the Whistler Blackcomb Resort), would ship in 2002 to update the Windows NT 5.x line. Over the following years Longhorn morphed in fits, starts, and delays to incorporate many of the features promised for Blackcomb and was eventually designated as Windows NT 6. The status of the operating system dubbed “Blackcomb,” however, was shrouded in confusion with some reports suggesting that plans for Blackcomb were scrapped while others claiming that it would be the moniker for a server-only Windows 6.x release. More likely, the codename “Blackcomb” was discarded as no longer being in the spirit of its original intent (i.e., to describe Windows NT 6). At the present, it is believed that Windows “Vienna” is being planned as both a client and server release with a current release estimate of late 2009, although no firm date or year has yet been publicized.

At first, internal sources pitched Blackcomb as being not just a major revision of Windows, but a complete departure from the way users today typically think about interacting with a computer.[citation needed] For instance, the “Start” philosophy, introduced in Windows 95, may be replaced by the “new interface” which was said in 1999 to be scheduled for “Vienna”. While Windows Vista was intended to be an evolutionary release, Vienna is targeted directly at revolutionizing the way users of the product interact with their PCs.

On February 9, 2007, Microsoft’s Ben Fathi claimed that the focus on the operating system was still being worked out, and could merely hint at some possibilities:
“ “We’re going to look at a fundamental piece of enabling technology. Maybe it’s hypervisors. I don’t know what it is” “Maybe it’s a new user interface paradigm for consumers.” ”

Bill Gates, in an interview with Newsweek, also suggested that the next version of Windows would “be more user-centric.” When asked to clarify what he meant, Gates said:
“ “That means that right now when you move from one PC to another, you’ve got to install apps on each one, do upgrades on each one. Moving information between them is very painful. We can use Live Services to know what you’re interested in. So even if you drop by a [public] kiosk or somebody else’s PC, we can bring down your home page, your files, your fonts, your favorites and those things. So that’s kind of the user-centric thing that Live Services can enable. [Also,] in Vista, things got a lot better with [digital] ink and speech, but by the next release there will be a much bigger bet. Students won’t need textbooks; they can just use these tablet devices. Parallel computing is pretty important for the next release. We’ll make it so that a lot of the high-level graphics will be just built into the operating system. So we’ve got a pretty good outline.” ”

Several other features originally planned for Windows Vista may be part of “Vienna”, depending on when they are finished.

“Vienna” will also feature the sandboxed approach discussed during the Alpha/White Box development phase for Longhorn. All non-managed code will run in a sandboxed environment where access to the “outside world” is restricted by the operating system. Access to raw sockets will be disabled from within the sandbox, as will direct access to the file system, hardware abstraction layer (HAL), and complete memory addressing.[citation needed] All access to outside applications, files, and protocols will be regulated by the operating system, and any malicious activity will be halted immediately.[citation needed] If this approach is successful, it bodes very well for security and safety, as it is virtually impossible for a malicious application to cause any damage to the system if it is locked inside a metaphorical ‘glass box.’ As well, this sand boxed environment will be able to adapt itself to the code base it was written for. This will alleviate most problems that arise from back compatibility when a new operating system is made.

Another feature mentioned by Bill Gates is “a pervasive typing line that will recognize the sentence that [the user is] typing in.” The implications of this could be as simple as a “complete as you type” function as found in most modern search engines, (e.g. Google Suggest), ENSO, or as complex as being able to give verbal commands to the PC without any concern for syntax. The former has been incorporated to an extent in Windows Vista.

Microsoft recently confirmed at the Windows Hardware Engineering Conference (WinHEC 2007) in Los Angeles, that Windows Server 2008 would be the last 32-bit release of Windows Server that Microsoft develops. This would assume that all Windows Server releases after this will be exclusively 64-bit.

Paul Thurrott states in his Supersite for Windows, that according to Microsoft’s x64 migration schedule, Windows Vienna will almost certainly only ship in 64-bit editions.

This means that, although there will be continued backward compatibility with 32-bit applications, 16-bit Windows and MS-DOS applications will not be supported, as is the case in the existing x64 versions of Windows.

May 25
Below is a listing of each of the MS-DOS commands currently listed on Computer Hope and a brief explanation of what each of the commands do. The below commands are all MS-DOS commands, which means not all the below commands will work in your version of MS-DOS and/or Windows command line. Clicking on the command will open the help page for that command with full details about it.

COMMAND

DESCRIPTION

ANSI.SYS Defines functions that change display graphics, control cursor movement, and reassign keys.
APPEND Causes MS-DOS to look in other directories when editing a file or running a command.
ARP Displays, adds, and removes arp information from network devices.
ASSIGN Assign a drive letter to an alternate letter.
ASSOC View the file associations.
AT Schedule a time to execute commands or programs.
ATMADM Lists connections and addresses seen by Windows ATM call manager.
ATTRIB Display and change file attributes.
BATCH Recovery console command that executes a series of commands in a file.
BOOTCFG Recovery console command that allows a user to view, modify, and rebuild the boot.ini
BREAK Enable / disable CTRL + C feature.
CACLS View and modify file ACL’s.
CALL Calls a batch file from another batch file.
CD Changes directories.
CHCP Supplement the International keyboard and character set information.
CHDIR Changes directories.
CHKDSK Check the hard disk drive running FAT for errors.
CHKNTFS Check the hard disk drive running NTFS for errors.
CHOICE Specify a listing of multiple options within a batch file.
CLS Clears the screen.
CMD Opens the command interpreter.
COLOR Easily change the foreground and background color of the MS-DOS window.
COMMAND Opens the command interpreter.
COMP Compares files.
COMPACT Compresses and uncompress files.
CONTROL Open Control Panel icons from the MS-DOS prompt.
CONVERT Convert FAT to NTFS.
COPY Copy one or more files to an alternate location.
CTTY Change the computers input/output devices.
DATE View or change the systems date.
DEBUG Debug utility to create assembly programs to modify hardware settings.
DEFRAG Re-arrange the hard disk drive to help with loading programs.
DEL Deletes one or more files.
DELETE Recovery console command that deletes a file.
DELTREE Deletes one or more files and/or directories.
DIR List the contents of one or more directory.
DISABLE Recovery console command that disables Windows system services or drivers.
DISKCOMP Compare a disk with another disk.
DISKCOPY Copy the contents of one disk and place them on another disk.
DOSKEY Command to view and execute commands that have been run in the past.
DOSSHELL A GUI to help with early MS-DOS users.
DRIVPARM Enables overwrite of original device drivers.
ECHO Displays messages and enables and disables echo.
EDIT View and edit files.
EDLIN View and edit files.
EMM386 Load extended Memory Manager.
ENABLE Recovery console command to enable a disable service or driver.
ENDLOCAL Stops the localization of the environment changes enabled by the setlocal command.
ERASE Erase files from computer.
EXIT Exit from the command interpreter.
EXPAND Expand a Microsoft Windows file back to it’s original format.
EXTRACT Extract files from the Microsoft Windows cabinets.
FASTHELP Displays a listing of MS-DOS commands and information about them.
FC Compare files.
FDISK Utility used to create partitions on the hard disk drive.
FIND Search for text within a file.
FINDSTR Searches for a string of text within a file.
FIXBOOT Writes a new boot sector.
FIXMBR Writes a new boot record to a disk drive.
FOR Boolean used in batch files.
FORMAT Command to erase and prepare a disk drive.
FTP Command to connect and operate on a FTP server.
FTYPE Displays or modifies file types used in file extension associations.
GOTO Moves a batch file to a specific label or location.
GRAFTABL Show extended characters in graphics mode.
HELP Display a listing of commands and brief explanation.
IF Allows for batch files to perform conditional processing.
IFSHLP.SYS 32-bit file manager.
IPCONFIG Network command to view network adapter settings and assigned values.
KEYB Change layout of keyboard.
LABEL Change the label of a disk drive.
LH Load a device driver in to high memory.
LISTSVC Recovery console command that displays the services and drivers.
LOADFIX Load a program above the first 64k.
LOADHIGH Load a device driver in to high memory.
LOCK Lock the hard disk drive.
LOGON Recovery console command to list installations and enable administrator login.
MAP Displays the device name of a drive.
MD Command to create a new directory.
MEM Display memory on system.
MKDIR Command to create a new directory.
MODE Modify the port or display settings.
MORE Display one page at a time.
MOVE Move one or more files from one directory to another directory.
MSAV Early Microsoft Virus scanner.
MSD Diagnostics utility.
MSCDEX Utility used to load and provide access to the CD-ROM.
NBTSTAT Displays protocol statistics and current TCP/IP connections using NBT
NET Update, fix, or view the network or network settings
NETSH Configure dynamic and static network information from MS-DOS.
NETSTAT Display the TCP/IP network protocol statistics and information.
NLSFUNC Load country specific information.
NSLOOKUP Look up an IP address of a domain or host on a network.
PATH View and modify the computers path location.
PATHPING View and locate locations of network latency.
PAUSE Command used in batch files to stop the processing of a command.
PING Test / send information to another network computer or network device.
POPD Changes to the directory or network path stored by the pushd command.
POWER Conserve power with computer portables.
PRINT Prints data to a printer port.
PROMPT View and change the MS-DOS prompt.
PUSHD Stores a directory or network path in memory so it can be returned to at any time.
QBASIC Open the QBasic.
RD Removes an empty directory.
REN Renames a file or directory.
RENAME Renames a file or directory.
RMDIR Removes an empty directory.
ROUTE View and configure windows network route tables.
RUNAS Enables a user to execute a program on another computer.
SCANDISK Run the scandisk utility.
SCANREG Scan registry and recover registry from errors.
SET Change one variable or string to another.
SETLOCAL Enables local environments to be changed without affecting anything else.
SETVER Change MS-DOS version to trick older MS-DOS programs.
SHARE Installs support for file sharing and locking capabilities.
SHIFT Changes the position of replaceable parameters in a batch program.
SHUTDOWN Shutdown the computer from the MS-DOS prompt.
SMARTDRV Create a disk cache in conventional memory or extended memory.
SORT Sorts the input and displays the output to the screen.
START Start a separate window in Windows from the MS-DOS prompt.
SUBST Substitute a folder on your computer for another drive letter.
SWITCHES Remove add functions from MS-DOS.
SYS Transfer system files to disk drive.
TELNET Telnet to another computer / device from the prompt.
TIME View or modify the system time.
TITLE Change the title of their MS-DOS window.
TRACERT Visually view a network packets route across a network.
TREE View a visual tree of the hard disk drive.
TYPE Display the contents of a file.
UNDELETE Undelete a file that has been deleted.
UNFORMAT Unformat a hard disk drive.
UNLOCK Unlock a disk drive.
VER Display the version information.
VERIFY Enables or disables the feature to determine if files have been written properly.
VOL Displays the volume information about the designated drive.
XCOPY Copy multiple files, directories, and/or drives from one location to another.
May 25
Well, since many of us have always wondered this, here it is. Long and drawn out. Also, before attempting this, realize one thing; You will have to give up your time, effort, bandwidth, and security to have a quality ftp server.
That being said, here it goes. First of all, find out if your IP (Internet Protocol) is static (not changing) or dynamic (changes everytime you log on). To do this, first consider the fact if you have a dial up modem. If you do, chances are about 999 999 out of 1 000 000 that your IP is dynamic. To make it static, just go to a place like h*tp://www.myftp.org/ to register for a static ip address.

You’ll then need to get your IP. This can be done by doing this:
Going to Start -> Run -> winipcfg or www.ask.com and asking ‘What is my IP?’

After doing so, you’ll need to download an FTP server client. Personally, I’d recommend G6 FTP Server, Serv-U FTPor Bullitproof v2.15 all three of which are extremely reliable, and the norm of the ftp world.
You can download them on this site: h*tp://www.liaokai.com/softw_en/d_index.htm

First, you’ll have to set up your ftp. For this guide, I will use step-by-step instructions for G6. First, you’ll have to go into ‘Setup -> General’. From here, type in your port # (default is 21). I recommend something unique, or something a bit larger (ex: 3069). If you want to, check the number of max users (this sets the amount of simultaneous maximum users on your server at once performing actions - The more on at once, the slower the connection and vice versa).

The below options are then chooseable:
-Launch with windows
-Activate FTP Server on Start-up
-Put into tray on startup
-Allow multiple instances
-Show “Loading…” status at startup
-Scan drive(s) at startup
-Confirm exit

You can do what you want with these, as they are pretty self explanatory. The scan drive feature is nice, as is the 2nd and the last option. From here, click the ‘options’ text on the left column.

To protect your server, you should check ‘login check’ and ‘password check’, ‘Show relative path (a must!)’, and any other options you feel you’ll need. After doing so, click the ‘advanced’ text in the left column. You should then leave the buffer size on the default (unless of course you know what you’re doing ), and then allow the type of ftp you want.

Uploading and downloading is usually good, but it’s up to you if you want to allow uploads and/or downloads. For the server priority, that will determine how much conventional memory will be used and how much ‘effort’ will go into making your server run smoothly.

Anti-hammering is also good, as it prevents people from slowing down your speed. From here, click ‘Log Options’ from the left column. If you would like to see and record every single command and clutter up your screen, leave the defaults.

But, if you would like to see what is going on with the lowest possible space taken, click ‘Screen’ in the top column. You should then check off ‘Log successful logins’, and all of the options in the client directry, except ‘Log directory changes’. After doing so, click ‘Ok’ in the bottom left corner.

You will then have to go into ‘Setup -> User Accounts’ (or ctrl & u). From here, you should click on the right most column, and right click. Choose ‘Add’, and choose the username(s) you would like people to have access to.

After giving a name (ex: themoonlanding), you will have to give them a set password in the bottom column (ex: wasfaked). For the ‘Home IP’ directory, (if you registered with a static server, check ‘All IP Homes’. If your IP is static by default, choose your IP from the list. You will then have to right click in the very center column, and choose ‘Add’.

From here, you will have to set the directory you want the people to have access to. After choosing the directory, I suggest you choose the options ‘Read’, ‘List’, and ‘Subdirs’, unless of course you know what you’re doing . After doing so, make an ‘upload’ folder in the directory, and choose to ‘add’ this folder seperately to the center column. Choose ‘write’, ‘append’, ‘make’, ‘list’, and ’subdirs’. This will allow them to upload only to specific folders (your upload folder).

Now click on ‘Miscellaneous’ from the left column. Choose ‘enable account’, your time-out (how long it takes for people to remain idle before you automatically kick them off), the maximum number of users for this name, the maximum number of connections allowed simultaneously for one ip address, show relative path (a must!), and any other things at the bottom you’d like to have. Now click ‘Ok’.
**Requested**

From this main menu, click the little boxing glove icon in the top corner, and right click and unchoose the hit-o-meter for both uploads and downloads (with this you can monitor IP activity). Now click the lightning bolt, and your server is now up and running.

Post your ftp info, like this:

213.10.93.141 (or something else, such as: ‘f*p://example.getmyip.com’)

User: *** (The username of the client)

Pass: *** (The password)

Port: *** (The port number you chose)

So make a FTP and join the FTP section

Listing The Contents Of A Ftp:

Listing the content of a FTP is very simple.
You will need FTP Content Maker, which can be downloaded from here:
ht*p://www.etplanet.com/download/application/FTP%20Content%20Maker%201.02.zip

1. Put in the IP of the server. Do not put “ftp://” or a “/” because it will not work if you do so.
2. Put in the port. If the port is the default number, 21, you do not have to enter it.
3. Put in the username and password in the appropriate fields. If the login is anonymous, you do not have to enter it.
4. If you want to list a specific directory of the FTP, place it in the directory field. Otherwise, do not enter anything in the directory field.
5. Click “Take the List!”
6. After the list has been taken, click the UBB output tab, and copy and paste to wherever you want it.

If FTP Content Maker is not working, it is probably because the server does not utilize Serv-U Software.

If you get this error message:
StatusCode = 550
LastResponse was : ‘Unable to open local file test-ftp’
Error = 550 (Unable to open local file test-ftp)
Error = Unable to open local file test-ftp = 550
Close and restart FTP Content Maker, then try again.

error messages:

110 Restart marker reply. In this case, the text is exact and not left to the particular implementation; it must read: MARK yyyy = mmmm Where yyyy is User-process data stream marker, and mmmm server’s equivalent marker (note the spaces between markers and “=”).
120 Service ready in nnn minutes.
125 Data connection already open; transfer starting.
150 File status okay; about to open data connection.
200 Command okay.
202 Command not implemented, superfluous at this site.
211 System status, or system help reply.
212 Directory status.
213 File status.
214 Help message. On how to use the server or the meaning of a particular non-standard command. This reply is useful only to the human user.
215 NAME system type. Where NAME is an official system name from the list in the Assigned Numbers document.
220 Service ready for new user.
221 Service closing control connection. Logged out if appropriate.
225 Data connection open; no transfer in progress.
226 Closing data connection. Requested file action successful (for example, file transfer or file abort).
227 Entering Passive Mode (h1,h2,h3,h4,p1,p2).
230 User logged in, proceed.
250 Requested file action okay, completed.
257 “PATHNAME” created.
331 User name okay, need password.
332 Need account for login.
350 Requested file action pending further information.
421 Too many users logged to the same account
425 Can’t open data connection.
426 Connection closed; transfer aborted.
450 Requested file action not taken. File unavailable (e.g., file busy).
451 Requested action aborted: local error in processing.
452 Requested action not taken. Insufficient storage space in system.
500 Syntax error, command unrecognized. This may include errors such as command line too long.
501 Syntax error in parameters or arguments.
502 Command not implemented.
503 Bad sequence of commands.
504 Command not implemented for that parameter.
530 Not logged in.
532 Need account for storing files.
550 Requested action not taken. File unavailable (e.g., file not found, no access).
551 Requested action aborted: page type unknown.
552 Requested file action aborted. Exceeded storage allocation (for current directory or dataset).
553 Requested action not taken. File name not allowed.

Active FTP vs. Passive FTP, a Definitive Explanation

Introduction
One of the most commonly seen questions when dealing with firewalls and other Internet connectivity issues is the difference between active and passive FTP and how best to support either or both of them. Hopefully the following text will help to clear up some of the confusion over how to support FTP in a firewalled environment.

This may not be the definitive explanation, as the title claims, however, I’ve heard enough good feedback and seen this document linked in enough places to know that quite a few people have found it to be useful. I am always looking for ways to improve things though, and if you find something that is not quite clear or needs more explanation, please let me know! Recent additions to this document include the examples of both active and passive command line FTP sessions. These session examples should help make things a bit clearer. They also provide a nice picture into what goes on behind the scenes during an FTP session. Now, on to the information…

The Basics
FTP is a TCP based service exclusively. There is no UDP component to FTP. FTP is an unusual service in that it utilizes two ports, a ‘data’ port and a ‘command’ port (also known as the control port). Traditionally these are port 21 for the command port and port 20 for the data port. The confusion begins however, when we find that depending on the mode, the data port is not always on port 20.

Active FTP
In active mode FTP the client connects from a random unprivileged port (N > 1024) to the FTP server’s command port, port 21. Then, the client starts listening to port N+1 and sends the FTP command PORT N+1 to the FTP server. The server will then connect back to the client’s specified data port from its local data port, which is port 20.

From the server-side firewall’s standpoint, to support active mode FTP the following communication channels need to be opened:

FTP server’s port 21 from anywhere (Client initiates connection)
FTP server’s port 21 to ports > 1024 (Server responds to client’s control port)
FTP server’s port 20 to ports > 1024 (Server initiates data connection to client’s data port)
FTP server’s port 20 from ports > 1024 (Client sends ACKs to server’s data port)

In step 1, the client’s command port contacts the server’s command port and sends the command PORT 1027. The server then sends an ACK back to the client’s command port in step 2. In step 3 the server initiates a connection on its local data port to the data port the client specified earlier. Finally, the client sends an ACK back as shown in step 4.

The main problem with active mode FTP actually falls on the client side. The FTP client doesn’t make the actual connection to the data port of the server–it simply tells the server what port it is listening on and the server connects back to the specified port on the client. From the client side firewall this appears to be an outside system initiating a connection to an internal client–something that is usually blocked.

Active FTP Example
Below is an actual example of an active FTP session. The only things that have been changed are the server names, IP addresses, and user names. In this example an FTP session is initiated from testbox1.slacksite.com (192.168.150.80), a linux box running the standard FTP command line client, to testbox2.slacksite.com (192.168.150.90), a linux box running ProFTPd 1.2.2RC2. The debugging (-d) flag is used with the FTP client to show what is going on behind the scenes. Everything in red is the debugging output which shows the actual FTP commands being sent to the server and the responses generated from those commands. Normal server output is shown in black, and user input is in bold.

There are a few interesting things to consider about this dialog. Notice that when the PORT command is issued, it specifies a port on the client (192.168.150.80) system, rather than the server. We will see the opposite behavior when we use passive FTP. While we are on the subject, a quick note about the format of the PORT command. As you can see in the example below it is formatted as a series of six numbers separated by commas. The first four octets are the IP address while the second two octets comprise the port that will be used for the data connection. To find the actual port multiply the fifth octet by 256 and then add the sixth octet to the total. Thus in the example below the port number is ( (14*256) + 178), or 3762. A quick check with netstat should confirm this information.

testbox1: {/home/p-t/slacker/public_html} % ftp -d testbox2
Connected to testbox2.slacksite.com.
220 testbox2.slacksite.com FTP server ready.
Name (testbox2:slacker): slacker
—> USER slacker
331 Password required for slacker.
Password: TmpPass
—> PASS XXXX
230 User slacker logged in.
—> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
ftp: setsockopt (ignored): Permission denied
—> PORT 192,168,150,80,14,178
200 PORT command successful.
—> LIST
150 Opening ASCII mode data connection for file list.
drwx—— 3 slacker users 104 Jul 27 01:45 public_html
226 Transfer complete.
ftp> quit
—> QUIT
221 Goodbye.

Passive FTP
In order to resolve the issue of the server initiating the connection to the client a different method for FTP connections was developed. This was known as passive mode, or PASV, after the command used by the client to tell the server it is in passive mode.

In passive mode FTP the client initiates both connections to the server, solving the problem of firewalls filtering the incoming data port connection to the client from the server. When opening an FTP connection, the client opens two random unprivileged ports locally (N > 1024 and N+1). The first port contacts the server on port 21, but instead of then issuing a PORT command and allowing the server to connect back to its data port, the client will issue the PASV command. The result of this is that the server then opens a random unprivileged port (P > 1024) and sends the PORT P command back to the client. The client then initiates the connection from port N+1 to port P on the server to transfer data.

From the server-side firewall’s standpoint, to support passive mode FTP the following communication channels need to be opened:

FTP server’s port 21 from anywhere (Client initiates connection)
FTP server’s port 21 to ports > 1024 (Server responds to client’s control port)
FTP server’s ports > 1024 from anywhere (Client initiates data connection to random port specified by server)
FTP server’s ports > 1024 to remote ports > 1024 (Server sends ACKs (and data) to client’s data port)

In step 1, the client contacts the server on the command port and issues the PASV command. The server then replies in step 2 with PORT 2024, telling the client which port it is listening to for the data connection. In step 3 the client then initiates the data connection from its data port to the specified server data port. Finally, the server sends back an ACK in step 4 to the client’s data port.

While passive mode FTP solves many of the problems from the client side, it opens up a whole range of problems on the server side. The biggest issue is the need to allow any remote connection to high numbered ports on the server. Fortunately, many FTP daemons, including the popular WU-FTPD allow the administrator to specify a range of ports which the FTP server will use. See Appendix 1 for more information.

The second issue involves supporting and troubleshooting clients which do (or do not) support passive mode. As an example, the command line FTP utility provided with Solaris does not support passive mode, necessitating a third-party FTP client, such as ncftp.

With the massive popularity of the World Wide Web, many people prefer to use their web browser as an FTP client. Most browsers only support passive mode when accessing ftp:// URLs. This can either be good or bad depending on what the servers and firewalls are configured to support.

Passive FTP Example
Below is an actual example of a passive FTP session. The only things that have been changed are the server names, IP addresses, and user names. In this example an FTP session is initiated from testbox1.slacksite.com (192.168.150.80), a linux box running the standard FTP command line client, to testbox2.slacksite.com (192.168.150.90), a linux box running ProFTPd 1.2.2RC2. The debugging (-d) flag is used with the FTP client to show what is going on behind the scenes. Everything in red is the debugging output which shows the actual FTP commands being sent to the server and the responses generated from those commands. Normal server output is shown in black, and user input is in bold.

Notice the difference in the PORT command in this example as opposed to the active FTP example. Here, we see a port being opened on the server (192.168.150.90) system, rather than the client. See the discussion about the format of the PORT command above, in the Active FTP Example section.

testbox1: {/home/p-t/slacker/public_html} % ftp -d testbox2
Connected to testbox2.slacksite.com.
220 testbox2.slacksite.com FTP server ready.
Name (testbox2:slacker): slacker
—> USER slacker
331 Password required for slacker.
Password: TmpPass
—> PASS XXXX
230 User slacker logged in.
—> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> passive
Passive mode on.
ftp> ls
ftp: setsockopt (ignored): Permission denied
—> PASV
227 Entering Passive Mode (192,168,150,90,195,149).
—> LIST
150 Opening ASCII mode data connection for file list
drwx—— 3 slacker users 104 Jul 27 01:45 public_html
226 Transfer complete.
ftp> quit
—> QUIT
221 Goodbye.

Summary
The following chart should help admins remember how each FTP mode works:

Active FTP :
command : client >1024 -> server 21
data : client >1024 <- server 20

Passive FTP :
command : client >1024 -> server 21
data : client >1024 -> server >1024

A quick summary of the pros and cons of active vs. passive FTP is also in order:

Active FTP is beneficial to the FTP server admin, but detrimental to the client side admin. The FTP server attempts to make connections to random high ports on the client, which would almost certainly be blocked by a firewall on the client side. Passive FTP is beneficial to the client, but detrimental to the FTP server admin. The client will make both connections to the server, but one of them will be to a random high port, which would almost certainly be blocked by a firewall on the server side.

Luckily, there is somewhat of a compromise. Since admins running FTP servers will need to make their servers accessible to the greatest number of clients, they will almost certainly need to support passive FTP. The exposure of high level ports on the server can be minimized by specifying a limited port range for the FTP server to use. Thus, everything except for this range of ports can be firewalled on the server side. While this doesn’t eliminate all risk to the server, it decreases it tremendously.