Я считаю, что проблема заключается в том, что вы привязываетесь к IP-шлейфу, предполагая, что в вашем коде 'LOCALHOST' подразумевается 127.0.0.1.Попробуйте связать с IP-адресом интерфейса, для которого вы хотите перехватить пакеты.
Я взял ваш код и провел быстрый тест, и определенно вижу, как данные текут в обоих направлениях, используя Windows 7. NB Я использую это как администратор, не уверен, насколько хорошо это работает в противном случае.
using (Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP))
{
sock.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.121"), 0));
sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
sock.IOControl(IOControlCode.ReceiveAll, BitConverter.GetBytes(1), null);
while (true)
{
byte[] buffer = new byte[sock.ReceiveBufferSize];
int count = sock.Receive(buffer);
IpHeader hdr = IpHeader.FromPacket(buffer, count);
if ((ProtocolType)hdr.Protocol == ProtocolType.Tcp)
{
Console.WriteLine("{0} : {1} -> {2}", (ProtocolType)hdr.Protocol, new IPAddress(hdr.SrcAddr).ToString(), new IPAddress(hdr.DestAddr).ToString());
}
}
}
IpHeader из библиотеки, которую я написал несколько лет назад , я использовал это для быстрого декодированияпакеты, чтобы убедиться, что я видел данные в обоих направлениях.
Вот быстрый захват из кода выше для проверки (AA.BB.CC.DD - мой публичный IP)
Tcp : 83.221.14.72 -> AA.BB.CC.DD
Tcp : AA.BB.CC.DD -> 83.221.14.72
Tcp : 83.221.14.72 -> AA.BB.CC.DD
Tcp : 83.221.14.72 -> AA.BB.CC.DD
Tcp : AA.BB.CC.DD -> 83.221.14.72
Tcp : 83.221.14.72 -> AA.BB.CC.DD
Tcp : 83.221.14.72 -> AA.BB.CC.DD
Tcp : AA.BB.CC.DD -> 83.221.14.72
Tcp : AA.BB.CC.DD -> 83.221.14.72
Tcp : AA.BB.CC.DD -> 83.221.14.72
Tcp : 83.221.14.72 -> AA.BB.CC.DD
Tcp : 83.221.14.72 -> AA.BB.CC.DD
Tcp : AA.BB.CC.DD -> 83.221.14.72