|
Номер TCP порта по имени?
|
|||
---|---|---|---|
#18+
Есть ли какой-нибудь стандартный способ получить номер порта, если известно имя службы (т.е. соответствие из файла system32\drivers\etc\services) или наоборот, имя службы по номеру порта? Но так, чтобы не писать обёртки для виндовых DLL и не читать содержимое этого файла напрямую? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2013, 15:21 |
|
Номер TCP порта по имени?
|
|||
---|---|---|---|
#18+
а если я напишу свою службу, то как определить какой порт она прослушивает? И что делать, если одна служба прослушивает несколько портов? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2013, 15:40 |
|
Номер TCP порта по имени?
|
|||
---|---|---|---|
#18+
...вот тут, как сам автор признает, корявый велосипед с использованием парсинга netstat и WMI .... http://dobrzanski.net/2012/01/09/how-to-get-service-name-listening-at-specific-port-number/ ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2013, 15:45 |
|
Номер TCP порта по имени?
|
|||
---|---|---|---|
#18+
Я смотрю, обсуждение ушло немного в другую сторону, я же не это спрашивал. Ладно, упростим вопрос. Нарыл вот такой пример (и он работает): Код: c# 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.
Так вот. У меня вопрос - можно ли обойтись без DllImport? Или хотя бы сделать так, чтобы в свойствах проекта не надо было указывать "Разрешить небезопасный код" (unsafe), если уж без обёрток не обойтись? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2013, 10:14 |
|
Номер TCP порта по имени?
|
|||
---|---|---|---|
#18+
spam19701У меня вопрос - можно ли обойтись без DllImport нет spam19701Или хотя бы сделать так, чтобы в свойствах проекта не надо было указывать "Разрешить небезопасный код" (unsafe), если уж без обёрток не обойтись? да. getservbyname должа возвратить IntPtr, структуру servent сделать безопасной, указатели в ней не нужны - заменить на IntPtr, получить структуру из указателя, возвращённого getservbyname - Marshal.PtrToStructure ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2013, 10:27 |
|
Номер TCP порта по имени?
|
|||
---|---|---|---|
#18+
Спасибо, убрать unsafe получилось: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Только вот какой вопрос у меня возник (хотя в данном случае мне это не надо, но чисто с познавательной целью) Если мне надо было бы обратиться к s_name, я бы наверно написал так: Marshal.PtrToStringAnsi(ServEnt.s_name); А что если бы мне надо было бы обратиться к какому-то элементу s_aliases (это ж, я так понимаю, указатель на начало массива указателей на строки). Как мне, к примеру, обратиться к 3-й строке, при таком моём описании структуры? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2013, 12:35 |
|
Номер TCP порта по имени?
|
|||
---|---|---|---|
#18+
spam19701Если мне надо было бы обратиться к s_name, я бы наверно написал так: Marshal.PtrToStringAnsi(ServEnt.s_name); Можно и так, но маршаллер справится самостоятельно - public string s_proto; //char* s_proto; -этого достаточно spam19701А что если бы мне надо было бы обратиться к какому-то элементу s_aliases например так - Код: c# 1. 2. 3. 4. 5. 6. 7.
Предупреждение! в 32 и 64 битах структура servent имеет разный порядок полей! для x64 - Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2013, 14:49 |
|
Номер TCP порта по имени?
|
|||
---|---|---|---|
#18+
ИзопропилПредупреждение! в 32 и 64 битах структура servent имеет разный порядок полей! Вот те раз... Час от часу не легче. Интересно, зачем это понадобилось Microsoft - чтоб всех запутать? :-) И как же в таких случаях правильно поступать? Нет ли у JIT - компилятора какого-нибудь аналога условной компиляции, чтобы он в зависимости от разрядности проги перевёл в машинный код либо тот, либо другой кусок во время старта? Или придётся только в программе анализировать разрядность этого пресловутого IntPtr, и в зависимости от нее вызывать ту или иную функцию, которая будет использовать соответственно ту или иную структуру? Как-то совсем не кузяво. А там, смотришь, и 128 разрядов не за горами, там опять свои структуры небось :-) Потому и хотелось бы обходиться без обёрток, но "родные" средства есть не для всего... Интересно, и много ль ещё таких структур, которые имеют другой порядок полей? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2013, 20:04 |
|
Номер TCP порта по имени?
|
|||
---|---|---|---|
#18+
Вот такая фигня что ль получится? Код: c# 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.
Или можно как-нибудь попроще и покрасивее? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2013, 20:43 |
|
Номер TCP порта по имени?
|
|||
---|---|---|---|
#18+
spam19701Вот те раз... Час от часу не легче. Интересно, зачем это понадобилось Microsoft - чтоб всех запутать? :-) Для c/c++ - не имеет значения, исходили из желания выровнять поля spam19701Нет ли у JIT - компилятора какого-нибудь аналога условной компиляции, чтобы он в зависимости от разрядности проги перевёл в машинный код либо тот, либо другой кусок во время старта? это решается подключением сборок собраных под тот или иной режим (как управляемых так и нативных dll) spam19701Интересно, и много ль ещё таких структур, которые имеют другой порядок полей? насколько я знаю - немного, но при написании P/Invoke имеет смысл заглядывать в .h файлы. В документации может быть не описано(как в случае servent) spam19701Вот такая фигня что ль получится? почти :) WSAStartup - эту хрень лучше не вызывать самому , достаточно обратиться предварительно к любому сокетному объекту ( new TcpListener() например вызвать) вариант говнокода : Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2013, 22:28 |
|
|
start [/forum/topic.php?fid=20&msg=38360479&tid=1404233]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
59ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 331ms |
total: | 487ms |
0 / 0 |