Страницы

Поиск по вопросам

Показаны сообщения с ярлыком трафик. Показать все сообщения
Показаны сообщения с ярлыком трафик. Показать все сообщения

воскресенье, 29 декабря 2019 г.

Найти общий объем загруженной информации приложением на c#

#c_sharp #winforms #сеть #трафик


Есть приложение winforms на c#. Иногда оно обращается с запросами к разным интернет
ресурсам, получает ответы. Можно ли как-то узнать, сколько Mb было скачано за одну
сессию работы с приложением. То есть мне нужно просто узнать объем траффика через мое
приложение. Спасибо
    


Ответы

Ответ 1



Можно использовать счетчики производительности .NET CLR Networking. Для этого необходимо включить в раздел configuration файла app.config следующий элемент: Счетчики позволяют получить количество байт, отправленных и полученных средствами классов .NET, для указанного процесса. Создадим вспомогательный класс: using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Threading; using System.Net; using System.Text; namespace WinformsTest { public class NetworkStats { const string CategoryName = ".NET CLR Networking 4.0.0.0";//В .NET 2.0-3.5 заменить на ".NET CLR Networking" static PerformanceCounter _sentcounter = null; static PerformanceCounter _recvcounter = null; public static long BytesSent { get { if (_sentcounter == null) throw new InvalidOperationException("Class not initialized"); return _sentcounter.RawValue; } } public static long BytesReceived { get { if (_recvcounter == null) throw new InvalidOperationException("Class not initialized"); return _recvcounter.RawValue; } } public static bool Initialize() { //устанавливаем культуру, чтобы иметь предсказуемое имя счетчика CultureInfo ci = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture; try { var category = new PerformanceCounterCategory(CategoryName); //для активации счетчиков нужно отправить хотя бы один запрос, неважно успешный или нет try { WebClient cl = new WebClient(); string html = cl.DownloadString("http://example.com"); Debug.WriteLine(html.Length); } catch (Exception ex) { Debug.WriteLine(ex.Message); } //получаем имя процесса Process pr = Process.GetCurrentProcess(); string prname = ""; using (pr) { prname = (pr.ProcessName.ToLower()); } var instances = category.GetInstanceNames(); //находим экземпляр счетчика для процесса string instance = ""; foreach (string s in instances) { if (s.ToLower().Contains(prname)) instance = s; } if (instance == "") return false; //создаем счетчики _sentcounter = new PerformanceCounter(CategoryName, "Bytes Sent", instance, true); _recvcounter = new PerformanceCounter(CategoryName, "Bytes Received", instance, true); return true; } finally { //возвращаем исходную культуру Thread.CurrentThread.CurrentCulture = ci; Thread.CurrentThread.CurrentUICulture = ci; } } } } Пример использования: public partial class Form1 : Form { public Form1() { InitializeComponent(); if (NetworkStats.Initialize() == false) { MessageBox.Show("NetworkStats.Initialize failed"); return; } timer1.Enabled = true; } public string PerformRequest(string url) { WebClient cl = new WebClient(); string html = cl.DownloadString(url); return html; } private void button1_Click(object sender, EventArgs e) { string s = PerformRequest("http://yandex.ru"); MessageBox.Show(s.Substring(0,300)); } private void timer1_Tick(object sender, EventArgs e) { textBox1.Text = "Bytes sent: " + NetworkStats.BytesSent.ToString() + "; Bytes received: " + NetworkStats.BytesReceived.ToString(); } }

пятница, 27 декабря 2019 г.

Статистика сетевой активности процесса

#c_sharp #net #visual_studio #сеть #трафик


Никак не могу найти возможности определить сетевую активность процесса(ов), сколько
принял и сколько отправил байт, хотя монитор ресурсов Windows это легко делает. Есть
хоть какие примеры по данной тематике (можно примеры и WinAPI, Basic)?  
    


Ответы

Ответ 1



Для отслеживания событий передачи данных по сети в Windows существует механизм Event Tracing. Чтобы использовать его в .NET, можно подключить библиотеку TraceEvent и обрабатывать события TcpIpRecv/TcpIpSend провайдера Microsoft-Windows-Kernel-Network, содержащие размер переданных или полученных байт: using System; using System.Collections.Generic; using System.Data; using System.Text; using System.Diagnostics; using System.Threading; using Microsoft.Diagnostics.Tracing.Parsers; using Microsoft.Diagnostics.Tracing.Session; namespace ConsoleApplication1 { class Program { static TraceEventSession m_EtwSession; static void ThreadProc() { int pid = Process.GetProcessesByName("Program")[0].Id; using (m_EtwSession = new TraceEventSession(KernelTraceEventParser.KernelSessionName)) { m_EtwSession.StopOnDispose = true; m_EtwSession.EnableKernelProvider(KernelTraceEventParser.Keywords.NetworkTCPIP); m_EtwSession.Source.Kernel.TcpIpRecv += data => { if (data.ProcessID == pid) { Console.WriteLine("Received: " + data.size.ToString() + " bytes "); } }; m_EtwSession.Source.Kernel.TcpIpSend += data => { if (data.ProcessID == pid) { Console.WriteLine("Sent: " + data.size.ToString() + " bytes "); } }; m_EtwSession.Source.Process(); } } public static void Main(string[] argv) { Thread th = new Thread(ThreadProc); th.IsBackground = true; th.Start(); Console.WriteLine("Press any key to stop tracing..."); Console.ReadKey(); m_EtwSession.Dispose(); } } }

суббота, 30 ноября 2019 г.

Откуда берется интернет?

#интернет #трафик


Понимаю, что вопрос тупой, но все же, он меня мучает.Что такое интернет я понимаю.
Мне непонятен один ньюанс лишь:Есть провайдеры, которые продают трафик, откуда они
его берут?Я знаю одного провайдера (мой знакомый), он берет и покупает "оптом" трафик
у другого провайдера, бьет на более мелкую ширину канала и продает сам, как провайдер.Ок,
допустим, подавляющее большинство провайдеров (наверное) берут также трафик у кого-то
другого, а откуда берет трафик этот "кто-то другой" ?Возможно, вопрос мой совсем идиотский,
скажите хоть что гуглить.Спасибо.    


Ответы

Ответ 1



Из точек обмена трафиком. А также почитайте про пиринг

Ответ 2



Я вот по этим ссылкам не ходил (что дали свыше). Но как бы там оно ни было, интернет - это соединение (объединение) всех компьютеров в мире в одну глобальную сеть при помощи проводов или же без оных (к чему сейчас большинство стремится). Напр., захотел я с соседом соединить наши ПК, соединили. Пришел еще один сосед сказал: - Я тож хочу, возьмите меня к себе? А мы ему, допустим - 5 руб. в день плати и будешь в нашей ко. Вот так оно и завертелось (я думаю, не стоит описывать все, что происходило при 1-ых зачатках, об этом можно, действительно, в статьях почитать).

Ответ 3



Интересный вопрос.Аналог - а откуда берётся воздух? или вода?Или почему дует ветер :)Но всё же есть, над чем подумать.Вот он! Великий! И могучий!см. его схемаЭто как вода, которую гоняют по трубам, из больших в маленькие, из маленьких в большие.Ведь вода автономна, так и интернет, у него нет прямого источника (как у нефтяной скважины). Он как-бы аморфен (я про трафик). Трафик это движение, поток.А ресурсы люди сами делают. Картинки, фильмы, сайты и прочее и прочее...И так продолжается аж с прошлого тысячелетия :)

Ответ 4



Ну для начала, уважаемый, вам бы надо выстроить локальную сеточку с хорошими мощностями. Т.е. коммутационным оборудованием с хорошей пропускной способностью, небольшим серверочком / серверочками (внимание! не на основе домашнего PC!) для управления сей сеткой, поднять несколько DNS-ов, что-нибудь для авторизации (radius там, ну или AD - если деньга позволит), хорошим запасом места на системах хранения данных (внимание, не винчестером SATA на 2Т!) и т.д. и т.п. Выйдет как минимум в стойку. Учтите, что сетка должна быть не в пределах одной комнаты/дома, а "многосекторная", где сектора будут объединяться как минимум парой каналов (резервный и основной). Вобщем, железо, железо и железо. После этого открываетесь как ООО (например) ну или ЗАО. И идёте потом в MSK-IX (мских) с предложением, мол, "я такой вот крутой и замечательный, построил небольшую локальную сеточку с несколькими независимыми секторами, объединил ей на первое время квартал в своём родном городе (посёлке/деревне) и вот уж очень хочу стать провайдером, пустите меня, пожалуйста, в свой сладкий круг". Уважаемая мских рассмотрит ваше предложение и если вы действительно сделаете всё указанное - то как минимум предложит вам для начала обратиться к своему дочернему IX. Ну а если у вас хорошее покрытие - то может и сразу вас в свои "дочки" принять. Тут уже документы-документы-документы. Ну а потом вы уж и сами знаете что делать ;)

понедельник, 8 июля 2019 г.

Wireshark разница между двумя фильтрами

Фильтр 1 : !(ip.addr == X.X.X.X) Фильтр 2 : ip.addr != X.X.X.X В обеих фильтрах правое выражение одинаковое. В чем между ними разница? А разница есть, т.к. один и тот же буфер после фильтрации выдает разные результаты. Спасибо.


Ответ

Разница между ними есть. !(ip.addr == X.X.X.X) значит ! (ip.src == X.X.X.X or ip.dst == X.X.X.X), то есть показать весь трафик кроме источника или назначения X.X.X.X. А ip.addr != X.X.X.X значит ip.src != X.X.X.X or ip.dst != X.X.X.X, то есть показать весь трафик кроме источника и назначения X.X.X.X. Подробнее про фильтры можно здесь почитать https://wiki.wireshark.org/DisplayFilters#Examples

четверг, 20 июня 2019 г.

Как анализировать пакеты на уровне Java?

Возможно ли анализировать трафик (приходящие пакеты) на уровне Java?
Если возможно, то как и правильно ли так делать?


Ответ

Я бы порекомендовал PCAP https://ru.wikipedia.org/wiki/Pcap Используй jNetPcap (http://jnetpcap.com/) PCAP является стандартным решением для собственных таких программ

пятница, 14 декабря 2018 г.

Найти общий объем загруженной информации приложением на c#

Есть приложение winforms на c#. Иногда оно обращается с запросами к разным интернет ресурсам, получает ответы. Можно ли как-то узнать, сколько Mb было скачано за одну сессию работы с приложением. То есть мне нужно просто узнать объем траффика через мое приложение. Спасибо


Ответ

Можно использовать счетчики производительности .NET CLR Networking. Для этого необходимо включить в раздел configuration файла app.config следующий элемент:

Счетчики позволяют получить количество байт, отправленных и полученных средствами классов .NET, для указанного процесса. Создадим вспомогательный класс:
using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Threading; using System.Net; using System.Text;
namespace WinformsTest { public class NetworkStats { const string CategoryName = ".NET CLR Networking 4.0.0.0";//В .NET 2.0-3.5 заменить на ".NET CLR Networking"
static PerformanceCounter _sentcounter = null; static PerformanceCounter _recvcounter = null;
public static long BytesSent { get { if (_sentcounter == null) throw new InvalidOperationException("Class not initialized"); return _sentcounter.RawValue; } }
public static long BytesReceived { get { if (_recvcounter == null) throw new InvalidOperationException("Class not initialized"); return _recvcounter.RawValue; } }
public static bool Initialize() { //устанавливаем культуру, чтобы иметь предсказуемое имя счетчика CultureInfo ci = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
try { var category = new PerformanceCounterCategory(CategoryName);
//для активации счетчиков нужно отправить хотя бы один запрос, неважно успешный или нет try { WebClient cl = new WebClient(); string html = cl.DownloadString("http://example.com"); Debug.WriteLine(html.Length); } catch (Exception ex) { Debug.WriteLine(ex.Message); }
//получаем имя процесса Process pr = Process.GetCurrentProcess(); string prname = ""; using (pr) { prname = (pr.ProcessName.ToLower()); } var instances = category.GetInstanceNames();
//находим экземпляр счетчика для процесса string instance = ""; foreach (string s in instances) { if (s.ToLower().Contains(prname)) instance = s; } if (instance == "") return false;
//создаем счетчики _sentcounter = new PerformanceCounter(CategoryName, "Bytes Sent", instance, true); _recvcounter = new PerformanceCounter(CategoryName, "Bytes Received", instance, true); return true; } finally { //возвращаем исходную культуру Thread.CurrentThread.CurrentCulture = ci; Thread.CurrentThread.CurrentUICulture = ci; }
} } }
Пример использования:
public partial class Form1 : Form { public Form1() { InitializeComponent(); if (NetworkStats.Initialize() == false) { MessageBox.Show("NetworkStats.Initialize failed"); return; } timer1.Enabled = true; }
public string PerformRequest(string url) { WebClient cl = new WebClient(); string html = cl.DownloadString(url); return html; }
private void button1_Click(object sender, EventArgs e) { string s = PerformRequest("http://yandex.ru"); MessageBox.Show(s.Substring(0,300)); }
private void timer1_Tick(object sender, EventArgs e) { textBox1.Text = "Bytes sent: " + NetworkStats.BytesSent.ToString() + "; Bytes received: " + NetworkStats.BytesReceived.ToString(); } }

пятница, 5 октября 2018 г.

Откуда берется интернет?

Понимаю, что вопрос тупой, но все же, он меня мучает.Что такое интернет я понимаю. Мне непонятен один ньюанс лишь:Есть провайдеры, которые продают трафик, откуда они его берут?Я знаю одного провайдера (мой знакомый), он берет и покупает "оптом" трафик у другого провайдера, бьет на более мелкую ширину канала и продает сам, как провайдер.Ок, допустим, подавляющее большинство провайдеров (наверное) берут также трафик у кого-то другого, а откуда берет трафик этот "кто-то другой" ?Возможно, вопрос мой совсем идиотский, скажите хоть что гуглить.Спасибо.


Ответ

Из точек обмена трафиком А также почитайте про пиринг