diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..8e2d2b4 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,72 @@ +cmake_minimum_required (VERSION 2.6) +project (ZMAP C) + +option(WITH_REDIS "Build with support for Redis DB" OFF) +option(WITH_JSON "Build with support for JSON" OFF) +option(ENABLE_DEVELOPMENT "Enable development specific compiler and linker flags" OFF) +option(ENABLE_HARDENING "Add hardening specific compiler and linker flags" OFF) + +if(ENABLE_DEVELOPMENT) + # Hardening and warnings for building with gcc + # Maybe add -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations + set(GCCWARNINGS + "-Wall -Wformat=2 -Wno-format-nonliteral" + "-pedantic -fno-strict-aliasing" + "-Wextra" + "-Wfloat-equal -Wundef -Wwrite-strings -Wredundant-decls" + "-Wnested-externs -Wbad-function-cast -Winit-self" + "-Wmissing-noreturn -Wnormalized=id" + "-Wstack-protector" + "-Werror" + ) + + # Fix line breaks + string(REPLACE ";" " " GCCWARNINGS "${GCCWARNINGS}") + + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCCWARNINGS} -g") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -g") +endif() + +if(ENABLE_HARDENING) + set(GCCHARDENING "-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-all -fwrapv -fPIC --param ssp-buffer-size=1") + set(LDHARDENING "-z relro -z now") + + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCCHARDENING}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LDHARDENING}") +endif() + +if(WITH_REDIS) + set(REDIS_LIBS hiredis) + add_definitions("-DREDIS") +endif() + +if(WITH_JSON) + include(FindPkgConfig) + pkg_check_modules(JSON json-c) + if(NOT JSON_FOUND) + set(JSON_CFLAGS "") + set(JSON_LIBS "-ljson-c") + include_directories("/usr/local/include/json-c/") + endif() + + add_definitions("-DJSON") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${JSON_CFLAGS}") +endif() + +# Standard FLAGS +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread") + +# Extra target FLAGS +set(CMAKE_C_FLAGS_DEBUG "-O2 -g") +set(CMAKE_C_FLAGS_RELEASE "-O2") + +add_subdirectory(src) + +# Install conf files +FILE(GLOB CONF_FILES "conf/*") +install( + FILES + ${CONF_FILES} + DESTINATION "/etc/zmap/" + ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..50bf1ee --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,94 @@ +include_directories( + "${CMAKE_CURRENT_BINARY_DIR}" + ${PROJECT_SOURCE_DIR}/lib + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_SOURCE_DIR}/src/output_modules + ) + +SET(LIB_SOURCES + ${PROJECT_SOURCE_DIR}/lib/blacklist.c + ${PROJECT_SOURCE_DIR}/lib/constraint.c + ${PROJECT_SOURCE_DIR}/lib/logger.c + ${PROJECT_SOURCE_DIR}/lib/random.c + ${PROJECT_SOURCE_DIR}/lib/rijndael-alg-fst.c +) + +# ADD YOUR PROBE MODULE HERE +SET(EXTRA_PROBE_MODULES + + ) + +# ADD YOUR OUTPUT MODULE HERE +SET(EXTRA_OUTPUT_MODULES + + ) + +SET(OUTPUT_MODULE_SOURCES +# output_modules/module_extended_file.c +# output_modules/module_simple_file.c + output_modules/module_csv.c + output_modules/output_modules.c + ) + +SET(PROBE_MODULE_SOURCES + probe_modules/module_icmp_echo.c + probe_modules/module_tcp_synscan.c + probe_modules/module_udp.c + probe_modules/packet.c + probe_modules/probe_modules.c + ) + +SET(SOURCES + aesrand.c + cyclic.c + fieldset.c + get_gateway.c + monitor.c + recv.c + send.c + state.c + validate.c + zmap.c + zopt_compat.c + "${CMAKE_CURRENT_BINARY_DIR}/zopt.h" + ${EXTRA_PROBE_MODULES} + ${EXTRA_OUTPUT_MODULES} + ${PROBE_MODULE_SOURCES} + ${OUTPUT_MODULE_SOURCES} + ${LIB_SOURCES} + ) + +if (WITH_JSON) + SET(SOURCES ${SOURCES} output_modules/module_json.c) +endif() + +if (WITH_REDIS) + SET(SOURCES ${SOURCES} ${PROJECT_SOURCE_DIR}/lib/redis.c output_modules/module_redis.c) +endif() + +add_custom_command(OUTPUT zopt.h + COMMAND gengetopt -C --no-help --no-version -i "${CMAKE_CURRENT_SOURCE_DIR}/zopt.ggo" -F "${CMAKE_CURRENT_BINARY_DIR}/zopt" + ) + +add_executable(zmap ${SOURCES}) + +target_link_libraries( + zmap + pcap gmp m + ${REDIS_LIBS} + ${JSON_LIBRARIES} + ) + +# Install binary +install( + TARGETS + zmap + RUNTIME DESTINATION sbin +) + +# Install Manpages +install( + FILES + zmap.1 + DESTINATION share/man/man1 + )