Code Monkey home page Code Monkey logo

net-tools's Introduction

                                README

                Information about the net-tools package

NET-TOOLS	A collection of programs that form the base set of the
		NET-3 networking distribution for the Linux operating
		system.

This package includes the important tools for controlling the network
subsystem of the Linux kernel.  This includes arp, hostname, ifconfig,
netstat, rarp and route.  Additionally, this package contains
utilities relating to particular network hardware types (plipconfig,
slattach, mii-tool) and advanced aspects of IP configuration (iptunnel,
ipmaddr).

Please include the output of "program --version" when reporting bugs.


Contents:

   README		This file.

   INSTALLING		Installation instructions.

   COPYING		Your free copy of the GNU General Public License.

   TODO			Some things that need to be done.

The Homepage (including Git repository, release downloads, bug tracker and
mailing list) is hosted by SourceForge.net. Please consider joining the project
if you want to contribute:

           https://sourceforge.net/projects/net-tools/


                          Notes
                          -----

This is net-tools 3.14.

These have largely been tested against Linux kernels 2.6+.  They might work
against older ones if anyone actually still cares about those anymore.

They have largely been tested against recent glibc versions, but should work
on any POSIX compliant C library.  If you notice portability issues, please
flie a bug for us (or even send a patch!).

The NLS support by Arnaldo Carvalho de Melo <[email protected]> uses GNU
gettext.  Translations to Brazilian Portuguese (pt_BR), German (de), Estonian
(ee), Czech (cz), and French (fr) are available.  Others are welcome!

route/netstat -r do not yet support different address families cleanly.
IPX/DDP/AX25 people, please feel free to add the code.

Mike Frysinger
[email protected]

Phil Blundell
[email protected]

Bernd Eckenfels
[email protected]

net-tools's People

Contributors

anomen-s avatar borneoa avatar bwhacks avatar cpatulea avatar doughdemon avatar ecki avatar efeller avatar f6bvp avatar florianl avatar fxkr avatar gjolly avatar granjow avatar gunhu avatar hannob avatar jaalto avatar jakubjelinek avatar jpopelka avatar karelzak avatar lkundrak avatar low-power avatar mruprich avatar negatratoron avatar nighttsarina avatar odehnaltomas avatar philb avatar ptalbert avatar ralfbaechle avatar robertsong2000 avatar superjamie avatar vapier avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

net-tools's Issues

SocketException in example/lib/scan/mdns_scan.dart

I ran example/lib/scan/mdns_scan.dart and got the following error:

C:/a_dev/flutter-sdk/bin/cache/dart-sdk/bin/dart.exe --enable-asserts C:\Users\xmlspyspring\IdeaProjects\network_tools\example\lib\scan\mdns_scan.dart
Unhandled exception:
SocketException: Failed to create datagram socket (OS Error: 在其上下文中,该请求的地址无效。---> In its context, the requested address is invalid 
, errno = 10049), address = , port = 5353
#0      _NativeSocket.bindDatagram (dart:io-patch/socket_patch.dart:1051:7)
<asynchronous suspension>
#1      _RawDatagramSocket.bind.<anonymous closure> (dart:io-patch/socket_patch.dart:2558:15)
<asynchronous suspension>
#2      MDnsClient.start (package:multicast_dns/multicast_dns.dart:135:40)
<asynchronous suspension>
#3      MdnsScannerServiceImpl.findingMdnsWithAddress (package:network_tools/src/services/impls/mdns_scanner_service_impl.dart:73:5)
<asynchronous suspension>

Process finished with exit code 255

My Environment: windows 10 chinese

PS C:\Users\xmlspyspring\IdeaProjects\network_tools> dart --version
Dart SDK version: 3.3.1 (stable) (Wed Mar 6 13:09:19 2024 +0000) on "windows_x64"

Distributions patches

Debian: https://salsa.debian.org/debian/net-tools/-/tree/debian/sid/debian/patches
( git clone https://salsa.debian.org/debian/net-tools.git net-tools-debian )
@NightTsarina @utkarsh2102

  • Add_missing_headers.patch
  • Bug_549397-fix-decoding-of-MII-vendor-ids.pach
  • Bug_900962-man-de-typos.patch
  • man-fr_FR-route.8.patch
  • translations.patch

SuSE: https://build.opensuse.org/package/show/openSUSE%3AFactory/net-tools
@lnussel @dirkmueller

  • net-tools-configure.patch
  • 0001-Add-ether-wake-binary.patch
  • 0002-Do-not-warn-about-interface-socket-not-binded.patch
  • 0004-By-default-do-not-fopen-anything-in-netrom_gr.patch
  • 0006-Allow-interface-stacking.patch
  • 0007-Introduce-T-notrim-option-in-netstat.patch

PLD: https://git.pld-linux.org/?p=packages/net-tools.git;a=tree
( git clone git://git.pld-linux.org/packages/net-tools.git net-tools-pld )
@arekm

  • net-tools-config.patch
  • net-tools-interface.patch
  • net-tools-make_config_h.patch
  • net-tools-man.patch
  • net-tools-netstat-netlink-diag.patch
  • net-tools-opt.patch
  • net-tools-tr.patch

Fedora: https://src.fedoraproject.org/rpms/net-tools/tree/rawhide
( git clone https://src.fedoraproject.org/rpms/net-tools.git net-tools-fedora )
@mruprich

  • ether-wake.*
  • iptunnel.*
  • mii-diag.*
  • *.patch for net-tools-2.0

device memory range may be truncated to 32-bits

Compare the kernel output:

root@aarch64-1:~# cat /sys/module/igb/drivers/pci\:igb/0002\:01\:00.0/resource
0x0000001030000000 0x00000010300fffff 0x0000000000040200
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000001030200000 0x0000001030203fff 0x0000000000040200
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000001030100000 0x00000010301fffff 0x0000000000046200
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 0x0000000000000000

to our current net-tools package:

root@aarch64-1:~# setarch linux32 chroot x ifconfig enP2p1s0
enP2p1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 140.211.9.227  netmask 255.255.255.0  broadcast 140.211.9.255
        inet6 2605:bc80:3010:104::8cd3:9e3  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::21b:21ff:fedc:4eb3  prefixlen 64  scopeid 0x20<link>
        ether 00:1b:21:dc:4e:b3  txqueuelen 1000  (Ethernet)
        RX packets 12089330  bytes 7057828892 (6.5 GiB)
        RX errors 0  dropped 534  overruns 532  frame 0
        TX packets 958695  bytes 84581028 (80.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0x30000000-300fffff

to the Toybox output:

root@aarch64-1:~# ./toybox-aarch64 ifconfig enP2p1s0
enP2p1s0  Link encap:Ethernet  HWaddr 00:1b:21:dc:4e:b3  Driver igb
          inet addr:140.211.9.227  Bcast:140.211.9.255  Mask:255.255.255.0
          inet6 addr: 2605:bc80:3010:104::8cd3:9e3/64 Scope: Global
          inet6 addr: fe80::21b:21ff:fedc:4eb3/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12089535 errors:0 dropped:534 overruns:532 frame:0
          TX packets:958733 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:7057846040 TX bytes:84587448
          Memory:1030000000-10300fffff

It seems the net-tools version prints only 8 characters, or 32 bits.

See also:

netstat: command not found - Alpine Linux

I am building an alpine based docker image, in which I have installed "net-tools" using apk add --no-cache --update net-tools
But when I run the docker image the output in the console is netstat: command not found
Oddly enough when I install anything (any apk i.e. nano, htop etc.) the "netstat" begins to produce output.
For example, After deploying the container, if I run: apk add --no-cache --update htop
The netstat starts working. Until this, the output was netstat: command not found
I have found the REASON for this issue is, the "netstat" is not present /bin directory until another program is installed!
As soon as another program gets installed, the "netstat" somehow appears in the /bin directory!
This is very strange!
Why wouldn't "netstat" be present in the /bin directory until another program is installed?
I am using alpine:latest as base image.
Can anyone look into this? Many thanks in advance.

ifconfig: get specific parameter value.

In ifconfig:
We can use parameters to print values instead of printing usage msg.

eg:
-> ifconfig enp4s0 mtu
prints usage msg.

Change to:
-> ifconfig enp4s0 mtu
1500.

netstat/Question[Bug?]: multicast group membership prints tcp/udp connections as well? (-g46)

>./netstat -g46
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 burning-barricade:32900 ec2-3-68-18-70.eu:https ESTABLISHED
tcp        0      0 burning-barricade:60010 ec2-3-67-131-16.e:https ESTABLISHED
tcp       25      0 burning-barricade:34626 server-18-66-248-:https CLOSE_WAIT 
tcp        0      0 burning-barricade:51954 93.243.107.34.bc.:https ESTABLISHED
tcp       25      0 burning-barricade:34634 server-18-66-248-:https CLOSE_WAIT 
tcp        0      0 burning-barricade:38354 40.99.204.114:imaps     ESTABLISHED
tcp        0      0 burning-barricade:32912 ec2-3-68-18-70.eu:https ESTABLISHED
tcp        0      0 burning-barricade:53502 ec2-52-3-167-79.c:https ESTABLISHED
tcp        0      0 burning-barricade:32898 ec2-3-68-18-70.eu:https ESTABLISHED
tcp        0      0 burning-barricade:55342 46.101.105.92:https     ESTABLISHED
tcp        0      0 burning-barricade:43164 lb-140-82-112-25-:https ESTABLISHED
tcp        0      0 burning-barricade:41790 cdn-185-199-110-1:https ESTABLISHED
tcp        0      0 burning-barricade:32920 ec2-3-68-18-70.eu:https ESTABLISHED
tcp        0      0 burning-barricade:58844 wa-in-f109.1e100.:imaps ESTABLISHED
udp        0      0 burning-barricad:bootpc _gateway:bootps         ESTABLISHED
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      239.255.255.250
lo              1      mdns.mcast.net
lo              1      all-systems.mcast.net
enp2s0f0        1      all-systems.mcast.net
enp5s0          1      all-systems.mcast.net
enp7s0f3u1u4c2  1      all-systems.mcast.net
wlp3s0          1      239.255.255.250
wlp3s0          1      224.0.0.252
wlp3s0          1      mdns.mcast.net
wlp3s0          1      all-systems.mcast.net
virbr0          1      239.255.255.250
virbr0          1      mdns.mcast.net
virbr0          1      all-systems.mcast.net
virbr0          1      224.0.0.106
docker0         1      239.255.255.250
docker0         1      224.0.0.252
docker0         1      mdns.mcast.net
docker0         1      all-systems.mcast.net
docker0         1      224.0.0.106
veth80b67b4     1      all-systems.mcast.net
lo              1      ff02::fb
lo              1      ff02::1
lo              1      ff01::1
enp2s0f0        1      ff02::1
enp2s0f0        1      ff01::1
enp5s0          1      ff02::1
enp5s0          1      ff01::1

Is that behaviour deliberate or a bug?

[mii-tool]Can't change mode!

Enviroment:

  • mii-tool
# mii-tool -V
net-tools 2.10-alpha
David Hinds based on Donald Becker's mii-diag
  • nic
0001:2c:00.3 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0, Cache Line Size: 128 bytes
        Interrupt: pin D routed to IRQ 277
        NUMA node: 0
        Region 0: Memory at f0e1c60000 (32-bit, non-prefetchable) [size=128K]
        Region 2: I/O ports at f600003060 [disabled] [size=32]
        Region 3: Memory at f0e1c8c000 (32-bit, non-prefetchable) [size=16K]
        Capabilities: <access denied>
        Kernel driver in use: igb
  • kernel
    4.19.8
  • modules
Module                  Size  Used by
mii                     9065  0
ntfs                  272491  0
ipv6                  494101  48
megaraid_sas          171353  0

Whether mii exists or not, the result is the same.
phenomenon

# mii-tool -v enP1p44s0f3
enP1p44s0f3: negotiated, link ok
  product info: vendor 00:55:00, model 59 rev 1
  basic mode:   autonegotiation enabled
  basic status: autonegotiation complete, link ok
  capabilities: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  advertising:  flow-control
  link partner: 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

# mii-tool -F 100baseTx-HD enP1p44s0f3 
SIOCSMIIREG on enP1p44s0f3 failed: Operation not supported

##############################################################
# ethtool enP1p44s0f3
Settings for enP1p44s0f3:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: Symmetric
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  1000baseT/Full
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: off (auto)
Cannot get wake-on-lan settings: Operation not permitted
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

# ethtool -s enP1p44s0f3 autoneg off speed 100 duplex half
# ethtool enP1p44s0f3
Settings for enP1p44s0f3:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Full 
        Supported pause frame use: Symmetric
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  Not reported
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: 100Mb/s
        Duplex: Half
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: off
        MDI-X: off (auto)
Cannot get wake-on-lan settings: Operation not permitted
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

my opinion

  • Is it a problem with the mii module? Because mii is not loaded after igb is loaded
  • Problems with the software itself (if there is no mii module)

man page

DIAGNOSTICS
       SIOCGMIIPHY on 'eth?' failed: Operation not supported
              The interface in question does not support MII queries. Most likely, it does not have MII transceivers, at all.

And It seem that NIC supported.
image

FormatException: Missing extension byte (at offset 3) in Windows

I ran the following code and got the following error:

code:

import 'package:network_tools/network_tools.dart';

import '../example_utils.dart';

Future<void> main() async {
  enableExampleLogging();
  await configureNetworkTools('build');

  String subnet = '192.168.1'; //Default network id for home networks

  final interface = await NetInterface.localInterface();
  // final netId = interface?.networkId;
  // if (netId != null) {
  //   subnet = netId;
  //   examplesLogger.fine('subnet id $subnet');
  // }

  // [New] Scan for a single open port in a subnet
  // You can set [firstHostId] and scan will start from this host in the network.
  // Similarly set [lastHostId] and scan will end at this host in the network.
  final stream2 = HostScannerService.instance.scanDevicesForSinglePort(
    subnet,
    53,
    progressCallback: (progress) {
      examplesLogger.finer('Progress for port discovery on host : $progress');
    },
  );

  stream2.listen(
    (ActiveHost activeHost) {
      examplesLogger
          .fine('[scanDevicesForSinglePort]: Found device : $activeHost');
      final OpenPort deviceWithOpenPort = activeHost.openPorts[0];
      if (deviceWithOpenPort.isOpen) {
        examplesLogger.fine(
          '[scanDevicesForSinglePort]: Found open port: ${deviceWithOpenPort.port} on ${activeHost.address}',
        );
      }
    },
    onDone: () {
      examplesLogger.fine('Port Scan completed');
    },
  ); // Don't forget to cancel the stream when not in use.

  // String target = '192.168.1.1';
  // final addr = interface?.ipAddress;
  // if (addr != null) {
  //   target = addr;
  //   examplesLogger.fine("Target is $target");
  // }

  // PortScannerService.instance.scanPortsForSingleDevice(
  //   target,
  //   // Scan will start from this port.
  //   // startPort: 1,
  //   endPort: 9400,
  //   progressCallback: (progress) {
  //     examplesLogger.finer('Progress for port discovery : $progress');
  //   },
  // ).listen(
  //   (activeHost) {
  //     final OpenPort deviceWithOpenPort = activeHost.openPorts[0];
  //
  //     if (deviceWithOpenPort.isOpen) {
  //       examplesLogger.fine(
  //         'Found open port: ${deviceWithOpenPort.port} on device $target',
  //       );
  //     }
  //   },
  //   onDone: () {
  //     examplesLogger.fine('Port Scan from 1 to 9400 completed');
  //   },
  // );
}

Error:

C:/a_dev/flutter-sdk/bin/cache/dart-sdk/bin/dart.exe --enable-asserts C:\Users\xmlspyspring\IdeaProjects\network_tools\example\lib\scan\port_scan.dart
2024-03-25 18:36:59.261617: FINE: network_tools_examples: [scanDevicesForSinglePort]: Found device : Address: 192.168.1.1, HostId: 1, Time: nullms, port: 53
2024-03-25 18:36:59.264387: FINE: network_tools_examples: [scanDevicesForSinglePort]: Found open port: 53 on 192.168.1.1
Unhandled exception:
FormatException: Missing extension byte (at offset 3)
#0      _Utf8Decoder.convertChunked (dart:convert-patch/convert_patch.dart:1845:7)
#1      _Utf8ConversionSink.addSlice (dart:convert/string_conversion.dart:304:28)
#2      _Utf8ConversionSink.add (dart:convert/string_conversion.dart:300:5)
#3      _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:69:18)
#4      _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:111:24)
#5      _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#6      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#7      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#8      _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:784:19)
#9      _StreamController._add (dart:async/stream_controller.dart:658:7)
#10     _StreamController.add (dart:async/stream_controller.dart:606:5)
#11     _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#12     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#13     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#14     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:784:19)
#15     _StreamController._add (dart:async/stream_controller.dart:658:7)
#16     _StreamController.add (dart:async/stream_controller.dart:606:5)
#17     _Socket._onData (dart:io-patch/socket_patch.dart:2447:41)
#18     _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#19     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#20     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#21     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:784:19)
#22     _StreamController._add (dart:async/stream_controller.dart:658:7)
#23     _StreamController.add (dart:async/stream_controller.dart:606:5)
#24     new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:1936:33)
#25     _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1379:14)
#26     _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#27     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#28     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#29     _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:185:5)

Process finished with exit code 255

At first I thought it was a codepage problem, but I still reported this error after changing the code below:

In file lib/src/services/impls/host_scanner_service_impl.dart Line 110
change
Ping(host, count: 1, timeout: timeoutInSeconds)
to
Ping(host, count: 1, timeout: timeoutInSeconds,forceCodepage: true)

netstat - host processes not visible using -p option inside docker

When running a docker in privileged and host network mode, netstat is not able to populate the PIDs/Process Names of the host.
Example:
prash@prash-laptop:~/ $ docker run --privileged=true --net=host -ti alpine sh
/ # apk add net-tools
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
(1/2) Installing mii-tool (1.60_git20140218-r2)
(2/2) Installing net-tools (1.60_git20140218-r2)
Executing busybox-1.28.4-r1.trigger
OK: 5 MiB in 15 packages
/ # netstat -apnt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.1.1:53 0.0.0.0:
LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:
LISTEN -
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 192.168.1.88:53454 216.58.197.37:443 ESTABLISHED -
tcp 0 0 192.168.1.88:44128 74.125.200.188:5228 ESTABLISHED -**

Since docker has the option to run in network host mode , the flows of the host are visible. Although the process names and PIDs are not getting populated.This is because /proc of the docker does not match the host. Hence netstat is not able to get process information.
Now a days a lot of linux tools try to be container(lxc/docker) compliant . A common approach for many tools is to mount the procfs of the host inside the docker like /hostfs/proc and then pass this PATH to the linux tool as an argument/env variable etc (Ref : https://github.com/influxdata/telegraf/blob/master/docs/FAQ.md)
It would be great if netstat too supports this feature so that any monitoring application which runs inside a container can be used to monitor host traffic/processes etc.

Unhandled exception in Windows 10 chinese

I ran the following code and got the following error:

code:

import 'package:network_tools/network_tools.dart';

import '../example_utils.dart';

Future<void> main() async {
  enableExampleLogging();
  await configureNetworkTools('build');

  const String subnet = '192.168.1'; //Default network id for home networks

  // final interface = await NetInterface.localInterface();
  // final netId = interface?.networkId;
  // if (netId != null) {
  //   subnet = netId;
  // }

  // or You can also get address using network_info_plus package
  // final String? address = await (NetworkInfo().getWifiIP());
  examplesLogger.fine("Starting scan on subnet $subnet");

  // You can set [firstHostId] and scan will start from this host in the network.
  // Similarly set [lastHostId] and scan will end at this host in the network.
  final stream = HostScannerService.instance.getAllPingableDevicesAsync(
    subnet,
    // firstHostId: 1,
    // lastHostId: 254,
    progressCallback: (progress) {
      examplesLogger.finer('Progress for host discovery : $progress');
    },
  );

  stream.listen(
    (host) async {
      //Same host can be emitted multiple times
      //Use Set<ActiveHost> instead of List<ActiveHost>
      examplesLogger.fine('Found device: ${await host.toStringFull()}');
    },
    onDone: () {
      examplesLogger.fine('Scan completed');
    },
  ); // Don't forget to cancel the stream when not in use.
}

console output:

C:/a_dev/flutter-sdk/bin/cache/dart-sdk/bin/dart.exe --enable-asserts C:\Users\xmlspyspring\IdeaProjects\look_net_cli\bin\look_net_cli.dart
Positional arguments: []
2024-03-25 15:29:02.881110: FINE: network_tools: Downloading mac-vendors-export.csv from network_tools
Unhandled exception:
ClientException with SocketException: Failed host lookup: 'raw.githubusercontent.com' (OS Error: 请求的名称有效,但是找不到请求的类型的数据。
, errno = 11004), uri=https://raw.githubusercontent.com/osociety/network_tools/main/lib/assets/mac-vendors-export.csv
#0      IOClient.send (package:http/src/io_client.dart:154:7)
<asynchronous suspension>
#1      BaseClient._sendUnstreamed (package:http/src/base_client.dart:93:32)
<asynchronous suspension>
#2      _withClient (package:http/http.dart:167:12)
<asynchronous suspension>
#3      VendorTable._fetchVendorTable (package:network_tools/src/device_info/vendor_table.dart:42:24)
<asynchronous suspension>
#4      VendorTable.createVendorTableMap (package:network_tools/src/device_info/vendor_table.dart:31:25)
<asynchronous suspension>
#5      configureNetworkTools (package:network_tools/src/configure_dart_native.dart:37:3)
<asynchronous suspension>
#6      main (file:///C:/Users/xmlspyspring/IdeaProjects/look_net_cli/bin/look_net_cli.dart:87:3)
<asynchronous suspension>

Process finished with exit code 255

My Environment: windows 10 chinese

PS C:\Users\xmlspyspring\IdeaProjects\network_tools> dart --version
Dart SDK version: 3.3.1 (stable) (Wed Mar 6 13:09:19 2024 +0000) on "windows_x64"

I have solved this problem:
In file lib/src/services/impls/host_scanner_service_impl.dart Line 110
change
Ping(host, count: 1, timeout: timeoutInSeconds)
to
Ping(host, count: 1, timeout: timeoutInSeconds,forceCodepage: true

then run and get:

C:/a_dev/flutter-sdk/bin/cache/dart-sdk/bin/dart.exe --enable-asserts C:\Users\xmlspyspring\IdeaProjects\network_tools\example\lib\scan\host_scan.dart
2024-03-25 18:22:47.681016: FINE: network_tools_examples: Starting scan on subnet 192.168.1
2024-03-25 18:22:54.382557: FINE: network_tools_examples: Found device: Address: 192.168.1.1, MAC: null, HostId: 1, Vendor: null Time: 1ms, DeviceName: Generic Device, HostName: null, MdnsInfo: null
2024-03-25 18:22:58.921379: FINE: network_tools_examples: Found device: Address: 192.168.1.2, MAC: null, HostId: 2, Vendor: null Time: 46ms, DeviceName: Generic Device, HostName: null, MdnsInfo: null
2024-03-25 18:23:03.459363: FINE: network_tools_examples: Found device: Address: 192.168.1.4, MAC: null, HostId: 4, Vendor: null Time: 229ms, DeviceName: Generic Device, HostName: null, MdnsInfo: null
2024-03-25 18:23:03.469368: FINE: network_tools_examples: Found device: Address: 192.168.1.5, MAC: null, HostId: 5, Vendor: null Time: 1ms, DeviceName: host.docker.internal, HostName: host.docker.internal, MdnsInfo: null
2024-03-25 18:23:19.845421: FINE: network_tools_examples: Scan completed

Too little information obtained, many are null. I want to get more information, especially the mac address.

The meaning of `Recv-Q` in netstat(8) seems to be a little incorrect.

From the man page, it says that:
Recv-Q: Established: The count of bytes not copied by the user program connected to this socket. Listening: Since Kernel 2.6.18 this column contains the current syn backlog.

But according to the source code of current version of Linux kernel, when the state of socket is TCP_LISTEN, the value of rx_queue equals to sk_ack_backlog, which represents the length of accept queue instead of the length of syn backlog. So I think the explanation of Recv-Q from man page is wrong.

netstat -i output

Hi everyone,

I wanted to point out something on netstat -i output:

$ netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
lo 65536 2 0 0 0 2 0 0 0 LRU

When I'm debugging network issues I want to have all information about a network card.

I mean all relevant timers to see if something wrong is going on.

I don't see any RX-FRAME or TX-FRAME field, I need to add -e option.

Can I make a PR to have an output like this:

$ netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-FRAME RX-OVR TX-OK TX-ERR TX-DRP TX-FRAME TX-OVR Flg
lo 65536 2 0 0 0 0 2 0 0 0 0 LRU

Thanks for your kind advice about it.

Regards,

2.10: netstat linking fails becaus missing -lselinux

[tkloczko@devel-g2v net-tools-2.10]$ grep SEL config.status
bool 'SELinux support' HAVE_SELINUX y

and linking fails on

/usr/bin/gcc -O2 -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fdata-sections -ffunction-sections -flto=auto -flto-partition=none -Wall -fno-strict-aliasing  -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -I. -I/home/tkloczko/rpmbuild/BUILD/net-tools-2.10/include -Ilib -c statistics.c
/usr/bin/gcc -O2 -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fdata-sections -ffunction-sections -flto=auto -flto-partition=none -Wall -fno-strict-aliasing  -Wl,-z,relro -Wl,--as-needed -Wl,--gc-sections -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -flto=auto -flto-partition=none -fuse-linker-plugin -Wl,--build-id=sha1 -Llib -o netstat netstat.o statistics.o -lnet-tools
lib/netrom.c: In function 'NETROM_sprint':
lib/netrom.c:82:1: warning: function may return address of local variable [-Wreturn-local-addr]
   82 | }
      | ^
lib/netrom.c:78:10: note: declared here
   78 |     char buf[64];
      |          ^
/usr/bin/ld: /tmp/cci1FStg.lto.o: in function `prg_cache_load':
/home/tkloczko/rpmbuild/BUILD/net-tools-2.10/netstat.c:476: undefined reference to `getpidcon'
/usr/bin/ld: /home/tkloczko/rpmbuild/BUILD/net-tools-2.10/netstat.c:480: undefined reference to `freecon'
/usr/bin/ld: /home/tkloczko/rpmbuild/BUILD/net-tools-2.10/netstat.c:480: undefined reference to `freecon'
/usr/bin/ld: /home/tkloczko/rpmbuild/BUILD/net-tools-2.10/netstat.c:480: undefined reference to `freecon'
/usr/bin/ld: /tmp/cci1FStg.lto.o: in function `main':
/home/tkloczko/rpmbuild/BUILD/net-tools-2.10/netstat.c:2189: undefined reference to `is_selinux_enabled'

route command differs from ip command when adding ipv6 route

In the following special scenarios, the ip command denies the following second route addition, but route does not。
Example:

$ip -6 route add 2409:8080:5a0a:60c7::7/128 via 2409:8080:5a0a:60c7::7 dev eth2
$ip -6 route add 2409:8080:5a0a:60c7::8/128 via 2409:8080:5a0a:60c7::7 dev eth2
RTNETLINK answers: No route to host
$ route -A inet6 add 2409:8080:5a0a:60c7::8/128 gw 2409:8080:5a0a:60c7::7 dev eth2
$
$ route -6n
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
2409:8080:5a0a:60c7::7/128 2409:8080:5a0a:60c7::7 UG 1024 2 0 eth2
2409:8080:5a0a:60c7::8/128 2409:8080:5a0a:60c7::7 UGH 1 1 0 eth2
2409:8080:5a0a:60c7::/120 :: U 102 1 0 eth2

Can route command be the same with ip command?

netstat man page needs cleanup

Passing option "--tcpip" is interpreted as "--tcp" with numeric argument "ip".
This leads to the confusing error message

netstat.c: Internal Error longopts 1 range.

This seems to come from the case 1 of options processing though I don't understand why getopts_long would return 1.

Why would I pass "--tcpip"?

While the --help output says

={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
{-x|--unix} --ax25 --ipx --netrom

The man page of net-tools says:

   address_family_options:

   [-4|--inet] [-6|--inet6] [--protocol={inet,inet6,unix,ipx,ax25,netrom,ddp,bluetooth, ... }  ]  [--unix|-x]  [--inet|--ip|--tcpip]  [--ax25]  [--x25]  [--rose]  [--ash]  [--bluetooth]  [--ipx]  [--netrom]  [--ddp|--appletalk]
   [--econet|--ec]

But the above line seems to be out-of-date! Again, --help lists only the following:

=Use '-6|-4' or '-A ' or '--'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)

And the use of --protocol is also gone.

It looks like the man page needs cleanup.

[netstat]Question: Code pathes of cached kernel route table (IPv6)

So given the command netstat -r6C executes the function rprint_cache6 which tries to open the file
/proc/net/ndisc. This file does not exist on my machine, nor on machines of some friends. Under which circumstances does this file exist? I can't find any information about it in the linux kernel, so I wonder about this code path.

Can someone provide some information about that? Is that legacy compatibility? Code does not provide enough information or documentation to understand.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.