Hannibal is a census-designated place in eastern Ohio Township, Monroe County, Ohio, United States. Although it is unincorporated, it has a post office, with the ZIP code of 43931. As of the 2016 estimate, it had a population of 451.
Hannibal lies along Ohio State Route 7 near an intersection with Ohio State Route 536. An Ohio River town, it is home to the Hannibal Locks and Dam. The town lies below Powhatan Point and above Sardis. Hannibal is also connected to New Martinsville, West Virginia via the New Martinsville Bridge.
Hannibal is served by the Switzerland of Ohio Local School District, and is home to Hannibal Elementary School and River High School.