-
Notifications
You must be signed in to change notification settings - Fork 1
/
Program.cs
76 lines (62 loc) · 2.52 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System;
using System.Net;
using System.Runtime.InteropServices;
namespace PacketSnifferNET
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct PacketData
{
public int length;
public int s_port;
public int d_port;
[MarshalAs(UnmanagedType.LPStr)]
public string protocal;
[MarshalAs(UnmanagedType.LPStr)]
public string s_addr;
[MarshalAs(UnmanagedType.LPStr)]
public string d_addr;
}
class Program
{
[DllImport(@"packetsniffer.so", EntryPoint = "capture", CallingConvention = CallingConvention.StdCall)]
public static extern int capture(string iface, [MarshalAs(UnmanagedType.FunctionPtr)]CallbackFun callback_f);
public delegate void CallbackFun(IntPtr data);
static void CSCallbackFun(IntPtr data)
{
PacketData p = (PacketData)Marshal.PtrToStructure(data, typeof(PacketData));
RawSocket.PacketArrivedEventArgs args = new RawSocket.PacketArrivedEventArgs();
args.MessageLength = (uint)p.length;
args.Protocol = p.protocal;
args.OriginationPort = p.s_port.ToString();
args.DestinationPort = p.d_port.ToString();
args.OriginationAddress = p.s_addr;
args.DestinationAddress = p.d_addr;
args.IPVersion = "IPv4";
DataArrival(null, args);
}
static void Main(string[] args)
{
if (OperatingSystem.IsWindows())
{
string IPString = "192.168.50.161";
var myRawSock = new RawSocket();
myRawSock.CreateAndBindSocket(IPString);
myRawSock.PacketArrival += new RawSocket.PacketArrivedEventHandler(DataArrival);
myRawSock.KeepRunning = true;
myRawSock.Run();
Console.ReadLine();
myRawSock.Shutdown();
}
else
{
//If your are running under macOS, make sure you pass the correct interface name.
capture("en0", CSCallbackFun);
}
}
private static void DataArrival(Object sender, RawSocket.PacketArrivedEventArgs e)
{
if (e.Protocol.ToUpper() == "TCP")
Console.WriteLine(e.OriginationAddress + " - " + e.OriginationPort + " - " + e.DestinationAddress + " - " + e.DestinationPort + " - " + e.Protocol + " - " + e.PacketLength + " - " + e.HeaderLength + " - " + e.IPVersion);
}
}
}