Dimi Dimi - 1 month ago 19
C# Question

Get MAC address via TCPListener in C#

Is it possible to get MAC Address of remote client via TCPListener in C#?

using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;

namespace TCPserver
{
class Program
{
private const int BUFSIZE = 32;

static void Main(string[] args)
{
if (args.Length > 1) // Test for correct of args
throw new ArgumentException("Parameters: [<Port>]");

int servPort = (args.Length == 1) ? Int32.Parse(args[0]) : 7;

TcpListener listener = null;

try
{
// Create a TCPListener to accept client connections
listener = new TcpListener(IPAddress.Any, servPort);
listener.Start();
}
catch (SocketException se)
{
Console.WriteLine(se.Message);
Environment.Exit(se.ErrorCode);
}

byte[] rcvBuffer = new byte[BUFSIZE]; // Receive buffer
int bytesRcvd; // Received byte count

for (; ; )
{ // Run forever, accepting and servicing connections

TcpClient client = null;
NetworkStream ns = null;
try
{
client = listener.AcceptTcpClient(); // Get client connection
ns = client.GetStream();
Console.Write("Handling client - ");

// Receive until client closes connection
int totalBytesEchoed = 0;
while ((bytesRcvd = ns.Read(rcvBuffer, 0, rcvBuffer.Length)) > 0)
{
ns.Write(rcvBuffer, 0, bytesRcvd);
totalBytesEchoed += bytesRcvd;
}
Console.WriteLine("echoed {0} bytes.", totalBytesEchoed);

ns.Close();
client.Close();

}
catch (Exception e)
{
Console.WriteLine(e.Message);
ns.Close();
}
}
}
}
}

Answer

No. The MAC address is part of the Link layer, only used to communicate two hosts in the same physical link.

Oversimplifying..., imagine that a and c are computers, and b is a router.

a <-> b <-> c

If a wants to send a packet to c, it has to go through b. So a sends packet with source IP address a, target IP address c, source MAC address a and target MAC address b, since the router is the next hop. Then when b gets that packet, it will send it to c using source IP address a, target IP address c, source MAC address b and target MAC address c.

Comments