精华内容
下载资源
问答
  • 局域网主机发现局域网主机发现局域网主机发现局域网主机发现局域网主机发现局域网主机发现
  • 敏儿查看局域网在线主机可以帮你查看在同一局域网内的哪些主机在线,哪些主机没在线。
  • 采用ARP协议 探测局域网主机存活 源代码 VC编写 采用ARP协议 探测局域网主机存活 源代码 VC编写
  • LAN 局域网主机的监视

    2019-02-15 10:58:27
    LAN 局域网主机的日长监视,pdf文档,网络技术网络监控
  • 局域网查看工具:局域网查看工具查看局域网主机
  • 获取局域网主机共享文件目录

    热门讨论 2010-07-02 09:53:01
    获取局域网主机共享文件目录 获取局域网主机共享文件目录 获取局域网主机共享文件目录
  • 基于arp协议的主机局域网主机信息探测,
  • 3、网络层对数据进行封装时,IP头中的源IP地址填写主机A的IP地址,目的IP填写主机B的外网IP地址(因为只有全球IP地址才能接入互联网,外网地址有限,局域网内的主机需要共享外网地址,B的外网地址就是映射后的外网地址...

    这是个纠结了半年的问题!

    局域网A:

    1、主机A的应用程序先生成应用层数据;

    2、传输层根据应用层协议类型,对应用层数据进行TCP或UDP封装;

    3、网络层对数据进行封装时,IP头中的源IP地址填写主机A的IP地址,目的IP填写主机B的外网IP地址(因为只有全球IP地址才能接入互联网,外网地址有限,局域网内的主机需要共享外网地址,B的外网地址就是映射后的外网地址。根据NAT地址转换的规则,局域网地址转换为外网地址有三种方式:静态转换、动态转换、端口多路复用)。

    4、一般来讲,局域网采用以太网的组网方式,因此数据链路层是根据MAC地址对帧数据进行转发的。主机A在数据传送开始是不知道主机B的MAC地址的,因此,①主机A会先发送ARP广播数据包至网络,请求主机B的MAC地址。②交换机A接收到ARP广播数据包后,先进行解封装,学习主机A的IP地址和MAC地址,接着对ARP包进行重新封装并继续广播至除接收端口外的所有端口。③路由器接收到该ARP广播数据包后,解封装ARP数据包,发现其中的目的IP地址为外网IP,此时,路由器A将ARP响应包的源MAC设置为自己的MAC地址,目的MAC设置为主机A的MAC地址并发送到交换机A。④交换机A接收到该ARP响应数据包后,发现目的MAC为主机A,因此直接将该ARP响应包转发至主机A。到此,主机A知道了发送数据到主机B需要封装的目的MAC地址。⑤主机A将数据包封装好后发送至交换机A。

    5、交换机根据MAC地址将数据都发送至路由器A。

    6、路由器A作为局域网A与外网的连接,它同时也要承担网络地址转换的工作,将接收的数据用映射好的外网IP作为源IP进行重新封装,之后将数据转发至外网。

    广域网:

    数据通过广域网从路由器A传到路由器B

    局域网B:

    按照局域网A相反的顺序,剥离头部。

    展开全文
  • 局域网主机屏幕监控

    2013-09-22 10:48:33
    基于Visual C++ 的局域网主机屏幕监控程序
  • 可以获得系统当前开启的tcp端口,我试过很好用 !
  • 主要介绍了shell脚本实现批量测试局域网主机是否在线,效果是:主机在线显示绿色,主机离线显示红色结果,需要的朋友可以参考下
  • 获取局域网内所有主机信息,可重新编译,代码结构由于时间原因比较乱,可供参考。一个小工具。
  • c# 实现的可以扫描局域网主机的小程序,界面清晰,简单易懂
  • 用C++写的局域网主机侦测,源代码Demo,可编译通过。
  • 局域网 主机 查询

    2013-05-15 11:26:50
    下载安装 从C:\Program Files\雪融科技有限公司\局域网查询系统点击
  • 虚拟机的网络连接模式里面选择“桥接”模式就可以了

    虚拟机的网络连接模式里面选择“桥接”模式就可以了

    展开全文
  • 远程唤醒局域网主机

    2013-04-16 10:02:46
    实现局域网主机的远程唤醒,唤醒功能需要主板的支持以及设置BIOS
  • 局域网扫描工具(支持多网卡主机信息及厂商信息)
  • 是显示局域网内的主机扫描,使用MFC完成。。。。
  • 使用SendARP函数来实现,速度比较慢,我扫描254个主机,花了3秒左右。
  • 局域网主机间发包细节

    千次阅读 2015-10-01 10:44:56
    一直有一个疑问:局域网主机之间是如何将数据包发出去的 ? 求细节。   我目前的真实网络环境: 路由器(家用)的IP地址为192.168.1.1; 主机A地址192.168.1.100; 主机B地址192.168.1.102;   主机A的路由表: ...

     一直有一个疑问:局域网的主机之间是如何将数据包发出去的 ? 求细节。 

    我目前的真实网络环境:

    路由器(家用)的IP地址为192.168.1.1;

    主机A地址192.168.1.100;

    主机B地址192.168.1.102; 

    主机A的路由表:

     

    主机A的arp表:

     

    当主机A来ping主机B时,数据包是怎么发送到B的呢?

    先说说我的理解:因为主机A与网络通信只有一条路径,所以数据包将会被转发给默认路由(192.168.1.1),然后由路由器将该包转发给主机B。具体是:A将数据包转发给路由器,路由器发送一个ARP广播查找主机B的MAC地址,得到MAC地址后,路由器通过链路层将数据发给主机B。(这里有一个ARP广播,我认为这个ARP广播应该由路由器发出,广播中的源地址(包括IP和MAC)地址都应该是路由器本身的,而不是主机A的。)

     

    但抓包结果(见下图)来看,主机A应该是直接将数据包发给了主机B。这是因为,主机A发了一个ARP广播来寻找主机B的MAC地址,且得到了应答。(主机A所发的ARP广播中的源地址(包括IP和MAC)都是主机A本身的)。那么接下来,有了MAC地址后,主机A是怎么直接将数据发给主机B而没有通过路由器的呢? A与B虽然是同一网络,但未直接相连啊。

     

    上面第4个包,ARP的应答包,源MAC地址是主机B,目的MAC是主机A,这个包在链路层是直接由B发给A的呢,还是B发给路由器然后由路由器转发给A的呢?

     

    总结一下,问题应该是:同一局域网中,在链路层,各主机之间是如何发送数据的 ?

     

    从ping的结果看,局域网内主机是直接通信,未经过路由功能,因为ping数据包中的TTL值未改变。如下:

     

     

    当用主机A来Ping一个外网地址时,如 ping 20.20.30.40

    这时就容易理解了,比对了目的IP地址后,选择默认路由,该ICMP数据包(ping包)是通过默认路由(192.168.1.1)来转发出去的。抓包也未发现有ARP广播数据。

     

    ---------------------------------------------------------------------------------------    分  割  线   ------ -----------------------------------------------------------------------------------------------

     

    回答: 

    路由器(非纯路由功能的),具有交换机的功能;局域网内主机间通信的时候,路由器被当做了交换机来使用。

    交换机只工作在局域网内,不具有路由器的功能,只能实现数据包的转发,其解包只能解链路层协议,再往上层(IP层及以上)都不会被解析。

    路由器工作在网络层,具有路由功能,解包只能解IP层协议(链路层解过之后才解的)。通常,路由器具有交换机的功能。(注意:纯路由功能的路由器不具有交换机的功能)。

    家用路由器,忽略wan口以后就成了一个有4个lan口的交换机。事实上家用路由器由一个真路由器和一个交换机组成,路由器由两个端口,一个就是wan口,另一个藏在内部与交换机相连,交换机露出4个lan口。

     

    路由器收到一个数据包后的处理过程

     个人理解一:

    对于(具有路由和交换功能的路由器)接收到的数据包,首先解链路层协议,根据其上层协议类型(由Type字段标识),决定将该数据包如何处理。

    1)  如果其上层协议不是IP协议,则这时路由器被当做交换机使用,根据该包的MAC地址将该包转发出去;

    2)  如果其上层协议是IP协议,则交由IP层解析(这时路由器又被当做路由器来使用了,使用其路由功能)。

    a)  如果该目的IP地址与源IP地址属于同一局域网内,这时该包将被直接通过交换机口转发出去(TTL不减1,不需要重新计算IP头部校验和,因此Ping局域网内机器时,TTL值与源端发送时设置的相同);

    b)  如果不属于同一局域网,则查找路由表进行路由。 

    注意:上面的过程属于个人理解,未得到验证。另外,上述1)和2)a),描述了属于直接转发数据包到目的地址的情况,其判断是否也可以直接拿数据包中的目的MAC来与路由器中的ARP表项比对呢?如果匹配了一项,则直接转发;如果不匹配,则进行路由。

     个人理解二:

    对于一个收到的一个数据包,解析其链路层协议,如果链路层中的目的MAC与路由器的MAC不同,则直接转发(其中,包括广播和多播的情况,需要转发到交换机的多个接口);如果链路层中的目的MAC就是路由器的MAC,则需要进行路由。

     

    关于这两种理解,都是个人理解,未得到难。这应该属于路由器和交换机实现上的两种方式。这两种方案,都印证一点:局域网主机间通信时,路由器被当被交换机来使用,而未使用其路由功能,因为数据包的TTL值未改变,说明未经过路由。


     在三层交换机(即路由器)上,VLAN之间的互通是通过实现一个虚拟VLAN接口来实现的,即针对每个VLAN,交换机内部维护了一个与该VLAN对应的接口,该接口对外是不可见的,是一个虚拟的接口,但该接口有所有物理接口所具有的特性,比如有MAC地址,可配置最大传输单元和传输的以太网帧类型等。在上述的说明中,我们提到了当交换机接收到一个数据帧时,判断是不是发给自己的,判断的依据便是查看该MAC地址是不是针对接收数据帧所在VLAN的接口MAC地址,如果是,则进行三层处理,若不是,则进行二层处理,按照上述流程进行转发。

    (上面这段摘自: http://skyeagle.blog.51cto.com/417071/93338 ,理解二应该是现有的实现方案)


    对于上面的问题:

    局域网主机A发给主机B数据,

    主机A发一个ARP广播到路由器,路由器解析到链路层协议,得到目的地址为全1的MAC地址,然后在每个内网网口(路由器的4个LAN口,相当于交换机的接口)上发一份数据。
    主机B收到数据后,给出ARP应答。应答源MAC是B,目的MAC是A。将该应答包发给路由器,路由器收到数据后,同样解包并发给A。

     

    可见,无论A与B直接通信,没有经过路由功能,因为ping的结果显示,TTL值未改变,说明未经过路由功能。

    但无论如何,局域网内的主机通信是经过了路由器,只是这时路由器被当做了交换机来使用,而未使用其路由功能。

      

    局域网内主机发送一个数据包时,

    (注:局域网内不需要使用路由功能,此时路由器均是被当做交换机来使用的。路由器是运行在网络层的,其在链路层作为交换机来使用

    1)  发送端(192.168.1.00)IP层先查看主机的IP地址,通过查找主机上的路由表,选择一条路由。


    如上路由表,当ping 192.168.1.101时,选出的表项是红色标注的一条。目的网络是192.168.1.0,通过本地网口192.168.1.100发送出去,但Gateway是On-link。注意,On-link的意思是直接相连,不需要经过路由,可将数据包直接发送至目的地址。这时路由器将被当做交换机来使用。

    2)  由于可直接将数据包发送至目的地址,这时需要查找目的IP地址(192.168.1.101)对应的MAC地址。需要查找arp表。


    如上arp表,未找到目的IP地址192.168.1.101对应的表项。于是主机发送一条ARP广播(链路层)。

    3)  这时路由器被当做交换机来使用,收到arp广播后,转发给交换机上的各个接口(LAN口)。

    4)  目的主机(192.168.1.101)回复一条ARP应答,发给路由器(当做交换机来使用),由路由器转发。

    5)  发送端得到了目标主机的MAC地址,将ICMP包(ping包)发送出去,同时更新自己的arp表,将目标主机的表项加入进去。加入之后


    6)  路由器(这时被当做交换机来使用)接收到发送端的ICMP包,并接其转发给目的主机。

     

    注意:此时发送端已经更新了arp表项,这时如果再和目的主机192.168.1.101通信,就不需要再发送arp广播了。因为,通过arp表已经能够查到目的主机的MAC地址了。只有当通过arp表查不到MAC地址时,才需要链路层发送ARP广播。 但如果一段时间内未与目标主机通信,那么路由表会再次将该表项清除。

     

     

    展开全文
  • 这是一个基于winpcap,利用ARP协议,采用多线程技术编写的一个局域网主机存活探测程序。
  • 局域网主机探测软件

    2012-03-12 17:04:33
    可以探测局域网中正在发送数据的主机的IP地址,发送端口,MAC地址。
  • Ubuntu虚拟机tomcat服务器搭建与局域网主机互联
  • python3+scapy扫描获取局域网主机ip和mac.pdf
  • 如何快速枚举局域网内所有存活主机IP (转) 我想快速搜索所有主机,我已经试过以下方法,注意,我强调的是快速
  • python扫描局域网主机

    千次阅读 2019-04-11 17:04:08
    一、开发环境 windows7 32位,python3.7 二,安装netaddr模块 netaddr模块能方便的对子网和IP地址进行操作。 三,工作原理 ...当我们发送UDP数据到活动主机关闭的端口上时,会产生ICMP响应,ICM...

    一、开发环境

    windows7 32位,python3.7

    二,安装netaddr模块

    netaddr模块能方便的对子网和IP地址进行操作。

    三,工作原理

    通过构建套接字对象对网络接口上的数据包嗅探,windows与linux的区别是windows允许我们嗅探所有协议的所有数据包,而linux只能嗅探到ICMP数据。当我们发送UDP数据到活动主机关闭的端口上时,会产生ICMP响应,ICMP响应的数据属性中,有一个类型值(type)和代码值(code),当这两个值都为3时,代表主机端口不可达。

    四,代码

    import socket
    import os
    import struct
    import threading
    
    from netaddr import IPNetwork,IPAddress
    from ctypes import *
    
    # host to listen on
    host   = "192.168.0.149"
    # subnet to target
    subnet = "192.168.0.0/24"
    # magic we'll check ICMP responses for
    magic_message = "PYTHONRULES!"
    def udp_sender(subnet,magic_message):
        sender = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        for ip in IPNetwork(subnet):
            try:
                sender.sendto(magic_message.encode(),("%s" % ip,65212))
            except Exception as e:
                raise(e)      
    class IP(Structure): 
        _fields_ = [
            ("ihl",           c_ubyte, 4),
            ("version",       c_ubyte, 4),
            ("tos",           c_ubyte),
            ("len",           c_ushort),
            ("id",            c_ushort),
            ("offset",        c_ushort),
            ("ttl",           c_ubyte),
            ("protocol_num",  c_ubyte),
            ("sum",           c_ushort),
            ("src",           c_ulong),
            ("dst",           c_ulong)
        ]  
        def __new__(self, socket_buffer=None):
                return self.from_buffer_copy(socket_buffer)         
        def __init__(self, socket_buffer=None):
            # map protocol constants to their names
            self.protocol_map = {1:"ICMP", 6:"TCP", 17:"UDP"}  
            # human readable IP addresses
            self.src_address = socket.inet_ntoa(struct.pack("<L",self.src))
            self.dst_address = socket.inet_ntoa(struct.pack("<L",self.dst))
            # human readable protocol
            try:
                self.protocol = self.protocol_map[self.protocol_num]
            except:
                self.protocol = str(self.protocol_num)
      
    class ICMP(Structure):
        _fields_ = [
            ("type",         c_ubyte),
            ("code",         c_ubyte),
            ("checksum",     c_ushort),
            ("unused",       c_ushort),
            ("next_hop_mtu", c_ushort)
            ]    
        def __new__(self, socket_buffer):
            return self.from_buffer_copy(socket_buffer)    
        def __init__(self, socket_buffer):
            pass
    # create a raw socket and bind it to the public interface
    if os.name == "nt":
        socket_protocol = socket.IPPROTO_IP 
    else:
        socket_protocol = socket.IPPROTO_ICMP
    sniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol)
    sniffer.bind((host, 0))
    # we want the IP headers included in the capture
    sniffer.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
    # if we're on Windows we need to send some ioctls
    # to setup promiscuous mode
    if os.name == "nt":
        sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
    # start sending packets
    t = threading.Thread(target=udp_sender,args=(subnet,magic_message))
    t.start()        
    try:
        while True:
            # read in a single packet
            raw_buffer = sniffer.recvfrom(65565)[0] 
            # create an IP header from the first 20 bytes of the buffer
            ip_header = IP(raw_buffer[0:20])
            #print "Protocol: %s %s -> %s" % (ip_header.protocol, ip_header.src_address, ip_header.dst_address)
            # if it's ICMP we want it
            if ip_header.protocol == "ICMP": 
                # calculate where our ICMP packet starts
                offset = ip_header.ihl * 4
                buf = raw_buffer[offset:offset + sizeof(ICMP)] 
                # create our ICMP structure
                icmp_header = ICMP(buf)
                #print("ICMP -> Type: %d Code: %d ip:%s" % (icmp_header.type, icmp_header.code,ip_header.src_address))
                # now check for the TYPE 3 and CODE 3 which indicates
                # a host is up but no port available to talk to           
                if icmp_header.code == 3 and icmp_header.type == 3:
                    # check to make sure we are receiving the response 
                    # that lands in our subnet
                    if IPAddress(ip_header.src_address) in IPNetwork(subnet):
                        # test for our magic message
                        if raw_buffer[len(raw_buffer)-len(magic_message):] == magic_message.encode():
                            print("Host Up: %s" % ip_header.src_address)
    # handle CTRL-C
    except KeyboardInterrupt:
        # if we're on Windows turn off promiscuous mode
        if os.name == "nt":
            sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)
    
    

    上面代码出自《Black Hat Python》,但我是在win7 32的python3上运行的,代码稍微有点改动。运行结果如下“

     

     

    展开全文
  • 用多线程和MFC做的一个局域网扫描作业。获得本地IP MAC 主机名 掩码 以及局域网活动主机的IP MAC
  • 局域网主机广播寻找设备

    千次阅读 2016-09-23 20:01:48
    源码及demo:UdpBroadcastSearcher一、背景介绍这是前面UDP网络编程中的实例(Android网络编程TCP、UDP(三)——UDP实例:搜索局域网所有的设备)。觉得这功能在以后可能会用上,就按照原思路优化了下代码。主要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 148,959
精华内容 59,583
关键字:

局域网主机列表