The Small Computer Systems Interface (SCSI) has been used to transmit data between applications (Initiators) and storage devices (Targets). One of the major limitations of SCSI has been the length of the SCSI bus. With the evolution of Storage Area Networks (SANs), several protocols have been proposed to extend the length of the SCSI bus e.g., Fibre Channel, SCSI Encapsulation Protocol (SEP), and Internet SCSI (iSCSI). The evaluation of these technologies requires the use of an Initiator and a Target that implement the said protocols. A large portion of what such Initiators or Targets need to do from a SCSI perspective can be isolated into a logical code unit referred to as a mid-level. While there exists in the Linux kernel a generic SCSI Initiator mid-level that drivers written for various Initiators can interface with, no corresponding facility exists for the Target side. This thesis involves the development of a Generic SCSI Target midlevel for Linux along with implementing front-end drivers for Fibre Channel, SEP and iSCSI that can utilize the said Target mid-level. Other uses for the Target Emulator are as a bridge between two protocols and as an interface for SAN Management.