局域网ip扫描

import time
import threading
import socket

threads = []

def get_hostname(ip):
    try:
        (name, aliaslist, addresslist) = socket.gethostbyaddr(ip)
        print name , '  ', ip
                
    except Exception as e:
        return
    
      
def find_ip(ip_prefix):  
       
    for i in range(2,255):  
        ip = '%s.%s'%(ip_prefix,i)
        th=threading.Thread(target=get_hostname,args=(ip,))
        threads.append(th)
  
    
if __name__ == "__main__":  
    print "start time %s"%time.ctime()  
    
    find_ip('192.168.2')  
    for t in threads:
        t.start()
    
    for t in threads:
        t.join()   

    print "end time %s"%time.ctime()  

转载于:https://www.cnblogs.com/zjzyh/p/6761769.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的基于Qt的局域网IP扫描代码示例,可以实现扫描在线IP并输出其MAC地址。该代码使用了Qt的网络模块,其中包括了QNetworkInterface和QNetworkAddressEntry等类。 ```cpp #include <QCoreApplication> #include <QNetworkInterface> #include <QHostInfo> #include <QNetworkRequest> #include <QNetworkReply> #include <QJsonObject> #include <QJsonDocument> #include <QTimer> class IPScanner : public QObject { Q_OBJECT public: IPScanner(QObject* parent = nullptr) : QObject(parent) { connect(&m_manager, &QNetworkAccessManager::finished, this, &IPScanner::onRequestFinished); m_timer.setSingleShot(true); connect(&m_timer, &QTimer::timeout, this, &IPScanner::onTimerTimeout); } void start() { m_interfaces = QNetworkInterface::allInterfaces(); m_currentInterfaceIndex = -1; m_timer.start(0); } private slots: void onTimerTimeout() { m_currentInterfaceIndex++; if (m_currentInterfaceIndex >= m_interfaces.size()) { // 扫描完成 emit finished(); return; } QNetworkInterface interface = m_interfaces[m_currentInterfaceIndex]; QList<QNetworkAddressEntry> entries = interface.addressEntries(); for (auto entry : entries) { if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol) { QString ip = entry.ip().toString(); QString subnetMask = entry.netmask().toString(); QStringList ipParts = ip.split("."); QStringList subnetMaskParts = subnetMask.split("."); QStringList networkParts; for (int i = 0; i < 4; i++) { networkParts.append(QString::number(ipParts[i].toInt() & subnetMaskParts[i].toInt())); } QString network = networkParts.join("."); for (int i = 1; i < 255; i++) { QString testIp = QString("%1.%2").arg(network).arg(i); if (testIp != ip) { QNetworkRequest request(QUrl(QString("http://%1:8080/").arg(testIp))); m_manager.get(request); } } } } m_timer.start(1000); // 每个接口扫描1秒钟 } void onRequestFinished(QNetworkReply* reply) { if (reply->error() == QNetworkReply::NoError) { QByteArray data = reply->readAll(); QJsonDocument doc = QJsonDocument::fromJson(data); if (!doc.isNull() && doc.isObject()) { QJsonObject obj = doc.object(); QString mac = obj.value("mac").toString(); if (!mac.isEmpty()) { QString ip = reply->url().host(); emit ipFound(ip, mac); } } } reply->deleteLater(); } signals: void ipFound(const QString& ip, const QString& mac); void finished(); private: QList<QNetworkInterface> m_interfaces; int m_currentInterfaceIndex; QNetworkAccessManager m_manager; QTimer m_timer; }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); IPScanner scanner; QObject::connect(&scanner, &IPScanner::ipFound, [](const QString& ip, const QString& mac) { qDebug() << ip << mac; }); QObject::connect(&scanner, &IPScanner::finished, &a, &QCoreApplication::quit); scanner.start(); return a.exec(); } #include "main.moc" ``` 上述代码通过遍历所有网络接口,获取其IP地址和子网掩码,然后计算出其所在的网络地址。然后,对该网络地址下的所有IP进行扫描,使用QNetworkAccessManager发送HTTP请求并等待响应。如果响应中包含MAC地址,则表示该IP在线并且可用,将其IP和MAC地址通过信号发送出去。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值