We develop an efficient numerical method for computing defect modes in two dimensional photonic crystals based on the Dirichletto- Neumann (DtN) maps of the defect and normal unit cells. The DtN map of a unit cell is an operator that maps the wave field on the boundary of the cell to its normal derivative. The frequencies of the defect modes are solved from a condition that a small matrix is singular. The size of the matrix is related to the number of points used to discretize the boundary of the defect cell. The matrix is obtained by solving a linear system involving only discrete points on the edges of the unit cells in a truncated domain.