diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | README | 16 | ||||
-rw-r--r-- | pcap2tzsp.c | 100 | ||||
-rw-r--r-- | pcap2tzsp.cbp | 64 | ||||
-rw-r--r-- | pcap2tzsp.h | 50 | ||||
-rw-r--r-- | pcap2tzsp.vcproj | 213 | ||||
-rw-r--r-- | pcap2tzsp_linux.h | 55 | ||||
-rw-r--r-- | pcap2tzsp_win32_mingw.h | 57 | ||||
-rw-r--r-- | pcap2tzsp_win32_vs.h | 73 |
9 files changed, 548 insertions, 82 deletions
@@ -1,7 +1,7 @@ all : pcap2tzsp pcap2tzsp: pcap2tzsp.o - gcc -o pcap2tzsp pcap2tzsp.o -lpcap + gcc -Wall -o pcap2tzsp pcap2tzsp.o -lpcap pcap2tzsp.o : pcap2tzsp.c gcc -Wall -c pcap2tzsp.c clean : @@ -0,0 +1,16 @@ + +Files description : + +LICENCE GPL 3 licence text +README This file + +Makefile Compliation directives for linux +pcap2tzsp.cbp Project file for Code-Blocks (I use the 10.05 release) +pcap2tzsp.vcproj Project file for Visual Studio (Express) 2005 (aka version 8) + +pcap2tzsp.c Main file with all the code +pcap2tzsp.h Header included by pcap2tzsp.c. Includes the right pcap2tzsp_*.h detecting compilation env. +pcap2tzsp_linux.h Specific header for pcap2tzsp.c library headers on Linux platform +pcap2tzsp_win32_mingw.h Specific header for pcap2tzsp.c library headers on Windows platform using MinGW32 +pcap2tzsp_win32_vs.h Specific header for pcap2tzsp.c library headers on Windows platform using Visual Studio + diff --git a/pcap2tzsp.c b/pcap2tzsp.c index bf175ea..16b6e56 100644 --- a/pcap2tzsp.c +++ b/pcap2tzsp.c @@ -22,70 +22,7 @@ This file is part of Pcap2tzsp. See LICENCE file. */ -/* Basics */ -#include <stdio.h> -#include <stdlib.h> -#include <stdint.h> /* Consider using msinttypes for Visual Studio */ -#include <signal.h> -#include <string.h> - -#ifdef WIN32 /* snprintf compatiblity */ -#define my_snprintf sprintf_s -#else -#define my_snprintf snprintf -#endif - - -/* Packet capture stuff */ -#include <pcap.h> - -/* UDP stuff */ -#ifdef WIN32 -#include <winsock2.h> -#include <ws2tcpip.h> -#else -#include <sys/types.h> -#include <sys/socket.h> -#include <unistd.h> -#include <netdb.h> /* Name resolution */ -#define SOCKET int -#define INVALID_SOCKET -1 -#endif - -/* Time management (for bwlimit) */ -#include <time.h> - -/* Args parsing and basename() for usage */ -#ifdef WIN32 -#undef _UNICODE -#include <getopt.h> /* Consider using getopt4win for WIN32 */ - - /* Poor's men hand-written basename. - With calloc() and this is diffent from POSIX basename() */ - char * basename(const char *path) { - errno_t e; - size_t len1, len2; - char filename[256], ext[8]; - char *res=NULL; - - e=_splitpath_s(path, NULL, 0, NULL, 0, filename, 256, ext, 8); - if (e != 0) { - res=strdup(""); - } else { - len1=strlen(filename); - len2=strlen(ext); - res=calloc(len1+len2 + 1, sizeof(char)); - if ( res != NULL ) { - strcpy_s(res, len1+1, filename); - strcpy_s(res+len1, len2+1, ext); - } - } - return res; - } -#else -#include <getopt.h> -#include <libgen.h> -#endif +#include "pcap2tzsp.h" /* Option default values (as strings) */ #define DEFAULT_FILTER "not ( icmp[icmptype]=icmp-unreach or (udp and dst %s and port %s) )" @@ -93,8 +30,8 @@ #define DEFAULT_PORT "37008" #define DEFAULT_SNAPLEN "70" -/* MAX_TZSP_PAYLOAD is for not trying to send TZSP packets greater than the interface MTU - MAX_TZSP_PAYLOAD = MTU - IP header - UDP header - TZSP header +/* MAX_TZSP_PAYLOAD is for not trying to send TZSP packets greater than the interface MTU + MAX_TZSP_PAYLOAD = MTU - IP header - UDP header - TZSP header I am assuming the following : - Layer 2 overhead is the same for the captured packet and the transmitted packet - MTU is assumed to be 1500 for now @@ -109,13 +46,14 @@ /* TODO List + * Essayer WIN32_LEAN_AND_MEAN avec VS * Implémenter une bwlimit en sortie (ptks/s et/ou bytes/s) * Calcul dynamique de MAX_TZSP_PAYLOAD */ /* Functions declaration */ -int make_dgram_socket(char host[], char service[], int hint_flags, char **resolved_address); -void start_capture_loop(char *pcap_filter); +SOCKET make_dgram_socket(char host[], char service[], int hint_flags, char **resolved_address); +void start_capture_loop(char *pcap_filter); void process_packet(u_char *void_args, const struct pcap_pkthdr* pkthdr, const u_char * packet); /* Custom types definition */ @@ -135,7 +73,7 @@ static char *opt_host=NULL; static char *opt_port=NULL; static char *opt_snaplen=NULL; -pcap_t *pcap_handle = NULL; +pcap_t *pcap_handle = NULL; void usage(char progname[]) { printf("Usage : %s [--verbose] [--brief] [-i <iface>] [-h <host>] [-p <port>] [custom_pcap_filter]\n", progname); @@ -278,7 +216,7 @@ int main(int argc, char *argv[]) { return 0; } -int make_dgram_socket(char host[], char service[], int hint_flags, char **resolved_address) { +SOCKET make_dgram_socket(char host[], char service[], int hint_flags, char **resolved_address) { /* Code taken from Client program example of getaddrinfo(3) manpage Tweaks added for WIN32 "compatibility" @@ -331,7 +269,7 @@ int make_dgram_socket(char host[], char service[], int hint_flags, char **resolv /* This part was not in the example as is */ if ( resolved_address != NULL) { /* If wanted, return numerical form of the choosen host address */ - if ( getnameinfo(rp->ai_addr, rp->ai_addrlen, hbuf, + if ( getnameinfo(rp->ai_addr, rp->ai_addrlen, hbuf, NI_MAXHOST_NUMERIC, NULL, 0, NI_NUMERICHOST) == 0 ) { *resolved_address=strdup(hbuf); } @@ -342,10 +280,10 @@ int make_dgram_socket(char host[], char service[], int hint_flags, char **resolv } -void start_capture_loop(char *pcap_filter) { +void start_capture_loop(char *pcap_filter) { //Global for signal handling - //pcap_t *pcap_handle = NULL; + //pcap_t *pcap_handle = NULL; char *resolved_address=NULL; static char *pcap_device=NULL; char pcap_errbuf[PCAP_ERRBUF_SIZE]; @@ -355,11 +293,11 @@ void start_capture_loop(char *pcap_filter) { int snaplen, hints_flags, pcap_filter_synthetised=0; size_t pcap_filter_len; /* size_t is "mandatory" for WIN32 */ - memset(pcap_errbuf,0,PCAP_ERRBUF_SIZE); - memset(&process_packet_args,0,sizeof(process_packet_args_t)); + memset(pcap_errbuf,0,PCAP_ERRBUF_SIZE); + memset(&process_packet_args,0,sizeof(process_packet_args_t)); if (opt_iface == NULL) { - /* Get the name of the first device suitable for capture */ + /* Get the name of the first device suitable for capture */ if ( (pcap_device = pcap_lookupdev(pcap_errbuf)) == NULL){ fprintf(stderr, "ERROR: %s\n", pcap_errbuf); exit(20); @@ -387,7 +325,7 @@ void start_capture_loop(char *pcap_filter) { /* pcap init */ if (opt_verbose) printf("Opening device %s for capturing\n", pcap_device); - /* Open device in promiscuous mode */ + /* Open device in promiscuous mode */ if ( (pcap_handle = pcap_open_live(pcap_device, snaplen, 1, 512, pcap_errbuf)) == NULL){ fprintf(stderr, "ERROR: %s\n", pcap_errbuf); exit(21); @@ -419,7 +357,7 @@ void start_capture_loop(char *pcap_filter) { pcap_freecode(&pcap_filter_prog); - /* Loop forever & call process_packet() for every received packet */ + /* Loop forever & call process_packet() for every received packet */ if ( pcap_loop(pcap_handle, -1, process_packet, (u_char *)&process_packet_args) == -1) { fprintf(stderr, "ERROR: %s\n", pcap_geterr(pcap_handle) ); exit(25); @@ -427,7 +365,7 @@ void start_capture_loop(char *pcap_filter) { fprintf(stderr, "\n%u packets captured\n%u TZSP packets sent\n", process_packet_args.captured_pkt_count, process_packet_args.sent_pkt_count); - + if (pcap_stats(pcap_handle, &stat) == -1) { fprintf(stderr, "ERROR: %s\n", pcap_geterr(pcap_handle) ); exit(26); @@ -460,7 +398,7 @@ void process_packet(u_char *void_args, const struct pcap_pkthdr* pkthdr, const u char buf[UDP_SEND_BUFLEN]; /* struct timespec ts_reqsleep; // For simulation */ - process_packet_args_t *args=(process_packet_args_t *)void_args; + process_packet_args_t *args=(process_packet_args_t *)void_args; /* Catpured packet counting and displaying (max once by second) */ args->captured_pkt_count++; @@ -495,7 +433,7 @@ void process_packet(u_char *void_args, const struct pcap_pkthdr* pkthdr, const u buf[5]=0x04; /* Tag length == 4 bytes */ /* buf[6,7,8,9] Timestamp on 4 bytes (network order) */ - memcpy(buf+6, &field_ts, 4); + memcpy(buf+6, &field_ts, 4); /* Wireshark don't dissect that */ //buf[10]=0x28; /* Tag type TAG_PACKET_COUNT */ diff --git a/pcap2tzsp.cbp b/pcap2tzsp.cbp new file mode 100644 index 0000000..f638dca --- /dev/null +++ b/pcap2tzsp.cbp @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> +<CodeBlocks_project_file> + <FileVersion major="1" minor="6" /> + <Project> + <Option title="pcap2tzsp" /> + <Option pch_mode="2" /> + <Option compiler="gcc" /> + <Build> + <Target title="Debug"> + <Option output="bin\Debug\pcap2tzsp" prefix_auto="1" extension_auto="1" /> + <Option object_output="obj\Debug\" /> + <Option type="1" /> + <Option compiler="gcc" /> + <Compiler> + <Add option="-Wall" /> + <Add option="-g" /> + <Add option="-DWIN32" /> + <Add option="-DWPCAP" /> + <Add directory="C:\libs\WpdPack_4_1_2\WpdPack\Include" /> + </Compiler> + <Linker> + <Add library="C:\libs\WpdPack_4_1_2\WpdPack\Lib\Packet.lib" /> + <Add library="C:\libs\WpdPack_4_1_2\WpdPack\Lib\wpcap.lib" /> + <Add library="C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a" /> + </Linker> + </Target> + <Target title="Release"> + <Option output="bin\Release\pcap2tzsp" prefix_auto="1" extension_auto="1" /> + <Option object_output="obj\Release\" /> + <Option type="1" /> + <Option compiler="gcc" /> + <Compiler> + <Add option="-O2" /> + <Add option="-Wall" /> + <Add option="-DWIN32" /> + <Add option="-DWPCAP" /> + <Add directory="C:\libs\WpdPack_4_1_2\WpdPack\Include" /> + </Compiler> + <Linker> + <Add option="-s" /> + <Add library="C:\libs\WpdPack_4_1_2\WpdPack\Lib\Packet.lib" /> + <Add library="C:\libs\WpdPack_4_1_2\WpdPack\Lib\wpcap.lib" /> + <Add library="C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a" /> + </Linker> + </Target> + </Build> + <Compiler> + <Add option="-Wall" /> + </Compiler> + <Unit filename="pcap2tzsp.c"> + <Option compilerVar="CC" /> + </Unit> + <Unit filename="pcap2tzsp.h"> + <Option target="<{~None~}>" /> + </Unit> + <Unit filename="pcap2tzsp_win32_mingw.h"> + <Option target="<{~None~}>" /> + </Unit> + <Extensions> + <code_completion /> + <debugger /> + </Extensions> + </Project> +</CodeBlocks_project_file> diff --git a/pcap2tzsp.h b/pcap2tzsp.h new file mode 100644 index 0000000..80b5c94 --- /dev/null +++ b/pcap2tzsp.h @@ -0,0 +1,50 @@ +/* + + Pcap2tzsp allows to capture ethernet trafic and send all headers + to a defined host using the TaZmen Sniffing Protocol (TZSP). + + Copyright (C) 2012 Ludovic Pouzenc <lpouzenc@gmail.com> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + + This file is part of Pcap2tzsp. See LICENCE file. +*/ + + +#ifndef PCAP2TZSP_H_INCLUDED +#define PCAP2TZSP_H_INCLUDED + + +/* Get the right include file */ +#if ( defined(WIN32) && defined(_MSC_VER) ) +/* Visual studio case */ +#include "pcap2tzsp_win32_vs.h" + +#elif ( defined(WIN32) && defined(__MINGW32__) ) +/* MinGW on Windows case*/ +#include "pcap2tzsp_win32_mingw.h" + +#elif ( defined(WIN32) ) +/* TODO */ +#pragma message("You are in an unspecifed case.") + +#else +/* Linux case */ +#include "pcap2tzsp_linux.h" +#endif + + +#endif // PCAP2TZSP_H_INCLUDED + diff --git a/pcap2tzsp.vcproj b/pcap2tzsp.vcproj new file mode 100644 index 0000000..16915c0 --- /dev/null +++ b/pcap2tzsp.vcproj @@ -0,0 +1,213 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="pcap2tzsp"
+ ProjectGUID="{CA4E26AC-E43B-45C1-A9B5-12EC489B3F85}"
+ RootNamespace="pcap2tzsp"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories=""C:\Program Files\Microsoft SDKs\Windows\v7.1\Include";"C:\libs\msinttypes-r26";C:\libs\getopt_mb_uni_vc8\getopt_mb_uni_vc8_dll;C:\libs\WpdPack_4_1_2\WpdPack\Include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;WPCAP"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkLibraryDependencies="true"
+ AdditionalDependencies="WS2_32.Lib Packet.lib wpcap.lib getopt.lib"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib";C:\libs\getopt_mb_uni_vc8\bin\release\dll;C:\libs\WpdPack_4_1_2\WpdPack\Lib"
+ IgnoreAllDefaultLibraries="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""C:\Program Files\Microsoft SDKs\Windows\v7.1\Include";"C:\libs\msinttypes-r26";C:\libs\getopt_mb_uni_vc8\getopt_mb_uni_vc8_dll;C:\libs\WpdPack_4_1_2\WpdPack\Include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WPCAP"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="WS2_32.Lib Packet.lib wpcap.lib getopt.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib";C:\libs\getopt_mb_uni_vc8\bin\release\dll;C:\libs\WpdPack_4_1_2\WpdPack\Lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Fichiers sources"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\pcap2tzsp.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Fichiers d'en-tête"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\pcap2tzsp.h"
+ >
+ </File>
+ <File
+ RelativePath=".\pcap2tzsp_win32_vs.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Fichiers de ressources"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/pcap2tzsp_linux.h b/pcap2tzsp_linux.h new file mode 100644 index 0000000..6090929 --- /dev/null +++ b/pcap2tzsp_linux.h @@ -0,0 +1,55 @@ +/* + + Pcap2tzsp allows to capture ethernet trafic and send all headers + to a defined host using the TaZmen Sniffing Protocol (TZSP). + + Copyright (C) 2012 Ludovic Pouzenc <lpouzenc@gmail.com> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + + This file is part of Pcap2tzsp. See LICENCE file. +*/ + +#ifndef PCAP2TZSP_LINUX_H_INCLUDED +#define PCAP2TZSP_LINUX_H_INCLUDED + +/* Basics */ +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <signal.h> +#include <string.h> +#define my_snprintf snprintf/* snprintf "compatiblity" */ + +/* Packet capture stuff */ +#include <pcap.h> + +/* UDP stuff */ +#include <sys/types.h> +#include <sys/socket.h> +#include <unistd.h> +#include <netdb.h> /* Name resolution */ +#define SOCKET int +#define INVALID_SOCKET -1 + +/* Time management (for bwlimit) */ +#include <time.h> + +/* Args parsing and basename() for usage */ +#include <getopt.h> +#include <libgen.h> + + +#endif // PCAP2TZSP_LINUX_H_INCLUDED diff --git a/pcap2tzsp_win32_mingw.h b/pcap2tzsp_win32_mingw.h new file mode 100644 index 0000000..3d8da83 --- /dev/null +++ b/pcap2tzsp_win32_mingw.h @@ -0,0 +1,57 @@ +/* + + Pcap2tzsp allows to capture ethernet trafic and send all headers + to a defined host using the TaZmen Sniffing Protocol (TZSP). + + Copyright (C) 2012 Ludovic Pouzenc <lpouzenc@gmail.com> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + + This file is part of Pcap2tzsp. See LICENCE file. +*/ + +#ifndef PCAP2TZSP_WIN32_MINGW_H_INCLUDED +#define PCAP2TZSP_WIN32_MINGW_H_INCLUDED + +#define WINVER 0x0501 + +/* Basics */ +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <signal.h> +#include <string.h> +#define my_snprintf snprintf/* snprintf "compatiblity" */ + +/* Packet capture stuff */ +#include <pcap.h> + +/* UDP stuff */ +#include <winsock2.h> +#include <ws2tcpip.h> +/* Constants missing in MINGW +(I don't understand why and this will cause troubles) */ +#define AI_NUMERICSERV 0x00000008 +#define AI_ADDRCONFIG 0x00000400 +#define AI_V4MAPPED 0x00000800 + +/* Time management (for bwlimit) */ +#include <time.h> + +/* Args parsing and basename() for usage */ +#include <getopt.h> +#include <libgen.h> + +#endif // PCAP2TZSP_WIN32_MINGW_H_INCLUDED diff --git a/pcap2tzsp_win32_vs.h b/pcap2tzsp_win32_vs.h new file mode 100644 index 0000000..92d187e --- /dev/null +++ b/pcap2tzsp_win32_vs.h @@ -0,0 +1,73 @@ +/* + + Pcap2tzsp allows to capture ethernet trafic and send all headers + to a defined host using the TaZmen Sniffing Protocol (TZSP). + + Copyright (C) 2012 Ludovic Pouzenc <lpouzenc@gmail.com> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + + This file is part of Pcap2tzsp. See LICENCE file. +*/ + +#ifndef PCAP2TZSP_WIN32_VS_H_INCLUDED +#define PCAP2TZSP_WIN32_VS_H_INCLUDED + +/* Basics */ +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> /* Consider using msinttypes for Visual Studio */ +#include <signal.h> +#include <string.h> +#define my_snprintf sprintf_s /* snprintf "compatiblity" */ + +/* Packet capture stuff */ +#include <pcap.h> + +/* UDP stuff */ +#include <winsock2.h> +#include <ws2tcpip.h> + +/* Time management (for bwlimit) */ +#include <time.h> + +/* Args parsing and basename() for usage */ +#undef _UNICODE +#include <getopt.h> /* Consider using getopt4win for WIN32 */ + +/* Poor's men hand-written basename. +With calloc() and this is diffent from POSIX basename() */ +char * basename(const char *path) { + errno_t e; + size_t len1, len2; + char filename[256], ext[8]; + char *res=NULL; + + e=_splitpath_s(path, NULL, 0, NULL, 0, filename, 256, ext, 8); + if (e != 0) { + res=strdup(""); + } else { + len1=strlen(filename); + len2=strlen(ext); + res=calloc(len1+len2 + 1, sizeof(char)); + if ( res != NULL ) { + strcpy_s(res, len1+1, filename); + strcpy_s(res+len1, len2+1, ext); + } + } + return res; +} + +#endif // PCAP2TZSP_WIN32_VS_H_INCLUDED |