Showing preview only (928K chars total). Download the full file or copy to clipboard to get everything.
Repository: osociety/vernet
Branch: dev
Commit: 58a54344b430
Files: 293
Total size: 847.3 KB
Directory structure:
gitextract_wwx1bfz5/
├── .continueignore
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── flutter_release.yml
│ ├── flutter_test_dev.yml
│ └── flutter_test_main.yml
├── .gitignore
├── .metadata
├── AGENTS.md
├── ARCHITECTURE.md
├── LICENSE
├── QWEN.md
├── README.md
├── analysis_options.yaml
├── android/
│ ├── .gitignore
│ ├── Gemfile
│ ├── app/
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin/
│ │ │ │ └── org/
│ │ │ │ └── fsociety/
│ │ │ │ └── vernet/
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ │ ├── drawable/
│ │ │ │ ├── ic_launcher_foreground.xml
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-night/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-night-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── raw/
│ │ │ │ └── keep.xml
│ │ │ ├── values/
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ └── styles.xml
│ │ │ ├── values-night/
│ │ │ │ └── styles.xml
│ │ │ ├── values-night-v31/
│ │ │ │ └── styles.xml
│ │ │ └── values-v31/
│ │ │ └── styles.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── fastlane/
│ │ ├── Fastfile
│ │ ├── README.md
│ │ └── metadata/
│ │ └── android/
│ │ └── en-US/
│ │ ├── changelogs/
│ │ │ ├── 1.txt
│ │ │ ├── 10.txt
│ │ │ ├── 13.txt
│ │ │ ├── 14.txt
│ │ │ ├── 15.txt
│ │ │ ├── 16.txt
│ │ │ ├── 17.txt
│ │ │ ├── 18.txt
│ │ │ ├── 19.txt
│ │ │ ├── 2.txt
│ │ │ ├── 20.txt
│ │ │ ├── 21.txt
│ │ │ ├── 22.txt
│ │ │ ├── 23.txt
│ │ │ ├── 24.txt
│ │ │ ├── 25.txt
│ │ │ ├── 26.txt
│ │ │ ├── 27.txt
│ │ │ ├── 28.txt
│ │ │ ├── 29.txt
│ │ │ ├── 3.txt
│ │ │ ├── 30.txt
│ │ │ ├── 31.txt
│ │ │ ├── 32.txt
│ │ │ ├── 33.txt
│ │ │ ├── 34.txt
│ │ │ ├── 35.txt
│ │ │ ├── 36.txt
│ │ │ ├── 37.txt
│ │ │ ├── 38.txt
│ │ │ ├── 39.txt
│ │ │ ├── 4.txt
│ │ │ ├── 40.txt
│ │ │ ├── 5.txt
│ │ │ ├── 6.txt
│ │ │ ├── 7.txt
│ │ │ ├── 8.txt
│ │ │ └── 9.txt
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ ├── title.txt
│ │ └── video.txt
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ ├── settings.gradle
│ └── settings_aar.gradle
├── assets/
│ ├── ipwhois.json
│ ├── ports_lists.json
│ └── secrets.json
├── devtools_options.yaml
├── flutter_native_splash.yaml
├── generate_coverage.sh
├── installers/
│ └── dmg_creator/
│ ├── AppIcon.icns
│ └── config.json
├── integration_test/
│ ├── app_test.dart
│ ├── dns/
│ │ ├── lookup/
│ │ │ └── lookup_test.dart
│ │ └── reverse_lookup/
│ │ └── reverse_lookup.dart
│ ├── network_troubleshooting_test/
│ │ └── ping_test/
│ │ └── ping_test.dart
│ ├── settings/
│ │ ├── dark_theme_test.dart
│ │ ├── in_app_internet_test.dart
│ │ ├── settings_test.dart
│ │ ├── subnet_tests.dart
│ │ └── test_utils.dart
│ └── wifi_test/
│ ├── host_scan_and_port_scan_test.dart
│ ├── run_scan_on_startup_test.dart
│ └── wifi_test_runner.dart
├── ios/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── LaunchBackground.imageset/
│ │ │ │ └── Contents.json
│ │ │ └── LaunchImage.imageset/
│ │ │ ├── Contents.json
│ │ │ └── README.md
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── Runner-Bridging-Header.h
│ │ └── Runner.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ └── Runner.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ ├── IDEWorkspaceChecks.plist
│ └── WorkspaceSettings.xcsettings
├── lib/
│ ├── Vernet.code-workspace
│ ├── api/
│ │ └── update_checker.dart
│ ├── database/
│ │ ├── database_service.dart
│ │ └── drift/
│ │ ├── drfit_database_service.dart
│ │ └── drift_database.dart
│ ├── helper/
│ │ ├── app_settings.dart
│ │ ├── consent_loader.dart
│ │ ├── dark_theme_preference.dart
│ │ ├── port_desc_loader.dart
│ │ └── utils_helper.dart
│ ├── injection.dart
│ ├── main.dart
│ ├── models/
│ │ ├── device_in_the_network.dart
│ │ ├── drift/
│ │ │ ├── device.dart
│ │ │ └── scan.dart
│ │ ├── port.dart
│ │ └── wifi_info.dart
│ ├── pages/
│ │ ├── base_page.dart
│ │ ├── dns/
│ │ │ ├── dns_page.dart
│ │ │ └── reverse_dns_page.dart
│ │ ├── home_page.dart
│ │ ├── host_scan_page/
│ │ │ ├── host_scan_bloc/
│ │ │ │ ├── host_scan_bloc.dart
│ │ │ │ ├── host_scan_event.dart
│ │ │ │ └── host_scan_state.dart
│ │ │ ├── host_scan_page.dart
│ │ │ └── widgets/
│ │ │ └── host_scan_widget.dart
│ │ ├── isp_page/
│ │ │ ├── bloc/
│ │ │ │ ├── isp_page_bloc.dart
│ │ │ │ ├── isp_page_event.dart
│ │ │ │ └── isp_page_state.dart
│ │ │ ├── isp_page.dart
│ │ │ └── isp_page_widget.dart
│ │ ├── location_consent_page.dart
│ │ ├── network_troubleshoot/
│ │ │ └── port_scan_page.dart
│ │ ├── ping_page/
│ │ │ ├── bloc/
│ │ │ │ ├── ping_bloc.dart
│ │ │ │ ├── ping_event.dart
│ │ │ │ └── ping_state.dart
│ │ │ └── ping_page.dart
│ │ ├── port_scan_page/
│ │ │ └── port_scan_bloc/
│ │ │ ├── port_scan_bloc.dart
│ │ │ ├── port_scan_event.dart
│ │ │ └── port_scan_state.dart
│ │ └── settings_page.dart
│ ├── providers/
│ │ ├── dark_theme_provider.dart
│ │ └── internet_provider.dart
│ ├── repository/
│ │ ├── drift/
│ │ │ ├── device_repository.dart
│ │ │ └── scan_repository.dart
│ │ ├── notification_service.dart
│ │ └── repository.dart
│ ├── services/
│ │ ├── impls/
│ │ │ └── device_scanner_service.dart
│ │ └── scanner_service.dart
│ ├── ui/
│ │ ├── adaptive/
│ │ │ ├── adaptive_circular_progress_bar.dart
│ │ │ ├── adaptive_dialog.dart
│ │ │ ├── adaptive_dialog_action.dart
│ │ │ ├── adaptive_list.dart
│ │ │ └── adaptive_radio.dart
│ │ ├── base_settings_dialog.dart
│ │ ├── custom_tile.dart
│ │ ├── external_link_dialog.dart
│ │ ├── popular_chip.dart
│ │ ├── settings_dialog/
│ │ │ ├── custom_subnet_dialog.dart
│ │ │ ├── first_subnet_dialog.dart
│ │ │ ├── internet_dialog.dart
│ │ │ ├── last_subnet_dialog.dart
│ │ │ ├── ping_count_dialog.dart
│ │ │ ├── socket_timeout_dialog.dart
│ │ │ └── theme_dialog.dart
│ │ ├── speed_test_dialog.dart
│ │ └── speedometer.dart
│ ├── utils/
│ │ ├── custom_axis_renderer.dart
│ │ └── device_util.dart
│ └── values/
│ ├── globals.dart
│ ├── keys.dart
│ ├── strings.dart
│ └── tooltip_messages.dart
├── linux/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ ├── main.cc
│ ├── my_application.cc
│ └── my_application.h
├── macos/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── Flutter-Debug.xcconfig
│ │ └── Flutter-Release.xcconfig
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ └── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ └── MainMenu.xib
│ │ ├── Configs/
│ │ │ ├── AppInfo.xcconfig
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── Warnings.xcconfig
│ │ ├── DebugProfile.entitlements
│ │ ├── Info.plist
│ │ ├── MainFlutterWindow.swift
│ │ └── Release.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ └── Runner.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
├── pubspec.yaml
├── repo-map.yaml
├── test/
│ ├── api/
│ │ ├── navigate_to_store_test.dart
│ │ └── update_checker_test.dart
│ ├── helper/
│ │ ├── app_settings_test.dart
│ │ ├── consent_loader_test.dart
│ │ ├── dark_theme_preference_test.dart
│ │ ├── port_desc_loader_test.dart
│ │ └── utils_helper_test.dart
│ ├── helpers/
│ │ └── test_helpers.dart
│ ├── main_test.dart
│ ├── models/
│ │ ├── device_in_the_network_test.dart
│ │ ├── port_test.dart
│ │ └── wifi_info_test.dart
│ ├── pages/
│ │ ├── dns/
│ │ │ ├── dns_page_test.dart
│ │ │ └── reverse_dns_page_test.dart
│ │ ├── home_page_test.dart
│ │ ├── host_scan_page/
│ │ │ └── host_scan_bloc_test.dart
│ │ ├── isp_page/
│ │ │ ├── isp_page_bloc_test.dart
│ │ │ └── isp_page_widget_test.dart
│ │ ├── location_consent_page_test.dart
│ │ ├── ping_page/
│ │ │ └── ping_bloc_test.dart
│ │ ├── port_scan_page/
│ │ │ └── port_scan_bloc_test.dart
│ │ └── settings_page_test.dart
│ ├── providers/
│ │ ├── dark_theme_provider_test.dart
│ │ └── internet_provider_test.dart
│ ├── repository/
│ │ ├── device_repository_test.dart
│ │ ├── drift_repository_test.dart
│ │ └── scan_repository_test.dart
│ ├── services/
│ │ └── device_scanner_service_test.dart
│ ├── ui/
│ │ ├── adaptive/
│ │ │ ├── adaptive_dialog_test.dart
│ │ │ ├── adaptive_list_test.dart
│ │ │ └── adaptive_radio_test.dart
│ │ ├── custom_tile_test.dart
│ │ ├── external_link_dialog_test.dart
│ │ ├── popular_chip_test.dart
│ │ ├── settings_dialog/
│ │ │ └── settings_dialogs_test.dart
│ │ ├── speed_test_dialog_test.dart
│ │ └── speedometer_test.dart
│ ├── utils/
│ │ ├── custom_axis_renderer_test.dart
│ │ └── device_util_test.dart
│ └── values/
│ ├── keys_test.dart
│ └── strings_test.dart
├── web/
│ ├── index.html
│ └── manifest.json
└── windows/
├── .gitignore
├── CMakeLists.txt
├── flutter/
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
└── runner/
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .continueignore
================================================
# 1. Standard Bloat (Crucial for 8GB RAM)
.git/
.dart_tool/
.pub-cache/
.pub/
build/
node_modules/
.fvm/
bin/
obj/
dist/
# 2. Platform-Specific Build Artifacts
android/
ios/
macos/
web/
linux/
windows/
**/Pods/
**/DerivedData/
**/.gradle/
# 3. Autogenerated Flutter/Dart Code (The "AI Confusers")
# These files are huge and the AI doesn't need to index them to understand your logic.
*.g.dart
*.gr.dart
*.freezed.dart
*.generated.dart
*.injectable.json
injection.config.dart
generated_plugin_registrant.dart
# 4. Lock files and Metadata
pubspec.lock
.packages
.packages.generated
.metadata
.flutter-plugins
.flutter-plugins-dependencies
# 5. IDE and System Files
.vscode/
.idea/
.DS_Store
*.iml
*.ipr
*.iws
# 6. Large Assets/Logs
assets/
fonts/
images/
videos/
*.log
*.map.json
*.symbols
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: op3nsoc13ty # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: OpenSociety
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "pub" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
================================================
FILE: .github/workflows/flutter_release.yml
================================================
name: Flutter release
on:
release:
types: [published]
workflow_dispatch:
permissions:
id-token: write
attestations: write
contents: write
env:
ANDROID_BUILD_PATH: ${{ vars.ANDROID_BUILD_PATH }}
LINUX_BUILD_PATH: ${{ vars.LINUX_BUILD_PATH }}
MACOS_BUILD_PATH: ${{ vars.MACOS_BUILD_PATH }}
WINDOWS_BUILD_PATH: ${{ vars.WINDOWS_BUILD_PATH }}
MACOS_DMG_PATH: installers/dmg_creator
jobs:
release-android-and-linux:
runs-on: ubuntu-latest
env:
LINUX_ZIP: Vernet-${{github.ref_name}}-linux.zip
ANDROID_APK_ARM_V7A: app-armeabi-v7a-dev-release.apk
ANDROID_APK_ARM_V8A: app-arm64-v8a-dev-release.apk
ANDROID_APK_x86_64: app-x86_64-dev-release.apk
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Setup Java JDK
uses: actions/setup-java@v4.7.0
with:
distribution: temurin
java-version: '17'
- name: Setup Flutter
uses: subosito/flutter-action@v2.18.0
with:
channel: stable
cache: true
- name: Cache pub dependencies
uses: actions/cache@v4.2.2
with:
path: ~/.pub-cache
key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.lock') }}
restore-keys: ${{ runner.os }}-pub-
- name: Cache build artifacts
uses: actions/cache@v4.2.2
with:
path: |
.dart_tool/
**/*.g.dart
**/*.mocks.dart
**/*.config.dart
key: ${{ runner.os }}-build-artifacts-${{ hashFiles('pubspec.lock', '**/pubspec.yaml') }}
restore-keys: ${{ runner.os }}-build-artifacts-
- name: Cache Gradle
uses: actions/cache@v4.2.2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
.gradle
key: ${{ runner.os }}-gradle-${{ hashFiles('**/build.gradle', '**/gradle.properties') }}
restore-keys: ${{ runner.os }}-gradle-
- name: Download pub dependencies
run: flutter pub get
- name: Run build_runner
run: dart run build_runner build --delete-conflicting-outputs
- name: Download Android keystore
id: android_keystore
uses: timheuer/base64-to-file@v1.2.4
with:
fileName: key.jks
encodedString: '${{ secrets.ANDROID_KEYSTORE_BASE64 }}'
- name: Create key.properties
run: |
echo "storeFile=${{ steps.android_keystore.outputs.filePath }}" >> android/key.properties
echo "storePassword=${{ secrets.ANDROID_KEYSTORE_PASSWORD }}" >> android/key.properties
echo "keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }}" >> android/key.properties
echo "keyAlias=${{ secrets.ANDROID_KEY_ALIAS }}" >> android/key.properties
- name: Create artifacts directory
run: mkdir -p artifacts
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev
- name: Build Android App and Linux Bundle
# Use signing keys for release instead of debug
run: |
flutter build apk --split-per-abi --flavor dev
flutter build linux --release
- name: Rename ANDROID APKs
run: |
mv ${{ env.ANDROID_BUILD_PATH}}/${{env.ANDROID_APK_ARM_V7A}} ${{ env.ANDROID_BUILD_PATH}}/Vernet-${{github.ref_name}}-${{env.ANDROID_APK_ARM_V7A}}
mv ${{ env.ANDROID_BUILD_PATH}}/${{env.ANDROID_APK_ARM_V8A}} ${{ env.ANDROID_BUILD_PATH}}/Vernet-${{github.ref_name}}-${{env.ANDROID_APK_ARM_V8A}}
mv ${{ env.ANDROID_BUILD_PATH}}/${{env.ANDROID_APK_x86_64}} ${{ env.ANDROID_BUILD_PATH}}/Vernet-${{github.ref_name}}-${{env.ANDROID_APK_x86_64}}
- name: Linux Archive
uses: TheDoctor0/zip-release@0.7.6
with:
type: 'zip'
filename: ${{ env.LINUX_ZIP }}
directory: ${{ env.LINUX_BUILD_PATH }}
- name: Publish Android Release
uses: softprops/action-gh-release@v2.2.1
if: startsWith(github.ref, 'refs/tags/')
with:
files: |
${{ env.ANDROID_BUILD_PATH}}/Vernet-${{github.ref_name}}-${{env.ANDROID_APK_ARM_V7A}}
${{ env.ANDROID_BUILD_PATH}}/Vernet-${{github.ref_name}}-${{env.ANDROID_APK_ARM_V8A}}
${{ env.ANDROID_BUILD_PATH}}/Vernet-${{github.ref_name}}-${{env.ANDROID_APK_x86_64}}
- name: Publish Linux Release
uses: softprops/action-gh-release@v2.2.1
if: startsWith(github.ref, 'refs/tags/')
with:
files: ${{ env.LINUX_BUILD_PATH }}/${{ env.LINUX_ZIP }}
- name: Build Android App Bundle
run: flutter build appbundle --flavor store
- name: 'Setup Ruby, JRuby and TruffleRuby'
uses: ruby/setup-ruby@v1.221.0
with:
ruby-version: 3.4.2
bundler-cache: true
- name: Cache bundle dependencies
uses: actions/cache@v4.2.2
with:
path: android/vendor/bundle
key: '${{ runner.os }}-gems-${{ hashFiles(''**/Gemfile.lock'') }}'
restore-keys: '${{ runner.os }}-gems-'
- name: Download bundle dependencies
working-directory: android/
run: |
gem install bundler
bundle config path vendor/bundle
bundle install
- name: Release to Google Play
env:
SUPPLY_PACKAGE_NAME: '${{ secrets.ANDROID_PACKAGE_NAME }}'
SUPPLY_JSON_KEY_DATA: '${{ secrets.GOOGLE_SERVICE_ACCOUNT_KEY }}'
working-directory: android/
run: bundle exec fastlane android ${{ github.event.release.prerelease && 'beta' || 'deploy_full' }}
release-macos:
runs-on: macos-latest
env:
MACOS_ZIP: Vernet-${{github.ref_name}}-macos.zip
MACOS_DMG: Vernet-${{github.ref_name}}-macos.dmg
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Setup Flutter
uses: subosito/flutter-action@v2.18.0
with:
channel: stable
cache: true
- name: Cache pub dependencies
uses: actions/cache@v4.2.2
with:
path: ~/.pub-cache
key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.lock') }}
restore-keys: ${{ runner.os }}-pub-
- name: Cache build artifacts
uses: actions/cache@v4.2.2
with:
path: |
.dart_tool/
**/*.g.dart
**/*.mocks.dart
**/*.config.dart
key: ${{ runner.os }}-build-artifacts-${{ hashFiles('pubspec.lock', '**/pubspec.yaml') }}
restore-keys: ${{ runner.os }}-build-artifacts-
- name: Cache CocoaPods
uses: actions/cache@v4.2.2
with:
path: macos/Pods
key: ${{ runner.os }}-pods-${{ hashFiles('macos/Podfile.lock') }}
restore-keys: ${{ runner.os }}-pods-
- name: Download pub dependencies
run: flutter pub get
- name: Run build_runner
run: dart run build_runner build --delete-conflicting-outputs
- name: Build macos release
run: flutter build macos --release
- name: Archive macos
uses: TheDoctor0/zip-release@0.7.6
with:
type: 'zip'
filename: ${{ env.MACOS_ZIP }}
directory: ${{ env.MACOS_BUILD_PATH }}
- name: Setup Node 18
uses: actions/setup-node@v4.2.0
with:
node-version: 18
cache: 'npm'
cache-dependency-path: '${{ env.MACOS_DMG_PATH }}/package-lock.json'
- name: Install Appdmg and Create dmg
working-directory: ${{ env.MACOS_DMG_PATH }}
run: |
npm install -g appdmg
appdmg ./config.json ./${{ env.MACOS_DMG }}
- name: Publish macOS Release
uses: softprops/action-gh-release@v2.2.1
if: startsWith(github.ref, 'refs/tags/')
with:
files: |
${{ env.MACOS_BUILD_PATH }}/${{ env.MACOS_ZIP }}
${{ env.MACOS_DMG_PATH }}/${{ env.MACOS_DMG }}
release-windows:
runs-on: windows-latest
env:
WINDOWS_ZIP: Vernet-${{github.ref_name}}-windows.zip
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Setup Flutter
uses: subosito/flutter-action@v2.18.0
with:
channel: stable
cache: true
- name: Cache pub dependencies
uses: actions/cache@v4.2.2
with:
path: ~/.pub-cache
key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.lock') }}
restore-keys: ${{ runner.os }}-pub-
- name: Cache build artifacts
uses: actions/cache@v4.2.2
with:
path: |
.dart_tool/
**/*.g.dart
**/*.mocks.dart
**/*.config.dart
key: ${{ runner.os }}-build-artifacts-${{ hashFiles('pubspec.lock', '**/pubspec.yaml') }}
restore-keys: ${{ runner.os }}-build-artifacts-
- name: Download pub dependencies
run: flutter pub get
- name: Run build_runner
run: dart run build_runner build --delete-conflicting-outputs
- name: Build windows release
run: flutter build windows --release
- name: Archive windows Release
uses: TheDoctor0/zip-release@0.7.6
with:
type: 'zip'
filename: ${{ env.WINDOWS_ZIP }}
directory: ${{ env.WINDOWS_BUILD_PATH }}
- name: Publish Windows Release
uses: softprops/action-gh-release@v2.2.1
if: startsWith(github.ref, 'refs/tags/')
with:
files: ${{ env.WINDOWS_BUILD_PATH }}/${{ env.WINDOWS_ZIP }}
================================================
FILE: .github/workflows/flutter_test_dev.yml
================================================
name: Flutter Test - Dev Branch
on:
pull_request:
branches: ["dev"]
workflow_dispatch:
workflow_call:
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
changes:
name: 'Detect changes'
runs-on: ubuntu-latest
permissions:
pull-requests: read
outputs:
lib: ${{ steps.filter.outputs.lib == 'true' }}
test: ${{ steps.filter.outputs.test == 'true' }}
android: ${{ steps.filter.outputs.android == 'true' }}
linux: ${{ steps.filter.outputs.linux == 'true' }}
macos: ${{ steps.filter.outputs.macos == 'true' }}
yaml: ${{ steps.filter.outputs.yaml == 'true' }}
windows: ${{ steps.filter.outputs.windows == 'true' }}
steps:
- uses: dorny/paths-filter@v3.0.2
id: filter
with:
filters: |
lib:
- 'lib/**'
android:
- 'android/**'
test:
- 'test/**'
linux:
- 'linux/**'
macos:
- 'macos/**'
yaml:
- '*.yaml'
windows:
- 'windows/**'
flutter-unit-test:
name: 'Unit Tests on ${{ matrix.os }}'
strategy:
matrix:
os: [ubuntu, macos, windows]
needs: changes
if: ${{ needs.changes.outputs.lib || needs.changes.outputs.test || needs.changes.outputs.yaml }}
runs-on: ${{ matrix.os }}-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Setup Java (Linux/Windows)
if: matrix.os != 'macos'
uses: actions/setup-java@v4.7.0
with:
distribution: temurin
java-version: '17'
- name: Setup Flutter
uses: subosito/flutter-action@v2.18.0
with:
channel: stable
cache: true
- name: Cache pub dependencies
uses: actions/cache@v4.2.2
with:
path: ${{ runner.os == 'Windows' && '~/AppData/Local/Pub/Cache' || '~/.pub-cache' }}
key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.lock') }}
restore-keys: ${{ runner.os }}-pub-
- name: Cache build artifacts
uses: actions/cache@v4.2.2
with:
path: |
.dart_tool/
**/*.g.dart
**/*.mocks.dart
**/*.config.dart
key: ${{ runner.os }}-build-artifacts-${{ hashFiles('pubspec.lock', '**/pubspec.yaml') }}
restore-keys: ${{ runner.os }}-build-artifacts-
- name: Download dependencies
run: flutter pub get
- name: Run build_runner
run: dart run build_runner build --delete-conflicting-outputs
- name: Run analyzer
run: flutter analyze
- name: Run unit tests
run: flutter test
================================================
FILE: .github/workflows/flutter_test_main.yml
================================================
name: Flutter Test - Main Branch
on:
pull_request:
branches: ["main"]
workflow_dispatch:
workflow_call:
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
changes:
name: 'Detect changes'
runs-on: ubuntu-latest
permissions:
pull-requests: read
outputs:
lib: ${{ steps.filter.outputs.lib == 'true' }}
test: ${{ steps.filter.outputs.test == 'true' }}
linux: ${{ steps.filter.outputs.linux == 'true' }}
macos: ${{ steps.filter.outputs.macos == 'true' }}
windows: ${{ steps.filter.outputs.windows == 'true' }}
yaml: ${{ steps.filter.outputs.yaml == 'true' }}
steps:
- uses: dorny/paths-filter@v3.0.2
id: filter
with:
filters: |
lib:
- 'lib/**'
test:
- 'test/**'
- 'integration_test/**'
linux:
- 'linux/**'
macos:
- 'macos/**'
yaml:
- '*.yaml'
windows:
- 'windows/**'
flutter-integration-test:
name: 'Integration Tests on ${{ matrix.os }}'
needs: changes
if: ${{ needs.changes.outputs.lib || needs.changes.outputs.test || needs.changes.outputs.linux || needs.changes.outputs.macos || needs.changes.outputs.windows || needs.changes.outputs.yaml }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu
packages: "curl git unzip xz-utils zip libglu1-mesa clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev libssl-dev keybinder-3.0 libnotify-dev libmpv-dev mpv network-manager lcov"
- os: macos
- os: windows
runs-on: ${{ matrix.os }}-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.2
- name: Setup Java (Linux/Windows)
if: matrix.os != 'macos'
uses: actions/setup-java@v4.7.0
with:
distribution: temurin
java-version: '17'
- name: Setup Flutter
uses: subosito/flutter-action@v2.18.0
with:
channel: stable
cache: true
- name: Cache pub dependencies
uses: actions/cache@v4.2.2
with:
path: ~/.pub-cache
key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.lock') }}
restore-keys: ${{ runner.os }}-pub-
- name: Cache build artifacts
uses: actions/cache@v4.2.2
with:
path: |
.dart_tool/
**/*.g.dart
**/*.mocks.dart
**/*.config.dart
key: ${{ runner.os }}-build-artifacts-${{ hashFiles('pubspec.lock', '**/pubspec.yaml') }}
restore-keys: ${{ runner.os }}-build-artifacts-
- name: Install platform dependencies (Linux)
if: matrix.os == 'ubuntu'
run: |
sudo apt-get update
sudo apt-get install -y ${{ matrix.packages }}
- name: Setup LCOV
uses: hrishikesh-kadam/setup-lcov@v1
- name: Download dependencies
run: flutter pub get
- name: Run build_runner
run: dart run build_runner build --delete-conflicting-outputs
- name: Run unit tests with coverage
run: flutter test --coverage
- name: Preserve unit test coverage
run: mv coverage/lcov.info coverage/unit_${{ matrix.os }}.lcov.info
- name: Run integration tests - Linux
if: matrix.os == 'ubuntu'
run: |
export DISPLAY=:99
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 &
sleep 2
flutter test integration_test/app_test.dart --coverage -d linux
shell: bash
- name: Run integration tests - macOS
if: matrix.os == 'macos'
run: flutter test integration_test/app_test.dart --coverage -d macos
- name: Run integration tests - Windows
if: matrix.os == 'windows'
run: flutter test integration_test/app_test.dart --coverage -d windows
- name: Preserve integration test coverage
run: mv coverage/lcov.info coverage/integration_${{ matrix.os }}.lcov.info
- name: Combine coverage files on macos/ubuntu
if: matrix.os == 'macos' || matrix.os == 'ubuntu'
run: cat coverage/unit_${{ matrix.os }}.lcov.info coverage/integration_${{ matrix.os }}.lcov.info > coverage/${{ matrix.os }}_lcov.info
- name: Combine coverage files on windows
if: matrix.os == 'windows'
shell: cmd
run: |
copy /b coverage\unit_${{ matrix.os }}.lcov.info + coverage\integration_${{ matrix.os }}.lcov.info coverage\${{ matrix.os }}_lcov.info
- name: Remove generated files from coverage
run: lcov --remove coverage/${{ matrix.os }}_lcov.info '**/*.g.dart' 'lib/models/drift/*' -o coverage/${{ matrix.os }}_lcov.info
- name: Upload combined coverage to CodeCov
if: always()
uses: codecov/codecov-action@v4.5.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: coverage/${{ matrix.os }}_lcov.info
flags: ${{ matrix.os }}
fail_ci_if_error: false
================================================
FILE: .gitignore
================================================
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Generated by flutter dependencies
*.freezed.dart
pubspec.lock
flutter-plugins
# Privat data
lib/infrastructure/core/constant_credentials.dart
# Web related
lib/generated_plugin_registrant.dart
# Obfuscation related
app.*.map.json
injection.config.dart
*.injectable.json
*.g.part
*.g.dart
*.gr.dart
# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# Visual Studio Code related
.classpath
.project
.settings/
.vscode/
# Flutter repo-specific
/bin/cache/
/bin/internal/bootstrap.bat
/bin/internal/bootstrap.sh
/bin/mingit/
/dev/benchmarks/mega_gallery/
/dev/bots/.recipe_deps
/dev/bots/android_tools/
/dev/devicelab/ABresults*.json
/dev/docs/doc/
/dev/docs/flutter.docs.zip
/dev/docs/lib/
/dev/docs/pubspec.yaml
/dev/integration_tests/**/xcuserdata
/dev/integration_tests/**/Pods
/packages/flutter/coverage/
version
analysis_benchmark.json
# packages file containing multi-root paths
.packages.generated
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
**/generated_plugin_registrant.dart
.packages
.pub-cache/
.pub/
build/
flutter_*.png
linked_*.ds
unlinked.ds
unlinked_spec.ds
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
*.jks
**/android/**/.cxx/**
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/ephemeral
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# macOS
**/macos/Flutter/GeneratedPluginRegistrant.swift
# Coverage
coverage/
# Symbols
app.*.symbols
.fvm/
# Android Studio will place build artifacts here
android/app/debug
android/app/profile
android/app/release
# gem files
android/.bundle
android/vendor
android/fastlane/Appfile
================================================
FILE: .metadata
================================================
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled.
version:
revision: 676cefaaff197f27424942307668886253e1ec35
channel: stable
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: 676cefaaff197f27424942307668886253e1ec35
base_revision: 676cefaaff197f27424942307668886253e1ec35
- platform: linux
create_revision: 676cefaaff197f27424942307668886253e1ec35
base_revision: 676cefaaff197f27424942307668886253e1ec35
- platform: macos
create_revision: 676cefaaff197f27424942307668886253e1ec35
base_revision: 676cefaaff197f27424942307668886253e1ec35
- platform: windows
create_revision: 676cefaaff197f27424942307668886253e1ec35
base_revision: 676cefaaff197f27424942307668886253e1ec35
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'
================================================
FILE: AGENTS.md
================================================
# AI Agent Guidelines for Vernet
This document provides guidance for AI coding agents working on the
Vernet repository. The goal is to help agents understand how to safely
modify the project and where to place new functionality.
------------------------------------------------------------------------
# Project Overview
Vernet is a cross-platform network diagnostics application built with
Flutter.
Supported platforms: - Android - iOS - Linux - macOS - Windows - Web
The application provides tools such as: - Device discovery - Port
scanning - DNS lookup - Network diagnostics - Internet speed testing
All primary application logic resides in the `lib/` directory.
All coverage related files inside `coverage/` directory
------------------------------------------------------------------------
# Core Architecture
The project follows a layered architecture:
UI Layer ↓ Feature Screens ↓ Service Layer ↓ Network Utilities
Important rule: UI must never perform network operations directly. All
network logic must go through the service layer.
------------------------------------------------------------------------
# Repository Structure
lib/ ├── main.dart ├── pages/ ├── widgets/ ├── services/ ├── models/
├── utils/ ├── providers/ └── routing/
Directory purposes:
pages → UI pages for each tool\
widgets → reusable UI components\
services → networking logic\
models → data structures\
utils → helper functions\
providers → state management\
routing → navigation configuration
------------------------------------------------------------------------
# How to Implement Features
When adding a new network tool:
1. Create UI screen in `lib/pages/`
2. Create service in `lib/services/`
3. Create data models in `lib/models/` if needed
4. Connect UI to the service layer
Example structure:
lib/pages/ping_page/ lib/services/ping_service.dart
lib/models/ping_result.dart
------------------------------------------------------------------------
# UI Development Rules
UI components should:
- remain stateless where possible
- delegate logic to services
- reuse components from `widgets/`
Avoid placing network or heavy logic inside widgets.
------------------------------------------------------------------------
# Networking Rules
Networking operations must live inside `services/`.
Examples:
lib/services/network_scanner/ lib/services/port_scanner/
lib/services/dns_tools/ lib/services/speedtest/
Services should:
- return structured models
- avoid UI dependencies
- be reusable across screens
------------------------------------------------------------------------
# State Management
State should remain local to features.
Preferred approaches:
- Provider
- Riverpod
- simple StatefulWidget state
Avoid global mutable state unless necessary.
------------------------------------------------------------------------
# Data Models
All structured data must live in `models/`.
Examples:
- Device
- PortResult
- DnsResult
- SpeedTestResult
Models should:
- be immutable when possible
- support JSON serialization if needed
------------------------------------------------------------------------
# Code Modification Guidelines
When modifying code:
UI change → modify `pages/` or `widgets/`\
Network feature → modify `services/`\
Data structure → modify `models/`\
Utility function → modify `utils/`
Never mix UI logic and network operations.
------------------------------------------------------------------------
# Platform Specific Code
Platform specific implementations exist in:
android/ ios/ linux/ macos/ windows/
Agents should avoid modifying these unless absolutely necessary.
Most functionality should be implemented in Flutter/Dart.
------------------------------------------------------------------------
# Testing Guidelines
Unit tests live in:
test/
Integration tests live in:
integration_test/
Coverage folder
coverage/
Combined unit test file
coverage/lcov.info
Agents adding new functionality should add tests when possible.
------------------------------------------------------------------------
# Dependency Management
Dependencies are defined in:
pubspec.yaml
When adding dependencies:
- prefer lightweight packages
- avoid redundant libraries
- maintain cross-platform compatibility
------------------------------------------------------------------------
# Best Practices
Agents should:
- reuse existing services
- maintain separation of concerns
- keep functions small and focused
- prefer composition over duplication
------------------------------------------------------------------------
# Example Workflow
To implement a new feature:
1. Create service for network logic
2. Define model for results
3. Create UI screen
4. Connect screen to service
5. Add widgets for display
------------------------------------------------------------------------
# Summary
The most important rules:
1. UI in `pages/`
2. Reusable components in `widgets/`
3. Networking in `services/`
4. Data structures in `models/`
5. Helpers in `utils/`
6. Coverage in `coverage/`
Maintaining this separation ensures the project remains maintainable and
scalable.
## Architecture Reference
Always read ARCHITECTURE.md before making structural changes.
Use it as the source of truth for system design.
================================================
FILE: ARCHITECTURE.md
================================================
# Vernet Architecture Guide
## Project Overview
Vernet is a cross-platform network analysis application built with
Flutter. The application provides network utilities including device
discovery, port scanning, DNS lookup, and internet speed testing.
The application targets:
- Android
- iOS
- Linux
- macOS
- Windows
- Web
All primary logic resides in the Flutter/Dart codebase inside `lib/`.
------------------------------------------------------------------------
# Architecture Style
The project follows a layered architecture commonly used in Flutter
applications.
Layers:
UI Layer ↓ Feature Layer ↓ Service Layer ↓ Network / System Utilities
Each layer depends only on the layer below it.
------------------------------------------------------------------------
# Repository Structure
root │ ├── android/ ├── ios/ ├── linux/ ├── macos/ ├── windows/ ├── web/
├── assets/
├── lib/ │ │ ├── main.dart │ │ │ ├── pages/ │ │ Feature screens for
each network tool │ │ │ ├── widgets/ │ │ Reusable UI components │ │ │
├── services/ │ │ Core networking functionality │ │ │ ├── models/ │ │
Data models used across the app │ │ │ ├── utils/ │ │ Helper functions
and utilities │ │ │ ├── providers/ │ │ Application state management │ │
│ └── routing/ │ Navigation configuration │ ├── test/ ├──
integration_test/ ├── installers/ └── pubspec.yaml
------------------------------------------------------------------------
# Module Dependency Graph
pages ↓ widgets ↓ providers ↓ services ↓ utils ↓ models
Key rule:
UI components must not directly perform network operations. Networking
should always go through the `services` layer.
------------------------------------------------------------------------
# Feature Modules
Each network tool functions as a feature module.
Example feature structure:
lib/pages/host_scan_page/ lib/services/scanner_service.dart
lib/models/device.dart
Typical module responsibilities:
### Device Discovery
Detect devices on the local network.
Responsibilities:
- subnet scanning
- ping hosts
- resolve device names
- detect vendors
Service location:
lib/services/network_scanner/
------------------------------------------------------------------------
### Port Scanner
Scan TCP ports on a target host.
Responsibilities:
- connection probing
- open port detection
- service identification
Service location:
lib/services/port_scanner/
------------------------------------------------------------------------
### DNS Tools
Network lookup utilities.
Responsibilities:
- DNS resolution
- reverse DNS
- IP information
Service location:
lib/services/dns_tools/
------------------------------------------------------------------------
### Speed Test
Internet performance measurement.
Responsibilities:
- latency measurement
- download test
- upload test
Service location:
lib/services/speedtest/
------------------------------------------------------------------------
# UI Architecture
The UI is composed of Flutter widgets organized by feature screens.
Flow:
main.dart → Home screen → Feature screens → Widgets
Reusable components include:
- cards
- lists
- network result tables
- input forms
All reusable components are located in:
lib/widgets/
------------------------------------------------------------------------
# State Management
State is managed per feature screen.
Possible patterns:
- Provider
- simple stateful widgets
- scoped state management
State objects should remain independent from networking logic.
------------------------------------------------------------------------
# Data Flow
Typical execution flow:
User action → UI screen → Provider / controller → Service layer →
Network utilities → Result returned to UI
Example:
Scan button → DeviceScannerScreen → NetworkScannerService → Ping / ARP
scan → List`<Device>`{=html}
------------------------------------------------------------------------
# Platform Integrations
Platform specific code exists in:
android/ ios/ linux/ macos/ windows/
These layers provide:
- OS permissions
- system networking commands
- platform-specific capabilities
The Flutter layer interacts with these through plugins or platform
channels.
------------------------------------------------------------------------
# Testing Strategy
Two testing layers exist.
Unit Tests
test/
Integration Tests
integration_test/
Integration tests simulate full feature workflows.
Coverage folder
coverage/
Combined unit test file
coverage/lcov.info
------------------------------------------------------------------------
# Build and Distribution
The project supports building for multiple platforms using Flutter.
Example commands:
flutter build apk flutter build ios flutter build macos flutter build
linux flutter build windows flutter build web
Packaging scripts are located in:
installers/
------------------------------------------------------------------------
# Design Principles
The repository follows these principles:
1. Feature-based UI organization
2. Service abstraction for networking
3. Reusable widgets
4. Minimal platform-specific logic
5. Cross-platform compatibility
------------------------------------------------------------------------
# Rules for Contributors and AI Agents
When modifying this repository:
UI components → screens/ or widgets/
Networking functionality → services/
Data structures → models/
Helper utilities → utils/
Avoid placing network logic inside UI code.
Always reuse existing services when implementing new network features.
------------------------------------------------------------------------
# Typical Modification Examples
Adding a new network tool:
1. Create new screen in screens/
2. Create service in services/
3. Create models if necessary
4. Connect UI to service
Fixing UI:
Modify widgets or screen components only.
Fixing network logic:
Modify service layer without touching UI where possible.
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: QWEN.md
================================================
# Vernet - QWEN Context Guide
## Project Overview
**Vernet** is a cross-platform network analyzer and monitoring tool built with Flutter. It provides comprehensive network diagnostics including device discovery, port scanning, DNS lookup, internet speed testing, and Wi-Fi information.
### Key Features
- Wi-Fi details (BSSID, MAC Address)
- Network device/host scanning
- Open port scanning for target IPs
- ISP details
- Internet speed test (speedtest.net)
- Ping and DNS tools
### Supported Platforms
- Android (primary - published on F-Droid & Google Play)
- iOS (emulator only)
- macOS
- Linux
- Windows
- Web
### Tech Stack
- **Framework:** Flutter (Dart SDK >=3.2.0 <4.0.0)
- **State Management:** Provider, flutter_bloc (BLoC pattern)
- **Dependency Injection:** get_it + injectable
- **Database:** Drift (SQLite)
- **Key Packages:** dart_ping, network_tools_flutter, speed_test_dart, flutter_map
---
## Repository Structure
```
vernet/
├── lib/ # Main Flutter/Dart codebase
│ ├── main.dart # App entry point
│ ├── injection.dart # DI configuration
│ ├── api/ # API integrations
│ ├── database/ # Drift database schemas
│ │ └── drift/ # Generated database code
│ ├── helper/ # App helpers (settings, consent)
│ ├── models/ # Data models
│ │ ├── drift/ # Database models
│ │ ├── device_in_the_network.dart
│ │ ├── port.dart
│ │ └── wifi_info.dart
│ ├── pages/ # UI screens (feature-based)
│ │ ├── dns/ # DNS lookup page
│ │ ├── host_scan_page/ # Network scanner
│ │ ├── isp_page/ # ISP info
│ │ ├── network_troubleshoot/
│ │ ├── ping_page/ # Ping tool
│ │ ├── port_scan_page/ # Port scanner
│ │ ├── home_page.dart
│ │ ├── settings_page.dart
│ │ └── location_consent_page.dart
│ ├── providers/ # State management
│ │ ├── dark_theme_provider.dart
│ │ └── internet_provider.dart
│ ├── repository/ # Data repositories
│ │ └── notification_service.dart
│ ├── services/ # Business logic / networking
│ │ ├── impls/ # Service implementations
│ │ └── scanner_service.dart # Network scanner abstraction
│ ├── ui/ # UI components
│ ├── utils/ # Helper utilities
│ │ ├── custom_axis_renderer.dart
│ │ └── device_util.dart
│ └── values/ # Constants, keys, globals
├── test/ # Unit & widget tests
├── integration_test/ # Integration tests
├── coverage/ # Coverage reports
├── assets/ # App assets (images, configs)
├── android/ # Android platform code
├── ios/ # iOS platform code
├── macos/ # macOS platform code
├── linux/ # Linux platform code
├── windows/ # Windows platform code
├── web/ # Web platform code
├── installers/ # Distribution packages
├── fastlane/ # CI/CD configuration
├── scripts/ # Automation scripts
└── donation/ # Donation-related assets
```
---
## Architecture
Vernet follows a **layered architecture**:
```
UI Layer (pages/, widgets/)
↓
Feature Layer (providers/)
↓
Service Layer (services/)
↓
Network/System Utilities (packages)
```
### Key Principles
1. **Separation of Concerns:** UI components must NOT perform network operations directly
2. **Service Abstraction:** All networking logic lives in `services/`
3. **Feature-based Organization:** Each network tool is a self-contained feature module
4. **Reusable Components:** Common UI elements in `widgets/` and `ui/`
5. **Immutable Data Models:** Data structures in `models/` are immutable where possible
### Data Flow Example
```
User taps Scan → HostScanPage → NetworkScannerService → Ping/ARP → List<Device>
```
---
## Building and Running
### Prerequisites
- Flutter SDK (compatible with Dart >=3.2.0 <4.0.0)
- Platform-specific tools (Android Studio, Xcode, etc.)
### Setup
```bash
# Install dependencies
flutter pub get
# Run code generation (for injectable, freezed, drift)
dart run build_runner build --delete-conflicting-outputs
```
### Running the App
```bash
# Run on connected device/emulator
flutter run
# Run on specific platform
flutter run -d chrome # Web
flutter run -d macos # macOS
flutter run -d windows # Windows
flutter run -d linux # Linux
flutter run -d <device> # Android/iOS
```
### Building for Production
```bash
flutter build apk # Android
flutter build ios # iOS
flutter build macos # macOS
flutter build linux # Linux
flutter build windows # Windows
flutter build web # Web
```
### Linux Note
Install `net-tools` package for `arp` command before running on Linux.
---
## Testing
### Run All Tests
```bash
# Unit & widget tests
flutter test
# Integration tests (desktop)
flutter test integration_test/app_test.dart -d macos
```
### Generate Coverage Report
```bash
# Run the coverage script
bash generate_coverage.sh
```
This script:
1. Runs unit tests with coverage
2. Runs integration tests with coverage
3. Combines both coverage reports
4. Excludes generated files (*.g.dart, drift files)
5. Generates HTML report at `coverage/html/index.html`
### Test Structure
- `test/` - Unit and widget tests organized by feature
- `integration_test/` - End-to-end integration tests
- `coverage/` - Coverage reports (unit.lcov.info, integration.lcov.info, lcov.info)
---
## Development Conventions
### Code Style
- Linting: Uses `lint` package (`package:lint/analysis_options.yaml`)
- Formatting: Standard Dart/Flutter formatting
- Generated files excluded from analysis: `*.g.dart`, `*.freezed.dart`, `*.config.dart`
### Key Rules
1. **UI Logic:** Keep in `pages/` or `widgets/`
2. **Network Logic:** Always in `services/`
3. **Data Models:** In `models/`, immutable where possible
4. **Utilities:** In `utils/`
5. **State Management:** Use Provider or BLoC, keep state local to features
### Dependency Injection
- Uses `get_it` with `injectable` for code generation
- Configuration in `lib/injection.dart`
- Environments: `prod`, `dev`, `test`, `demo`
### Important Files
- `ARCHITECTURE.md` - Detailed system architecture
- `AGENTS.md` - AI agent guidelines
- `pubspec.yaml` - Dependencies and Flutter config
- `analysis_options.yaml` - Linting rules
- `flutter_native_splash.yaml` - Splash screen config
---
## Adding a New Feature
When implementing a new network tool:
1. **Create Service** - `lib/services/new_feature_service.dart`
2. **Create Models** - `lib/models/new_feature_result.dart`
3. **Create UI Page** - `lib/pages/new_feature_page/`
4. **Connect UI to Service** - Use Provider/BLoC for state
5. **Add Tests** - `test/services/` and `test/pages/`
### Example Structure
```
lib/
├── pages/ping_page/
├── services/ping_service.dart
└── models/ping_result.dart
```
---
## Platform-Specific Notes
### Android
- Primary platform (F-Droid + Google Play)
- Permissions handled via `permission_handler`
- Fastlane configuration in `fastlane/`
### macOS
- Not notarized yet
- Manual installation: Copy to Applications, use "Open" with Cmd+click
### Linux
- Requires `net-tools` package for `arp` command
### Windows
- May require "Run anyway" on first launch
- Automatic permission requests
---
## Key Dependencies
### Core
- `flutter_bloc` - BLoC state management
- `provider` - Simple state management
- `get_it` + `injectable` - Dependency injection
- `drift` + `drift_flutter` - Local database
### Networking
- `dart_ping` - Ping functionality
- `network_tools_flutter` - Network utilities
- `speed_test_dart` - Speed testing (git dependency)
- `http` - HTTP requests
### UI
- `flutter_map` + `flutter_map_marker_cluster_plus` - Maps
- `syncfusion_flutter_gauges` - Gauges for speed test
- `auto_size_text` - Responsive text
- `percent_indicator` - Progress indicators
### Utilities
- `flutter_local_notifications` - Notifications
- `shared_preferences` - Local storage
- `package_info_plus` - App version info
- `url_launcher` - Open URLs
---
## Coverage & Quality
- Coverage reports generated in `coverage/`
- HTML report: `coverage/html/index.html`
- LCOV format: `coverage/lcov.info`
- Generated files excluded from coverage metrics
---
## Contact & Support
- **Email:** fs0c19ty@protonmail.com
- **GitHub:** https://github.com/git-elliot/vernet
- **F-Droid:** https://f-droid.org/packages/org.fsociety.vernet
- **Donations:** Liberapay, Ko-Fi
---
## Quick Reference
| Task | Command |
|------|---------|
| Install deps | `flutter pub get` |
| Run codegen | `dart run build_runner build --delete-conflicting-outputs` |
| Run app | `flutter run` |
| Run tests | `flutter test` |
| Generate coverage | `bash generate_coverage.sh` |
| Build APK | `flutter build apk` |
| Clean build | `flutter clean` |
---
*Last updated: March 2026*
================================================
FILE: README.md
================================================
# Vernet
Vernet - Network Analyzer and Monitoring Tool
[](https://f-droid.org/packages/org.fsociety.vernet)
[](https://github.com/git-elliot/vernet/releases/latest)



[](https://codecov.io/gh/osociety/vernet)
## Features
1. Shows Wi-Fi details such as BSSID and MAC Address.
2. Scans for devices(or hosts) on network
3. Scans for open ports of target IP
4. Shows ISP details
5. Internet Speed Test using speedtest.net
## Screenshots
|Vernet|Home|Devices|Open Ports|
|-|-|-|-|
|<img src="android/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png" width = "200">|<img src="android/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png" width = "200">|<img src="android/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png" width = "200">|<img src="android/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png" width = "200">|
|Ping|DNS|Speed test|Settings|
|<img src="android/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png" width = "200">|<img src="android/fastlane/metadata/android/en-US/images/phoneScreenshots/7.png" width = "200">|<img src="android/fastlane/metadata/android/en-US/images/phoneScreenshots/8.png" width = "225">|<img src="android/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png" width = "200">|
## Download
| Android | iOS | macOS | Linux | Windows |
|-----------|-----|-------|-------|---------|
|<a href='https://f-droid.org/packages/org.fsociety.vernet'><img alt='Get it on F-droid' src='https://fdroid.gitlab.io/artwork/badge/get-it-on.png' width="100" /></a><a href='https://play.google.com/store/apps/details?id=org.fsociety.vernet.store'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png' width="100" /></a>| Works on emulator |<a href='https://github.com/git-elliot/vernet/releases/latest'><img alt='Get it on GitHub Releases' src='https://i.ibb.co/q0mdc4Z/get-it-on-github.png' width="100" />|<a href='https://github.com/git-elliot/vernet/releases/latest'><img alt='Get it on GitHub Releases' src='https://i.ibb.co/q0mdc4Z/get-it-on-github.png' width="100" />| <a href='https://github.com/git-elliot/vernet/releases/latest'><img alt='Get it on GitHub Releases' src='https://i.ibb.co/q0mdc4Z/get-it-on-github.png' width="100" />|
## How to install
### Instructions for macOS
Note: macOS build hasn't been notarized yet.
1. Star this repository.
2. Download vernet-macos.zip from [releases](https://github.com/git-elliot/vernet/releases/latest)
3. Extract downloaded zip file.
4. Copy app file to the Applications folder.
5. Go to Applications folder.
6. Press down cmd + left click on vernet.
7. In context menu, click on open.
### Instructions for Linux
1. Star this repository.
2. Install `net-tools` package for `arp` command, otherwise app will not run.
3. Download vernet-linux.zip from [releases](https://github.com/git-elliot/vernet/releases/latest)
4. Extract downloaded zip file.
5. Go to bundle folder and double click vernet file.
### Instruction for Windows
1. Star this repository.
2. Download vernet-windows.zip from [releases](https://github.com/git-elliot/vernet/releases/latest)
3. Extract downloaded zip file.
4. Run vernet.exe
5. Click on more info, tap on 'Run anyway'.
5. Give permission if asked.
## Contributors Required
1. Technical writer
Write us at fs0c19ty@protonmail.com
## Publishing to F-droid
You can follow this guide to publish your app to f-droid - https://op3nsoc13ty.blogspot.com/2021/06/publish-your-first-flutter-app-to-fdroid.html
## How to Contribute
1. Found bug? Open an [issue](https://github.com/git-elliot/vernet/issues)
2. Do you know Flutter? Fix bugs and open a [Pull Request](https://github.com/git-elliot/vernet/pulls)
## Support and Donate
1. Support this project by becoming stargazer of this project.
2. Rate our app on [Playstore](https://play.google.com/store/apps/details?id=org.fsociety.vernet.store)
3. Buy me a coffee.
| Librepay |
|----------|
|[](https://liberapay.com/OpenSociety/donate)
4. Support me on Ko-Fi
[](https://ko-fi.com/fs0c13ty)
================================================
FILE: analysis_options.yaml
================================================
# lint analysis
include: package:lint/analysis_options.yaml
analyzer:
errors:
depend_on_referenced_packages: ignore
missing_required_param: error
missing_return: error
must_be_immutable: error
exclude:
- "**/*.g.dart"
- "**/*.freezed.dart"
- "**/*.pb.dart"
- "**/*.pbenum.dart"
- "**/*.pbgrpc.dart"
- "**/*.pbjson.dart"
- "**/*.gr.dart"
- "**/*.config.dart"
linter:
rules:
# Use parameter order as in json response
# always_put_required_named_parameters_first: false
avoid_classes_with_only_static_members: false
sort_constructors_first: true
# Good packages document everything
public_member_api_docs: false
avoid_dynamic_calls: false
use_build_context_synchronously: false
avoid_positional_boolean_parameters: false
================================================
FILE: android/.gitignore
================================================
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
/key.properties
GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
report.xml
/app/property**
================================================
FILE: android/Gemfile
================================================
source "https://rubygems.org"
gem "fastlane"
gem 'abbrev'
gem 'logger'
gem 'mutex_m'
gem 'csv'
================================================
FILE: android/app/build.gradle
================================================
plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
}
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
compileSdk = 36
ndkVersion = "27.0.12077973"
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
applicationId "org.fsociety.vernet"
minSdkVersion 24
compileSdk 36
targetSdkVersion 36
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
crunchPngs false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
flavorDimensions = ["deploy"]
productFlavors {
dev {
dimension "deploy"
signingConfig signingConfigs.release
}
fdroid {
dimension "deploy"
signingConfig signingConfigs.release
}
store {
dimension "deploy"
signingConfig signingConfigs.release
applicationIdSuffix ".store"
versionNameSuffix "-store"
}
}
namespace "org.fsociety.vernet"
compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'
implementation 'androidx.window:window:1.4.0'
implementation 'androidx.window:window-java:1.4.0'
}
flutter {
source '../..'
}
================================================
FILE: android/app/proguard-rules.pro
================================================
## Gson rules
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }
# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
@com.google.gson.annotations.SerializedName <fields>;
}
# Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher.
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken
================================================
FILE: android/app/src/debug/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<!-- Add the block below to your manifest file to configure apps with action.VIEW intent filters as visible to your app -->
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
</queries>
<application
android:label="Vernet"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:exported="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<!-- Displays an Android View that continues showing the launch screen
Drawable until Flutter paints its first frame, then this splash
screen fades out. A splash screen is useful to avoid any visual
gap between the end of Android's launch screen and the painting of
Flutter's first frame. -->
<meta-data
android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@drawable/launch_background"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>
================================================
FILE: android/app/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<!-- Add the block below to your manifest file to configure apps with action.VIEW intent filters as visible to your app -->
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
<package android:name="org.fdroid.fdroid" />
</queries>
<application
android:label="Vernet"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:exported="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>
================================================
FILE: android/app/src/main/kotlin/org/fsociety/vernet/MainActivity.kt
================================================
package org.fsociety.vernet
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
}
================================================
FILE: android/app/src/main/res/drawable/ic_launcher_foreground.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108"
>
<group android:scaleX="3.3"
android:scaleY="3.3"
android:translateX="14.4"
android:translateY="14.4">
<path
android:fillColor="@android:color/black"
android:pathData="M19.74,18.33C21.15,16.6 22,14.4 22,12c0,-5.52 -4.48,-10 -10,-10S2,6.48 2,12s4.48,10 10,10c2.4,0 4.6,-0.85 6.33,-2.26c0.27,-0.22 0.53,-0.46 0.78,-0.71c0.03,-0.03 0.05,-0.06 0.07,-0.08C19.38,18.75 19.57,18.54 19.74,18.33zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8s8,3.59 8,8c0,1.85 -0.63,3.54 -1.69,4.9l-1.43,-1.43c0.69,-0.98 1.1,-2.17 1.1,-3.46c0,-3.31 -2.69,-6 -6,-6s-6,2.69 -6,6s2.69,6 6,6c1.3,0 2.51,-0.42 3.49,-1.13l1.42,1.42C15.54,19.37 13.85,20 12,20zM13.92,12.51c0.17,-0.66 0.02,-1.38 -0.49,-1.9l-0.02,-0.02c-0.77,-0.77 -2,-0.78 -2.78,-0.04c-0.01,0.01 -0.03,0.02 -0.05,0.04c-0.78,0.78 -0.78,2.05 0,2.83l0.02,0.02c0.52,0.51 1.25,0.67 1.91,0.49l1.51,1.51c-0.6,0.36 -1.29,0.58 -2.04,0.58c-2.21,0 -4,-1.79 -4,-4s1.79,-4 4,-4s4,1.79 4,4c0,0.73 -0.21,1.41 -0.56,2L13.92,12.51z"/>
</group>
</vector>
================================================
FILE: android/app/src/main/res/drawable/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/drawable-night/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/drawable-night-v21/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/drawable-v21/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>
================================================
FILE: android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>
================================================
FILE: android/app/src/main/res/raw/keep.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/*"/>
================================================
FILE: android/app/src/main/res/values/ic_launcher_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#FFFFFF</color>
</resources>
================================================
FILE: android/app/src/main/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/values-night/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/values-night-v31/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowSplashScreenBackground">#000000</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/values-v31/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowSplashScreenBackground">#FFFFFF</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/profile/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<!-- Add the block below to your manifest file to configure apps with action.VIEW intent filters as visible to your app -->
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
</queries>
<application
android:label="Vernet"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:exported="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<!-- Displays an Android View that continues showing the launch screen
Drawable until Flutter paints its first frame, then this splash
screen fades out. A splash screen is useful to avoid any visual
gap between the end of Android's launch screen and the painting of
Flutter's first frame. -->
<meta-data
android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@drawable/launch_background"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>
================================================
FILE: android/build.gradle
================================================
allprojects {
repositories {
google()
mavenCentral()
}
// Fix for Gradle Error.
// Namespace not specified. Specify a namespace in the module's build file
subprojects {
afterEvaluate { project ->
if (project.hasProperty('android')) {
project.android {
if (namespace == null) {
namespace project.group
}
}
}
}
}
}
rootProject.buildDir = '../build'
subprojects {
afterEvaluate { project ->
if (project.plugins.hasPlugin("com.android.application") ||
project.plugins.hasPlugin("com.android.library")) {
project.android {
compileSdkVersion 36
buildToolsVersion "36.0.0"
}
}
}
project.buildDir = "${rootProject.buildDir}/${project.name}"
project.evaluationDependsOn(':app')
}
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
================================================
FILE: android/fastlane/Fastfile
================================================
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
# Uncomment the line if you want fastlane to automatically update itself
update_fastlane
default_platform(:android)
platform :android do
desc "Runs all the tests"
lane :test do
gradle(task: "test")
end
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
upload_to_play_store(skip_upload_metadata: true,
skip_upload_changelogs: true,
skip_upload_images: true,
skip_upload_screenshots: true,
track: 'beta', aab: '../build/app/outputs/bundle/storeRelease/app-store-release.aab')
# sh "your_script.sh"
# You can also use other beta testing services here
end
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta_full do
upload_to_play_store(track: 'beta', aab: '../build/app/outputs/bundle/storeRelease/app-store-release.aab')
# sh "your_script.sh"
# You can also use other beta testing services here
end
desc "Deploy a new version to the Google Play"
lane :deploy do
upload_to_play_store(skip_upload_metadata: true,
skip_upload_changelogs: true,
skip_upload_images: true,
skip_upload_screenshots: true,
aab: '../build/app/outputs/bundle/storeRelease/app-store-release.aab')
end
desc "Deploy a new version to the Google Play"
lane :deploy_full do
upload_to_play_store(aab: '../build/app/outputs/bundle/storeRelease/app-store-release.aab')
end
end
================================================
FILE: android/fastlane/README.md
================================================
fastlane documentation
----
# Installation
Make sure you have the latest version of the Xcode command line tools installed:
```sh
xcode-select --install
```
For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
# Available Actions
## Android
### android test
```sh
[bundle exec] fastlane android test
```
Runs all the tests
### android beta
```sh
[bundle exec] fastlane android beta
```
Submit a new Beta Build to Crashlytics Beta
### android beta_full
```sh
[bundle exec] fastlane android beta_full
```
Submit a new Beta Build to Crashlytics Beta
### android deploy
```sh
[bundle exec] fastlane android deploy
```
Deploy a new version to the Google Play
### android deploy_full
```sh
[bundle exec] fastlane android deploy_full
```
Deploy a new version to the Google Play
----
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/1.txt
================================================
Only host scanner, port scanner and ping is supported.
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/10.txt
================================================
DNS Lookup added and minor improvements
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/13.txt
================================================
Play store release to beta using GHA
Added mdns search
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/14.txt
================================================
Release build artifacts using GHA
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/15.txt
================================================
Bug fixes and improvements
network_tools updated to v3.2.1
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/16.txt
================================================
Upgraded network_tools to v4.0.1
Mac address support added for Desktop
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/17.txt
================================================
Fixed full port scan freeze issue.
Theme and framework update.
Minor bug fixes and improvements.
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/18.txt
================================================
Follow system theme added and bug fixes
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/19.txt
================================================
Many improvements and bug fixes
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/2.txt
================================================
fastlane added and other minor fixes
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/20.txt
================================================
This version is release via CD. Now you will receive updates more faster.
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/21.txt
================================================
Minor bug fixes and improvments.
Publishing dmg for macos now.
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/22.txt
================================================
Run checks for windows and publish beta on android for prerelease publish
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/23.txt
================================================
Splash screen fix for all android devices.
Rescan button added alongside devices count.
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/24.txt
================================================
Splash screen fix for all android devices.
Rescan button added alongside devices count.
Icon updated for play store.
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/25.txt
================================================
## What's Changed
* Added rate our app in readme by @git-elliot in https://github.com/osociety/vernet/pull/169
* Update issue templates by @git-elliot in https://github.com/osociety/vernet/pull/170
* Added adaptive widgets for ios and macos by @git-elliot in https://github.com/osociety/vernet/pull/171
* Run test before build and restore keys in GHA by @git-elliot in https://github.com/osociety/vernet/pull/172
* fastlane i18n ru by @yurtpage in https://github.com/osociety/vernet/pull/175
* Add link to blog for f-droid publishing guide. by @git-elliot in https://github.com/osociety/vernet/pull/178
* Update README.md by @git-elliot in https://github.com/osociety/vernet/pull/179
* Uploaded to play store 1.0.7 by @git-elliot in https://github.com/osociety/vernet/pull/181
* Dev -> Main by @git-elliot in https://github.com/osociety/vernet/pull/180
## New Contributors
* @yurtpage made their first contribution in https://github.com/osociety/vernet/pull/175
**Full Changelog**: https://github.com/osociety/vernet/compare/v1.0.6+24...v1.0.7+25
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/26.txt
================================================
Added option in settings to run scan at app startup/launch
Upgraded to latest Android SDK.
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/27.txt
================================================
Bug fix for scan for devices not working
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/28.txt
================================================
Bug fix for scan for devices not working
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/29.txt
================================================
Fixed slowness of devices scan.
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/3.txt
================================================
Hard code versioning removed from settings page
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/30.txt
================================================
Fixed dll files missing when running app on Windows
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/31.txt
================================================
Compatibility issues fixed for windows
Scan slowness improved
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/32.txt
================================================
Compatibility issues fixed for windows
Scan slowness improved
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/33.txt
================================================
Bug fixes and improvements
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/34.txt
================================================
Added speed test using speedtest.net
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/35.txt
================================================
Added speedtest and ISP details.
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/36.txt
================================================
Added speed test and ISP details
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/37.txt
================================================
Fixed scan not working when downloading via Fdroid
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/38.txt
================================================
Performance fix for host scanner
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/39.txt
================================================
Upgraded network tools to latest
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/4.txt
================================================
Changelogs are now maintained in fastlane folder
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/40.txt
================================================
Added inbuilt speed test
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/5.txt
================================================
Unnecessary ACCESS_COARSE_LOCATION permission removed.
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/6.txt
================================================
ISP details added and minor improvements
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/7.txt
================================================
Bug Fixes and Improvements
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/8.txt
================================================
GeoLocation API updated and speed test via browser added
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/9.txt
================================================
1. Check for updates added.
2. Now ping works even when not connected to internet.
3. Now you can select ports to scan in different types(top, range, popular).
4. Open ports window can take domain as a input.
Other bug fixes and major improvements
================================================
FILE: android/fastlane/metadata/android/en-US/full_description.txt
================================================
Vernet - Network Analyzer and monitoring tool.
Features
1. Shows wifi details
2. Scans for devices(or hosts) on network
3. Scans for open ports of target IP
4. Shows ISP details
Vernet is an open source project hosted at github - https://github.com/git-elliot/vernet
================================================
FILE: android/fastlane/metadata/android/en-US/short_description.txt
================================================
Host and Port scanner. Ping IP or domain.
================================================
FILE: android/fastlane/metadata/android/en-US/title.txt
================================================
Vernet - Network Analyzer
================================================
FILE: android/fastlane/metadata/android/en-US/video.txt
================================================
================================================
FILE: android/gradle/wrapper/gradle-wrapper.properties
================================================
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip
#distributionSha256Sum=22449f5231796abd892c98b2a07c9ceebe4688d192cd2d6763f8e3bf8acbedeb
================================================
FILE: android/gradle.properties
================================================
## For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. For more details, visit
# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects
# org.gradle.parallel=true
#Tue Aug 20 07:29:49 IST 2024
android.enableJetifier=false
android.nonFinalResIds=false
android.nonTransitiveRClass=true
android.useAndroidX=true
org.gradle.jvmargs=-Xmx6g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g
# Build cache settings for faster builds
org.gradle.build-cache=true
org.gradle.caching=true
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.workers.max=4
# Deprecated - toggle if needed
# org.gradle.configuration-cache=true
# org.gradle.configuration-cache.problems=warn
================================================
FILE: android/settings.gradle
================================================
pluginManagement {
def flutterSdkPath = {
def properties = new Properties()
file("local.properties").withInputStream { properties.load(it) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
return flutterSdkPath
}()
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version '8.12.0' apply false
id "org.jetbrains.kotlin.android" version "2.1.0" apply false
}
dependencyResolutionManagement{
repositories{
maven { url "https://jitpack.io" }
}
}
include ":app"
================================================
FILE: android/settings_aar.gradle
================================================
include ':app'
================================================
FILE: assets/ipwhois.json
================================================
{
"ip": "8.8.4.4",
"success": true,
"type": "IPv4",
"continent": "North America",
"continent_code": "NA",
"country": "United States",
"country_code": "US",
"country_flag": "https://cdn.ipwhois.io/flags/us.svg",
"country_capital": "Washington",
"country_phone": "+1",
"country_neighbours": "CA,MX,CU",
"region": "California",
"city": "Mountain View",
"latitude": "37.3860517",
"longitude": "-122.0838511",
"asn": "AS15169",
"org": "Google LLC",
"isp": "Google LLC",
"timezone": "America/Los_Angeles",
"timezone_name": "Pacific Standard Time",
"timezone_dstOffset": "0",
"timezone_gmtOffset": "-28800",
"timezone_gmt": "GMT -8:00",
"currency": "US Dollar",
"currency_code": "USD",
"currency_symbol": "$",
"currency_rates": "1",
"currency_plural": "US dollars",
"completed_requests": 0
}
================================================
FILE: assets/ports_lists.json
================================================
{
"0": [
{
"description": "Reserved",
"udp": true,
"status": "Official",
"port": "0",
"tcp": false
}
],
"1": [
{
"description": "TCP Port Service Multiplexer (TCPMUX)",
"udp": true,
"status": "Official",
"port": "1",
"tcp": true
}
],
"2": [
{
"description": "CompressNET[2] Management Utility[3]",
"udp": true,
"status": "Official",
"port": "2",
"tcp": true
}
],
"3": [
{
"description": "CompressNET[2] Compression Process[4]",
"udp": true,
"status": "Official",
"port": "3",
"tcp": true
}
],
"4": [
{
"description": "Unassigned",
"udp": true,
"status": "Official",
"port": "4",
"tcp": true
}
],
"5": [
{
"description": "Remote Job Entry",
"udp": true,
"status": "Official",
"port": "5",
"tcp": true
}
],
"7": [
{
"description": "Echo Protocol",
"udp": true,
"status": "Official",
"port": "7",
"tcp": true
}
],
"8": [
{
"description": "Unassigned",
"udp": true,
"status": "Official",
"port": "8",
"tcp": true
}
],
"9": [
{
"description": "Discard Protocol",
"udp": true,
"status": "Official",
"port": "9",
"tcp": true
},
{
"description": "Wake-on-LAN",
"udp": true,
"status": "Unofficial",
"port": "9",
"tcp": false
}
],
"10": [
{
"description": "Unassigned",
"udp": true,
"status": "Official",
"port": "10",
"tcp": true
}
],
"11": [
{
"description": "Active Users (systat service)[5][6]",
"udp": true,
"status": "Official",
"port": "11",
"tcp": true
}
],
"12": [
{
"description": "Unassigned",
"udp": true,
"status": "Official",
"port": "12",
"tcp": true
}
],
"13": [
{
"description": "Daytime Protocol (RFC 867)",
"udp": true,
"status": "Official",
"port": "13",
"tcp": true
}
],
"14": [
{
"description": "Unassigned",
"udp": true,
"status": "Official",
"port": "14",
"tcp": true
}
],
"15": [
{
"description": "Previously netstat service[5]",
"udp": true,
"status": "Unofficial",
"port": "15",
"tcp": true
}
],
"16": [
{
"description": "Unassigned",
"udp": true,
"status": "Official",
"port": "16",
"tcp": true
}
],
"17": [
{
"description": "Quote of the Day",
"udp": true,
"status": "Official",
"port": "17",
"tcp": true
}
],
"18": [
{
"description": "Message Send Protocol",
"udp": true,
"status": "Official",
"port": "18",
"tcp": true
}
],
"19": [
{
"description": "Character Generator Protocol (CHARGEN)",
"udp": true,
"status": "Official",
"port": "19",
"tcp": true
}
],
"20": [
{
"description": "FTP data transfer",
"udp": true,
"status": "Official",
"port": "20",
"tcp": true
}
],
"21": [
{
"description": "FTP control (command)",
"udp": false,
"status": "Official",
"port": "21",
"tcp": true
}
],
"22": [
{
"description": "Secure Shell (SSH) used for secure logins, file transfers (scp, sftp) and port forwarding",
"udp": true,
"status": "Official",
"port": "22",
"tcp": true
}
],
"23": [
{
"description": "Telnet protocol unencrypted text communications",
"udp": true,
"status": "Official",
"port": "23",
"tcp": true
}
],
"24": [
{
"description": "Priv-mail: any private mail system.",
"udp": true,
"status": "Official",
"port": "24",
"tcp": true
}
],
"25": [
{
"description": "Simple Mail Transfer Protocol (SMTP) used for e-mail routing between mail servers",
"udp": false,
"status": "Official",
"port": "25",
"tcp": true
}
],
"26": [
{
"description": "Unassigned",
"udp": true,
"status": "Official",
"port": "26",
"tcp": true
}
],
"27": [
{
"description": "NSW User System FE",
"udp": true,
"status": "Official",
"port": "27",
"tcp": true
}
],
"29": [
{
"description": "MSG ICP",
"udp": true,
"status": "Official",
"port": "29",
"tcp": true
}
],
"33": [
{
"description": "Display Support Protocol",
"udp": true,
"status": "Official",
"port": "33",
"tcp": true
}
],
"35": [
{
"description": "Any private printer server protocol",
"udp": true,
"status": "Official",
"port": "35",
"tcp": true
}
],
"37": [
{
"description": "TIME protocol",
"udp": true,
"status": "Official",
"port": "37",
"tcp": true
}
],
"39": [
{
"description": "Resource Location Protocol[7] (RLP) used for determining the location of higher level services from hosts on a network",
"udp": true,
"status": "Official",
"port": "39",
"tcp": true
}
],
"40": [
{
"description": "Unassigned",
"udp": true,
"status": "Official",
"port": "40",
"tcp": true
}
],
"42": [
{
"description": "ARPA Host Name Server Protocol",
"udp": true,
"status": "Official",
"port": "42",
"tcp": true
},
{
"description": "Windows Internet Name Service",
"udp": true,
"status": "Unofficial",
"port": "42",
"tcp": true
}
],
"43": [
{
"description": "WHOIS protocol",
"udp": false,
"status": "Official",
"port": "43",
"tcp": true
}
],
"47": [
{
"description": "NI FTP[7]",
"udp": true,
"status": "Official",
"port": "47",
"tcp": true
}
],
"49": [
{
"description": "TACACS Login Host protocol",
"udp": true,
"status": "Official",
"port": "49",
"tcp": true
}
],
"50": [
{
"description": "Remote Mail Checking Protocol[8]",
"udp": true,
"status": "Official",
"port": "50",
"tcp": true
}
],
"51": [
{
"description": "IMP Logical Address Maintenance",
"udp": true,
"status": "Official",
"port": "51",
"tcp": true
}
],
"52": [
{
"description": "XNS (Xerox Network Systems) Time Protocol",
"udp": true,
"status": "Official",
"port": "52",
"tcp": true
}
],
"53": [
{
"description": "Domain Name System (DNS)",
"udp": true,
"status": "Official",
"port": "53",
"tcp": true
}
],
"54": [
{
"description": "XNS (Xerox Network Systems) Clearinghouse",
"udp": true,
"status": "Official",
"port": "54",
"tcp": true
}
],
"55": [
{
"description": "ISI Graphics Language (ISI-GL)",
"udp": true,
"status": "Official",
"port": "55",
"tcp": true
}
],
"56": [
{
"description": "XNS (Xerox Network Systems) Authentication",
"udp": true,
"status": "Official",
"port": "56",
"tcp": true
},
{
"description": "Route Access Protocol (RAP)[9]",
"udp": true,
"status": "Unofficial",
"port": "56",
"tcp": true
}
],
"57": [
{
"description": "Mail Transfer Protocol (RFC 780)",
"udp": false,
"status": "Official",
"port": "57",
"tcp": true
}
],
"58": [
{
"description": "XNS (Xerox Network Systems) Mail",
"udp": true,
"status": "Official",
"port": "58",
"tcp": true
}
],
"64": [
{
"description": "CI (Travelport) (formerly Covia) Comms Integrator",
"udp": true,
"status": "Official",
"port": "64",
"tcp": true
}
],
"67": [
{
"description": "Bootstrap Protocol (BOOTP) Server; also used by Dynamic Host Configuration Protocol (DHCP)",
"udp": true,
"status": "Official",
"port": "67",
"tcp": false
}
],
"68": [
{
"description": "Bootstrap Protocol (BOOTP) Client; also used by Dynamic Host Configuration Protocol (DHCP)",
"udp": true,
"status": "Official",
"port": "68",
"tcp": false
}
],
"69": [
{
"description": "Trivial File Transfer Protocol (TFTP)",
"udp": true,
"status": "Official",
"port": "69",
"tcp": false
}
],
"70": [
{
"description": "Gopher protocol",
"udp": false,
"status": "Official",
"port": "70",
"tcp": true
}
],
"71": [
{
"description": "NETRJS protocol",
"udp": false,
"status": "Official",
"port": "71",
"tcp": true
}
],
"72": [
{
"description": "NETRJS protocol",
"udp": false,
"status": "Official",
"port": "72",
"tcp": true
}
],
"73": [
{
"description": "NETRJS protocol",
"udp": false,
"status": "Official",
"port": "73",
"tcp": true
}
],
"74": [
{
"description": "NETRJS protocol",
"udp": false,
"status": "Official",
"port": "74",
"tcp": true
}
],
"77": [
{
"description": "priv-rjs protocol which is considered unsafe by Google Chrome[10]",
"udp": false,
"status": "Unofficial",
"port": "77",
"tcp": false
}
],
"79": [
{
"description": "Finger protocol",
"udp": false,
"status": "Official",
"port": "79",
"tcp": true
}
],
"80": [
{
"description": "Hypertext Transfer Protocol (HTTP)",
"udp": false,
"status": "Official [11]",
"port": "80",
"tcp": true
}
],
"81": [
{
"description": "Torpark Onion routing",
"udp": false,
"status": "Unofficial",
"port": "81",
"tcp": true
}
],
"82": [
{
"description": "Torpark Control",
"udp": true,
"status": "Unofficial",
"port": "82",
"tcp": false
}
],
"88": [
{
"description": "Kerberos authentication system",
"udp": true,
"status": "Official",
"port": "88",
"tcp": true
}
],
"90": [
{
"description": "dnsix (DoD Network Security for Information Exchange) Securit Attribute Token Map",
"udp": true,
"status": "Official",
"port": "90",
"tcp": true
},
{
"description": "PointCast (dotcom)",
"udp": true,
"status": "Unofficial",
"port": "90",
"tcp": true
}
],
"99": [
{
"description": "WIP Message protocol",
"udp": false,
"status": "Unofficial",
"port": "99",
"tcp": true
}
],
"100": [
{
"description": "CyberGate RAT protocol",
"udp": true,
"status": "Unofficial",
"port": "100",
"tcp": false
}
],
"101": [
{
"description": "NIC host name",
"udp": false,
"status": "Official",
"port": "101",
"tcp": true
}
],
"102": [
{
"description": "ISO-TSAP (Transport Service Access Point) Class 0 protocol;[12] also used by Digital Equipment Corporation DECnet (Phase V+) over TCP/IP",
"udp": false,
"status": "Official",
"port": "102",
"tcp": true
}
],
"104": [
{
"description": "ACR/NEMA Digital Imaging and Communications in Medicine (DICOM)",
"udp": true,
"status": "Official",
"port": "104",
"tcp": true
}
],
"105": [
{
"description": "CCSO Nameserver Protocol (Qi/Ph)",
"udp": true,
"status": "Official",
"port": "105",
"tcp": true
}
],
"107": [
{
"description": "Remote TELNET Service[13] protocol",
"udp": false,
"status": "Official",
"port": "107",
"tcp": true
}
],
"108": [
{
"description": "SNA Gateway Access Server [1]",
"udp": true,
"status": "Official",
"port": "108",
"tcp": true
}
],
"109": [
{
"description": "Post Office Protocol v2 (POP2)",
"udp": false,
"status": "Official",
"port": "109",
"tcp": true
}
],
"110": [
{
"description": "Post Office Protocol v3 (POP3)",
"udp": false,
"status": "Official",
"port": "110",
"tcp": true
}
],
"111": [
{
"description": "ONC RPC (Sun RPC)",
"udp": true,
"status": "Official",
"port": "111",
"tcp": true
}
],
"113": [
{
"description": "Ident Authentication Service/Identification Protocol,[14] used by IRC servers to identify users",
"udp": false,
"status": "Official",
"port": "113",
"tcp": true
},
{
"description": "Authentication Service[14] (auth)",
"udp": true,
"status": "Official",
"port": "113",
"tcp": false
}
],
"115": [
{
"description": "Simple File Transfer Protocol (SFTP)",
"udp": false,
"status": "Official",
"port": "115",
"tcp": true
}
],
"117": [
{
"description": "UUCP Path Service",
"udp": false,
"status": "Official",
"port": "117",
"tcp": true
}
],
"118": [
{
"description": "SQL (Structured Query Language) Services",
"udp": true,
"status": "Official",
"port": "118",
"tcp": true
}
],
"119": [
{
"description": "Network News Transfer Protocol (NNTP) retrieval of newsgroup messages",
"udp": false,
"status": "Official",
"port": "119",
"tcp": true
}
],
"123": [
{
"description": "Network Time Protocol (NTP) used for time synchronization",
"udp": true,
"status": "Official",
"port": "123",
"tcp": false
}
],
"126": [
{
"description": "Formerly Unisys Unitary Login, renamed by Unisys to NXEdit. Used by Unisys Programmer's Workbench for Clearpath MCP, an IDE for Unisys MCP software development",
"udp": true,
"status": "Official",
"port": "126",
"tcp": true
}
],
"135": [
{
"description": "DCE endpoint resolution",
"udp": true,
"status": "Official",
"port": "135",
"tcp": true
},
{
"description": "Microsoft EPMAP (End Point Mapper), also known as DCE/RPC Locator service,[15] used to remotely manage services including DHCP server, DNS server and WINS. Also used by DCOM",
"udp": true,
"status": "Unofficial",
"port": "135",
"tcp": true
}
],
"137": [
{
"description": "NetBIOS NetBIOS Name Service",
"udp": true,
"status": "Official",
"port": "137",
"tcp": true
}
],
"138": [
{
"description": "NetBIOS NetBIOS Datagram Service",
"udp": true,
"status": "Official",
"port": "138",
"tcp": true
}
],
"139": [
{
"description": "NetBIOS NetBIOS Session Service",
"udp": true,
"status": "Official",
"port": "139",
"tcp": true
}
],
"143": [
{
"description": "Internet Message Access Protocol (IMAP) management of email messages",
"udp": false,
"status": "Official",
"port": "143",
"tcp": true
}
],
"152": [
{
"description": "Background File Transfer Program (BFTP)[16]",
"udp": true,
"status": "Official",
"port": "152",
"tcp": true
}
],
"153": [
{
"description": "SGMP, Simple Gateway Monitoring Protocol",
"udp": true,
"status": "Official",
"port": "153",
"tcp": true
}
],
"156": [
{
"description": "SQL Service",
"udp": true,
"status": "Official",
"port": "156",
"tcp": true
}
],
"158": [
{
"description": "DMSP, Distributed Mail Service Protocol[17]",
"udp": true,
"status": "Unofficial",
"port": "158",
"tcp": true
}
],
"161": [
{
"description": "Simple Network Management Protocol (SNMP)",
"udp": true,
"status": "Official",
"port": "161",
"tcp": false
}
],
"162": [
{
"description": "Simple Network Management Protocol Trap (SNMPTRAP)[18]",
"udp": true,
"status": "Official",
"port": "162",
"tcp": true
}
],
"170": [
{
"description": "Print-srv, Network PostScript",
"udp": false,
"status": "Official",
"port": "170",
"tcp": true
}
],
"175": [
{
"description": "VMNET (IBM z/VM, z/OS & z/VSE - Network Job Entry(NJE))",
"udp": false,
"status": "Official",
"port": "175",
"tcp": true
}
],
"177": [
{
"description": "X Display Manager Control Protocol (XDMCP)",
"udp": true,
"status": "Official",
"port": "177",
"tcp": true
}
],
"179": [
{
"description": "BGP (Border Gateway Protocol)",
"udp": false,
"status": "Official",
"port": "179",
"tcp": true
}
],
"194": [
{
"description": "Internet Relay Chat (IRC)",
"udp": true,
"status": "Official",
"port": "194",
"tcp": true
}
],
"199": [
{
"description": "SMUX, SNMP Unix Multiplexer",
"udp": true,
"status": "Official",
"port": "199",
"tcp": true
}
],
"201": [
{
"description": "AppleTalk Routing Maintenance",
"udp": true,
"status": "Official",
"port": "201",
"tcp": true
}
],
"209": [
{
"description": "The Quick Mail Transfer Protocol",
"udp": true,
"status": "Official",
"port": "209",
"tcp": true
}
],
"210": [
{
"description": "ANSI Z39.50",
"udp": true,
"status": "Official",
"port": "210",
"tcp": true
}
],
"213": [
{
"description": "Internetwork Packet Exchange (IPX)",
"udp": true,
"status": "Official",
"port": "213",
"tcp": true
}
],
"218": [
{
"description": "Message posting protocol (MPP)",
"udp": true,
"status": "Official",
"port": "218",
"tcp": true
}
],
"220": [
{
"description": "Internet Message Access Protocol (IMAP), version 3",
"udp": true,
"status": "Official",
"port": "220",
"tcp": true
}
],
"259": [
{
"description": "ESRO, Efficient Short Remote Operations",
"udp": true,
"status": "Official",
"port": "259",
"tcp": true
}
],
"264": [
{
"description": "BGMP, Border Gateway Multicast Protocol",
"udp": true,
"status": "Official",
"port": "264",
"tcp": true
}
],
"280": [
{
"description": "http-mgmt",
"udp": true,
"status": "Official",
"port": "280",
"tcp": true
}
],
"300": [
{
"description": "ThinLinc Web Access",
"udp": false,
"status": "Unofficial",
"port": "300",
"tcp": true
}
],
"308": [
{
"description": "Novastor Online Backup",
"udp": false,
"status": "Official",
"port": "308",
"tcp": true
}
],
"311": [
{
"description": "Mac OS X Server Admin (officially AppleShare IP Web administration)",
"udp": false,
"status": "Official",
"port": "311",
"tcp": true
}
],
"318": [
{
"description": "PKIX TSP, Time Stamp Protocol",
"udp": true,
"status": "Official",
"port": "318",
"tcp": true
}
],
"319": [
{
"description": "Precision time protocol event messages",
"udp": true,
"status": "Official",
"port": "319",
"tcp": false
}
],
"320": [
{
"description": "Precision time protocol general messages",
"udp": true,
"status": "Official",
"port": "320",
"tcp": false
}
],
"350": [
{
"description": "MATIP-Type A, Mapping of Airline Traffic over Internet Protocol",
"udp": true,
"status": "Official",
"port": "350",
"tcp": true
}
],
"351": [
{
"description": "MATIP-Type B, Mapping of Airline Traffic over Internet Protocol",
"udp": true,
"status": "Official",
"port": "351",
"tcp": true
}
],
"366": [
{
"description": "ODMR, On-Demand Mail Relay",
"udp": true,
"status": "Official",
"port": "366",
"tcp": true
}
],
"369": [
{
"description": "Rpc2portmap",
"udp": true,
"status": "Official",
"port": "369",
"tcp": true
}
],
"370": [
{
"description": "codaauth2 Coda authentication server",
"udp": false,
"status": "Official",
"port": "370",
"tcp": true
},
{
"description": "codaauth2 Coda authentication server",
"udp": true,
"status": "Official",
"port": "370",
"tcp": false
},
{
"description": "securecast1 Outgoing packets to NAI's servers [19][dead link]",
"udp": true,
"status": "Unofficial",
"port": "370",
"tcp": false
}
],
"371": [
{
"description": "ClearCase albd",
"udp": true,
"status": "Official",
"port": "371",
"tcp": true
}
],
"383": [
{
"description": "HP data alarm manager",
"udp": true,
"status": "Official",
"port": "383",
"tcp": true
}
],
"384": [
{
"description": "A Remote Network Server System",
"udp": true,
"status": "Official",
"port": "384",
"tcp": true
}
],
"387": [
{
"description": "AURP, AppleTalk Update-based Routing Protocol[20]",
"udp": true,
"status": "Official",
"port": "387",
"tcp": true
}
],
"389": [
{
"description": "Lightweight Directory Access Protocol (LDAP)",
"udp": true,
"status": "Official",
"port": "389",
"tcp": true
}
],
"399": [
{
"description": "Digital Equipment Corporation DECnet (Phase V+) over TCP/IP",
"udp": true,
"status": "Official",
"port": "399",
"tcp": true
}
],
"401": [
{
"description": "UPS Uninterruptible Power Supply",
"udp": true,
"status": "Official",
"port": "401",
"tcp": true
}
],
"427": [
{
"description": "Service Location Protocol (SLP)",
"udp": true,
"status": "Official",
"port": "427",
"tcp": true
}
],
"443": [
{
"description": "Hypertext Transfer Protocol over TLS/SSL (HTTPS)",
"udp": false,
"status": "Official",
"port": "443",
"tcp": true
}
],
"444": [
{
"description": "SNPP, Simple Network Paging Protocol (RFC 1568)",
"udp": true,
"status": "Official",
"port": "444",
"tcp": true
}
],
"445": [
{
"description": "Microsoft-DS Active Directory, Windows shares",
"udp": false,
"status": "Official",
"port": "445",
"tcp": true
},
{
"description": "Microsoft-DS SMB file sharing",
"udp": false,
"status": "Official",
"port": "445",
"tcp": true
}
],
"464": [
{
"description": "Kerberos Change/Set password",
"udp": true,
"status": "Official",
"port": "464",
"tcp": true
}
],
"465": [
{
"description": "URL Rendesvous Directory for SSM (Cisco protocol)",
"udp": false,
"status": "Official",
"port": "465",
"tcp": true
}
],
"475": [
{
"description": "tcpnethaspsrv (Aladdin Knowledge Systems Hasp services, TCP/IP version)",
"udp": true,
"status": "Official",
"port": "475",
"tcp": true
}
],
"491": [
{
"description": "GoGlobal TCP/IP version)",
"udp": true,
"status": "",
"port": "491",
"tcp": true
}
],
"497": [
{
"description": "Dantz Retrospect",
"udp": false,
"status": "Official",
"port": "497",
"tcp": true
}
],
"500": [
{
"description": "Internet Security Association and Key Management Protocol (ISAKMP)",
"udp": true,
"status": "Official",
"port": "500",
"tcp": false
}
],
"502": [
{
"description": "Modbus, Protocol",
"udp": true,
"status": "Unofficial",
"port": "502",
"tcp": true
}
],
"504": [
{
"description": "Citadel multiservice protocol for dedicated clients for the Citadel groupware system",
"udp": true,
"status": "Official",
"port": "504",
"tcp": true
}
],
"512": [
{
"description": "Rexec, Remote Process Execution",
"udp": false,
"status": "Official",
"port": "512",
"tcp": true
},
{
"description": "comsat, together with biff",
"udp": true,
"status": "Official",
"port": "512",
"tcp": false
}
],
"513": [
{
"description": "rlogin",
"udp": false,
"status": "Official",
"port": "513",
"tcp": true
},
{
"description": "Who[21]",
"udp": true,
"status": "Official",
"port": "513",
"tcp": false
}
],
"514": [
{
"description": "Shell used to execute non-interactive commands on a remote system (Remote Shell, rsh, remsh)",
"udp": false,
"status": "Official",
"port": "514",
"tcp": true
},
{
"description": "Syslog used for system logging",
"udp": true,
"status": "Official",
"port": "514",
"tcp": false
}
],
"515": [
{
"description": "Line Printer Daemon print service",
"udp": false,
"status": "Official",
"port": "515",
"tcp": true
}
],
"517": [
{
"description": "Talk",
"udp": true,
"status": "Official",
"port": "517",
"tcp": false
}
],
"518": [
{
"description": "NTalk",
"udp": true,
"status": "Official",
"port": "518",
"tcp": false
}
],
"520": [
{
"description": "efs, extended file name server",
"udp": false,
"status": "Official",
"port": "520",
"tcp": true
},
{
"description": "Routing Information Protocol (RIP)",
"udp": true,
"status": "Official",
"port": "520",
"tcp": false
}
],
"524": [
{
"description": "NetWare Core Protocol (NCP) is used for a variety things such as access to primary NetWare server resources, Time Synchronization, etc.",
"udp": true,
"status": "Official",
"port": "524",
"tcp": true
}
],
"525": [
{
"description": "Timed, Timeserver",
"udp": true,
"status": "Official",
"port": "525",
"tcp": false
}
],
"530": [
{
"description": "RPC",
"udp": true,
"status": "Official",
"port": "530",
"tcp": true
}
],
"531": [
{
"description": "AOL Instant Messenger",
"udp": true,
"status": "Unofficial",
"port": "531",
"tcp": true
}
],
"532": [
{
"description": "netnews",
"udp": false,
"status": "Official",
"port": "532",
"tcp": true
}
],
"533": [
{
"description": "netwall, For Emergency Broadcasts",
"udp": true,
"status": "Official",
"port": "533",
"tcp": false
}
],
"540": [
{
"description": "UUCP (Unix-to-Unix Copy Protocol)",
"udp": false,
"status": "Official",
"port": "540",
"tcp": true
}
],
"542": [
{
"description": "commerce (Commerce Applications)",
"udp": true,
"status": "Official",
"port": "542",
"tcp": true
}
],
"543": [
{
"description": "klogin, Kerberos login",
"udp": false,
"status": "Official",
"port": "543",
"tcp": true
}
],
"544": [
{
"description": "kshell, Kerberos Remote shell",
"udp": false,
"status": "Official",
"port": "544",
"tcp": true
}
],
"545": [
{
"description": "OSIsoft PI (VMS), OSISoft PI Server Client Access",
"udp": false,
"status": "Unofficial",
"port": "545",
"tcp": true
}
],
"546": [
{
"description": "DHCPv6 client",
"udp": true,
"status": "Official",
"port": "546",
"tcp": true
}
],
"547": [
{
"description": "DHCPv6 server",
"udp": true,
"status": "Official",
"port": "547",
"tcp": true
}
],
"548": [
{
"description": "Apple Filing Protocol (AFP) over TCP",
"udp": false,
"status": "Official",
"port": "548",
"tcp": true
}
],
"550": [
{
"description": "new-rwho, new-who[21]",
"udp": true,
"status": "Official",
"port": "550",
"tcp": true
}
],
"554": [
{
"description": "Real Time Streaming Protocol (RTSP)",
"udp": true,
"status": "Official",
"port": "554",
"tcp": true
}
],
"556": [
{
"description": "Remotefs, RFS, rfs_server",
"udp": false,
"status": "Official",
"port": "556",
"tcp": true
}
],
"560": [
{
"description": "rmonitor, Remote Monitor",
"udp": true,
"status": "Official",
"port": "560",
"tcp": false
}
],
"561": [
{
"description": "monitor",
"udp": true,
"status": "Official",
"port": "561",
"tcp": false
}
],
"563": [
{
"description": "NNTP protocol over TLS/SSL (NNTPS)",
"udp": true,
"status": "Official",
"port": "563",
"tcp": true
}
],
"587": [
{
"description": "e-mail message submission[22] (SMTP)",
"udp": false,
"status": "Official",
"port": "587",
"tcp": true
}
],
"591": [
{
"description": "FileMaker 6.0 (and later) Web Sharing (HTTP Alternate, also see port 80)",
"udp": false,
"status": "Official",
"port": "591",
"tcp": true
}
],
"593": [
{
"description": "HTTP RPC Ep Map, Remote procedure call over Hypertext Transfer Protocol, often used by Distributed Component Object Model services and Microsoft Exchange Server",
"udp": true,
"status": "Official",
"port": "593",
"tcp": true
}
],
"604": [
{
"description": "TUNNEL profile,[23] a protocol for BEEP peers to form an application layer tunnel",
"udp": false,
"status": "Official",
"port": "604",
"tcp": true
}
],
"623": [
{
"description": "ASF Remote Management and Control Protocol (ASF-RMCP)",
"udp": true,
"status": "Official",
"port": "623",
"tcp": false
}
],
"631": [
{
"description": "Internet Printing Protocol (IPP)",
"udp": true,
"status": "Official",
"port": "631",
"tcp": true
},
{
"description": "Common Unix Printing System (CUPS)",
"udp": true,
"status": "Unofficial",
"port": "631",
"tcp": true
}
],
"635": [
{
"description": "RLZ DBase",
"udp": true,
"status": "Official",
"port": "635",
"tcp": true
}
],
"636": [
{
"description": "Lightweight Directory Access Protocol over TLS/SSL (LDAPS)",
"udp": true,
"status": "Official",
"port": "636",
"tcp": true
}
],
"639": [
{
"description": "MSDP, Multicast Source Discovery Protocol",
"udp": true,
"status": "Official",
"port": "639",
"tcp": true
}
],
"641": [
{
"description": "SupportSoft Nexus Remote Command (control/listening): A proxy gateway connecting remote control traffic",
"udp": true,
"status": "Official",
"port": "641",
"tcp": true
}
],
"646": [
{
"description": "LDP, Label Distribution Protocol, a routing protocol used in MPLS networks",
"udp": true,
"status": "Official",
"port": "646",
"tcp": true
}
],
"647": [
{
"description": "DHCP Failover protocol[24]",
"udp": false,
"status": "Official",
"port": "647",
"tcp": true
}
],
"648": [
{
"description": "RRP (Registry Registrar Protocol)[25]",
"udp": false,
"status": "Official",
"port": "648",
"tcp": true
}
],
"651": [
{
"description": "IEEE-MMS",
"udp": true,
"status": "Official",
"port": "651",
"tcp": true
}
],
"653": [
{
"description": "SupportSoft Nexus Remote Command (data): A proxy gateway connecting remote control traffic",
"udp": true,
"status": "Official",
"port": "653",
"tcp": true
}
],
"654": [
{
"description": "Media Management System (MMS) Media Management Protocol (MMP)[26]",
"udp": false,
"status": "Official",
"port": "654",
"tcp": true
}
],
"657": [
{
"description": "IBM RMC (Remote monitoring and Control) protocol, used by System p5 AIX Integrated Virtualization Manager (IVM)[27] and Hardware Management Console to connect managed logical partitions (LPAR) to enable dynamic partition reconfiguration",
"udp": true,
"status": "Official",
"port": "657",
"tcp": true
}
],
"660": [
{
"description": "Mac OS X Server administration",
"udp": false,
"status": "Official",
"port": "660",
"tcp": true
}
],
"666": [
{
"description": "Doom, first online first-person shooter",
"udp": true,
"status": "Official",
"port": "666",
"tcp": false
},
{
"description": "airserv-ng, aircrack-ng's server for remote-controlling wireless devices",
"udp": false,
"status": "Unofficial",
"port": "666",
"tcp": true
}
],
"674": [
{
"description": "ACAP (Application Configuration Access Protocol)",
"udp": false,
"status": "Official",
"port": "674",
"tcp": true
}
],
"688": [
{
"description": "REALM-RUSD (ApplianceWare Server Appliance Management Protocol)",
"udp": true,
"status": "Official",
"port": "688",
"tcp": true
}
],
"691": [
{
"description": "MS Exchange Routing",
"udp": false,
"status": "Official",
"port": "691",
"tcp": true
}
],
"694": [
{
"description": "Linux-HA High availability Heartbeat",
"udp": true,
"status": "Official",
"port": "694",
"tcp": true
}
],
"695": [
{
"description": "IEEE-MMS-SSL (IEEE Media Management System over SSL)[28]",
"udp": false,
"status": "Official",
"port": "695",
"tcp": true
}
],
"698": [
{
"description": "OLSR (Optimized Link State Routing)",
"udp": true,
"status": "Official",
"port": "698",
"tcp": false
}
],
"700": [
{
"description": "EPP (Extensible Provisioning Protocol), a protocol for communication between domain name registries and registrars (RFC 5734)",
"udp": false,
"status": "Official",
"port": "700",
"tcp": true
}
],
"701": [
{
"description": "LMP (Link Management Protocol (Internet)),[29] a protocol that runs between a pair of nodes and is used to manage traffic engineering (TE) links",
"udp": false,
"status": "Official",
"port": "701",
"tcp": true
}
],
"702": [
{
"description": "IRIS[30][31] (Internet Registry Information Service) over BEEP (Blocks Extensible Exchange Protocol)[32] (RFC 3983)",
"udp": false,
"status": "Official",
"port": "702",
"tcp": true
}
],
"706": [
{
"description": "Secure Internet Live Conferencing (SILC)",
"udp": false,
"status": "Official",
"port": "706",
"tcp": true
}
],
"711": [
{
"description": "Cisco Tag Distribution Protocol[33][34][35] being replaced by the MPLS Label Distribution Protocol[36]",
"udp": false,
"status": "Official",
"port": "711",
"tcp": true
}
],
"712": [
{
"description": "Topology Broadcast based on Reverse-Path Forwarding routing protocol (TBRPF) (RFC 3684)",
"udp": false,
"status": "Official",
"port": "712",
"tcp": true
}
],
"749": [
{
"description": "Kerberos (protocol) administration",
"udp": true,
"status": "Official",
"port": "749",
"tcp": true
}
],
"750": [
{
"description": "kerberos-iv, Kerberos version IV",
"udp": true,
"status": "Official",
"port": "750",
"tcp": false
}
],
"751": [
{
"description": "kerberos_master, Kerberos authentication",
"udp": true,
"status": "Unofficial",
"port": "751",
"tcp": true
}
],
"752": [
{
"description": "passwd_server, Kerberos Password (kpasswd) server",
"udp": true,
"status": "Unofficial",
"port": "752",
"tcp": false
}
],
"753": [
{
"description": "Reverse Routing Header (rrh)[37]",
"udp": false,
"status": "Official",
"port": "753",
"tcp": true
},
{
"description": "Reverse Routing Header (rrh)",
"udp": true,
"status": "Official",
"port": "753",
"tcp": false
},
{
"description": "userreg_server, Kerberos userreg server",
"udp": true,
"status": "Unofficial",
"port": "753",
"tcp": false
}
],
"754": [
{
"description": "tell send",
"udp": false,
"status": "Official",
"port": "754",
"tcp": true
},
{
"description": "krb5_prop, Kerberos v5 slave propagation",
"udp": false,
"status": "Unofficial",
"port": "754",
"tcp": true
},
{
"description": "tell send",
"udp": true,
"status": "Official",
"port": "754",
"tcp": false
}
],
"760": [
{
"description": "krbupdate [kreg], Kerberos registration",
"udp": true,
"status": "Unofficial",
"port": "760",
"tcp": true
}
],
"782": [
{
"description": "Conserver serial-console management server",
"udp": false,
"status": "Unofficial",
"port": "782",
"tcp": true
}
],
"783": [
{
"description": "SpamAssassin spamd daemon",
"udp": false,
"status": "Unofficial",
"port": "783",
"tcp": true
}
],
"800": [
{
"description": "mdbe daemon",
"udp": true,
"status": "Official",
"port": "800",
"tcp": false
}
],
"808": [
{
"description": "Microsoft Net.TCP Port Sharing Service",
"udp": false,
"status": "Official",
"port": "808",
"tcp": true
}
],
"829": [
{
"description": "Certificate Management Protocol[38]",
"udp": false,
"status": "Unofficial",
"port": "829",
"tcp": true
}
],
"843": [
{
"description": "Adobe Flash[39]",
"udp": false,
"status": "Unofficial",
"port": "843",
"tcp": true
}
],
"847": [
{
"description": "DHCP Failover protocol",
"udp": false,
"status": "Official",
"port": "847",
"tcp": true
}
],
"848": [
{
"description": "Group Domain Of Interpretation (GDOI) protocol",
"udp": true,
"status": "Official",
"port": "848",
"tcp": true
}
],
"860": [
{
"description": "iSCSI (RFC 3720)",
"udp": false,
"status": "Official",
"port": "860",
"tcp": true
}
],
"861": [
{
"description": "OWAMP control (RFC 4656)",
"udp": true,
"status": "Official",
"port": "861",
"tcp": true
}
],
"862": [
{
"description": "TWAMP control (RFC 5357)",
"udp": true,
"status": "Official",
"port": "862",
"tcp": true
}
],
"873": [
{
"description": "rsync file synchronization protocol",
"udp": false,
"status": "Official",
"port": "873",
"tcp": true
}
],
"888": [
{
"description": "cddbp, CD DataBase (CDDB) protocol (CDDBP)",
"udp": false,
"status": "Unofficial",
"port": "888",
"tcp": true
}
],
"897": [
{
"description": "Brocade SMI-S RPC",
"udp": true,
"status": "Unofficial",
"port": "897",
"tcp": true
}
],
"898": [
{
"description": "Brocade SMI-S RPC SSL",
"udp": true,
"status": "Unofficial",
"port": "898",
"tcp": true
}
],
"901": [
{
"description": "Samba Web Administration Tool (SWAT)",
"udp": false,
"status": "Unofficial",
"port": "901",
"tcp": true
},
{
"description": "VMware Virtual Infrastructure Client (UDP from server being managed to management console)",
"udp": false,
"status": "Unofficial",
"port": "901",
"tcp": true
},
{
"description": "VMware Virtual Infrastructure Client (UDP from server being managed to management console)",
"udp": true,
"status": "Unofficial",
"port": "901",
"tcp": false
}
],
"902": [
{
"description": "ideafarm-door",
"udp": false,
"status": "Official",
"port": "902",
"tcp": true
},
{
"description": "VMware Server Console (TCP from management console to server being Managed)",
"udp": false,
"status": "Unofficial",
"port": "902",
"tcp": true
},
{
"description": "ideafarm-door",
"udp": true,
"status": "Official",
"port": "902",
"tcp": false
},
{
"description": "VMware Server Console (UDP from server being managed to management console)",
"udp": true,
"status": "Unofficial",
"port": "902",
"tcp": false
}
],
"903": [
{
"description": "VMware Remote Console [40]",
"udp": false,
"status": "Unofficial",
"port": "903",
"tcp": true
}
],
"904": [
{
"description": "VMware Server Alternate (if 902 is in use, i.e. SUSE linux)",
"udp": false,
"status": "Unofficial",
"port": "904",
"tcp": true
}
],
"911": [
{
"description": "Network Console on Acid (NCA) local tty redirection over OpenSSH",
"udp": false,
"status": "Unofficial",
"port": "911",
"tcp": true
}
],
"944": [
{
"description": "Network File System (protocol) Service",
"udp": true,
"status": "Unofficial",
"port": "944",
"tcp": false
}
],
"953": [
{
"description": "Domain Name System (DNS) RNDC Service",
"udp": true,
"status": "Unofficial",
"port": "953",
"tcp": true
}
],
"973": [
{
"description": "Network File System (protocol) over IPv6 Service",
"udp": true,
"status": "Unofficial",
"port": "973",
"tcp": false
}
],
"981": [
{
"description": "SofaWare Technologies Remote HTTPS management for firewall devices running embedded Check Point FireWall-1 software",
"udp": false,
"status": "Unofficial",
"port": "981",
"tcp": true
}
],
"987": [
{
"description": "Microsoft Corporation Microsoft Windows SBS SharePoint",
"udp": false,
"status": "Unofficial",
"port": "987",
"tcp": true
}
],
"989": [
{
"description": "FTPS Protocol (data): FTP over TLS/SSL",
"udp": true,
"status": "Official",
"port": "989",
"tcp": true
}
],
"990": [
{
"description": "FTPS Protocol (control): FTP over TLS/SSL",
"udp": true,
"status": "Official",
"port": "990",
"tcp": true
}
],
"991": [
{
"description": "NAS (Netnews Administration System)[41]",
"udp": true,
"status": "Official",
"port": "991",
"tcp": true
}
],
"992": [
{
"description": "TELNET protocol over TLS/SSL",
"udp": true,
"status": "Official",
"port": "992",
"tcp": true
}
],
"993": [
{
"description": "Internet Message Access Protocol over TLS/SSL (IMAPS)",
"udp": false,
"status": "Official",
"port": "993",
"tcp": true
}
],
"995": [
{
"description": "Post Office Protocol 3 over TLS/SSL (POP3S)",
"udp": false,
"status": "Official",
"port": "995",
"tcp": true
}
],
"999": [
{
"description": "ScimoreDB Database System",
"udp": false,
"status": "Unofficial",
"port": "999",
"tcp": true
}
],
"1002": [
{
"description": "Opsware agent (aka cogbot)",
"udp": false,
"status": "Unofficial",
"port": "1002",
"tcp": true
}
],
"1010": [
{
"description": "ThinLinc Web Administration",
"udp": false,
"status": "Unofficial",
"port": "1010",
"tcp": true
}
],
"1023": [
{
"description": "Reserved[1]",
"udp": true,
"status": "Official",
"port": "1023",
"tcp": true
}
],
"1024": [
{
"description": "Reserved[1]",
"udp": true,
"status": "Official",
"port": "1024",
"tcp": true
}
],
"1025": [
{
"description": "NFS or IIS or Teradata",
"udp": false,
"status": "Unofficial",
"port": "1025",
"tcp": true
}
],
"1026": [
{
"description": "Often used by Microsoft DCOM services",
"udp": false,
"status": "Unofficial",
"port": "1026",
"tcp": true
}
],
"1027": [
{
"description": "Native IPv6 behind IPv4-to-IPv4 NAT Customer Premises Equipment (6a44)[42]",
"udp": true,
"status": "Official",
"port": "1027",
"tcp": false
}
],
"1029": [
{
"description": "Often used by Microsoft DCOM services",
"udp": false,
"status": "Unofficial",
"port": "1029",
"tcp": true
}
],
"1058": [
{
"description": "nim, IBM AIX Network Installation Manager (NIM)",
"udp": true,
"status": "Official",
"port": "1058",
"tcp": true
}
],
"1059": [
{
"description": "nimreg, IBM AIX Network Installation Manager (NIM)",
"udp": true,
"status": "Official",
"port": "1059",
"tcp": true
}
],
"1080": [
{
"description": "SOCKS proxy",
"udp": false,
"status": "Official",
"port": "1080",
"tcp": true
}
],
"1085": [
{
"description": "WebObjects",
"udp": true,
"status": "Official",
"port": "1085",
"tcp": true
}
],
"1098": [
{
"description": "rmiactivation, RMI Activation",
"udp": true,
"status": "Official",
"port": "1098",
"tcp": true
}
],
"1099": [
{
"description": "rmiregistry, RMI Registry",
"udp": true,
"status": "Official",
"port": "1099",
"tcp": true
}
],
"1109": [
{
"description": "Reserved[1]",
"udp": true,
"status": "Official",
"port": "1109",
"tcp": true
},
{
"description": "Kerberos Post Office Protocol (KPOP)",
"udp": false,
"status": "Unofficial",
"port": "1109",
"tcp": true
}
],
"1110": [
{
"description": "EasyBits School network discovery protocol (for Intel's CMPC platform)",
"udp": true,
"status": "Unofficial",
"port": "1110",
"tcp": false
}
],
"1119": [
{
"description": "Used by some Blizzard games[43]",
"udp": true,
"status": "Unofficial",
"port": "1119",
"tcp": true
}
],
"1140": [
{
"description": "AutoNOC protocol",
"udp": true,
"status": "Official",
"port": "1140",
"tcp": true
}
],
"1167": [
{
"description": "phone, conference calling",
"udp": true,
"status": "Unofficial",
"port": "1167",
"tcp": false
}
],
"1169": [
{
"description": "Tripwire",
"udp": true,
"status": "Official",
"port": "1169",
"tcp": true
}
],
"1176": [
{
"description": "Perceptive Automation Indigo Home automation server",
"udp": false,
"status": "Official",
"port": "1176",
"tcp": true
}
],
"1182": [
{
"description": "AcceleNet Intelligent Transfer Protocol",
"udp": true,
"status": "Official",
"port": "1182",
"tcp": true
}
],
"1194": [
{
"description": "OpenVPN",
"udp": true,
"status": "Official",
"port": "1194",
"tcp": true
}
],
"1198": [
{
"description": "The cajo project Free dynamic transparent distributed computing in Java",
"udp": true,
"status": "Official",
"port": "1198",
"tcp": true
}
],
"1200": [
{
"description": "scol, protocol used by SCOL 3D virtual worlds server to answer world name resolution client request[44]",
"udp": false,
"status": "Official",
"port": "1200",
"tcp": true
},
{
"description": "scol, protocol used by SCOL 3D virtual worlds server to answer world name resolution client request",
"udp": true,
"status": "Official",
"port": "1200",
"tcp": false
},
{
"description": "Steam Friends Applet",
"udp": true,
"status": "Unofficial",
"port": "1200",
"tcp": false
}
],
"1214": [
{
"description": "Kazaa",
"udp": false,
"status": "Official",
"port": "1214",
"tcp": true
}
],
"1217": [
{
"description": "Uvora Online",
"udp": false,
"status": "Unofficial",
"port": "1217",
"tcp": true
}
],
"1220": [
{
"description": "QuickTime Streaming Server administration",
"udp": false,
"status": "Official",
"port": "1220",
"tcp": true
}
],
"1223": [
{
"description": "TGP, TrulyGlobal Protocol, also known as \"The Gur Protocol\" (named for Gur Kimchi of TrulyGlobal)",
"udp": true,
"status": "Official",
"port": "1223",
"tcp": true
}
],
"1232": [
{
"description": "first-defense, Remote systems monitoring service from Nexum, Inc",
"udp": true,
"status": "Official",
"port": "1232",
"tcp": true
}
],
"1234": [
{
"description": "VLC media player default port for UDP/RTP stream",
"udp": true,
"status": "Unofficial",
"port": "1234",
"tcp": false
}
],
"1236": [
{
"description": "Symantec BindView Control UNIX Default port for TCP management server connections",
"udp": false,
"status": "Unofficial",
"port": "1236",
"tcp": true
}
],
"1241": [
{
"description": "Nessus Security Scanner",
"udp": true,
"status": "Official",
"port": "1241",
"tcp": true
}
],
"1270": [
{
"description": "Microsoft System Center Operations Manager (SCOM) (formerly Microsoft Operations Manager (MOM)) agent",
"udp": true,
"status": "Official",
"port": "1270",
"tcp": true
}
],
"1293": [
{
"description": "IPSec (Internet Protocol Security)",
"udp": true,
"status": "Official",
"port": "1293",
"tcp": true
}
],
"1301": [
{
"description": "Palmer Performance OBDNet",
"udp": false,
"status": "Unofficial",
"port": "1301",
"tcp": true
}
],
"1309": [
{
"description": "Altera Quartus jtagd",
"udp": false,
"status": "Unofficial",
"port": "1309",
"tcp": true
}
],
"1311": [
{
"description": "Dell OpenManage HTTPS",
"udp": false,
"status": "Official",
"port": "1311",
"tcp": true
}
],
"1313": [
{
"description": "Xbiim (Canvii server)[citation needed]",
"udp": false,
"status": "Unofficial",
"port": "1313",
"tcp": true
}
],
"1314": [
{
"description": "Festival Speech Synthesis System",
"udp": false,
"status": "Unofficial",
"port": "1314",
"tcp": true
}
],
"1319": [
{
"description": "AMX ICSP",
"udp": false,
"status": "Official",
"port": "1319",
"tcp": true
},
{
"description": "AMX ICSP",
"udp": true,
"status": "Official",
"port": "1319",
"tcp": false
}
],
"1337": [
{
"description": "Men and Mice DNS",
"udp": true,
"status": "Official",
"port": "1337",
"tcp": false
},
{
"description": "Men and Mice DNS",
"udp": false,
"status": "Official",
"port": "1337",
"tcp": true
},
{
"description": "WASTE Encrypted File Sharing Program",
"udp": false,
"status": "Unofficial",
"port": "1337",
"tcp": true
}
],
"1344": [
{
"description": "Internet Content Adaptation Protocol",
"udp": false,
"status": "Official",
"port": "1344",
"tcp": true
}
],
"1352": [
{
"description": "IBM Lotus Notes/Domino[45] (RPC) protocol",
"udp": false,
"status": "Official",
"port": "1352",
"tcp": true
}
],
"1387": [
{
"description": "cadsi-lm, LMS International (formerly Computer Aided Design Software, Inc. (CADSI)) LM",
"udp": true,
"status": "Official",
"port": "1387",
"tcp": true
}
],
"1414": [
{
"description": "IBM WebSphere MQ (formerly known as MQSeries)",
"udp": false,
"status": "Official",
"port": "1414",
"tcp": true
}
],
"1417": [
{
"description": "Timbuktu Service 1 Port",
"udp": true,
"status": "Official",
"port": "1417",
"tcp": true
}
],
"1418": [
{
"description": "Timbuktu Service 2 Port",
"udp": true,
"status": "Official",
"port": "1418",
"tcp": true
}
],
"1419": [
{
"description": "Timbuktu Service 3 Port",
"udp": true,
"status": "Official",
"port": "1419",
"tcp": true
}
],
"1420": [
{
"description": "Timbuktu Service 4 Port",
"udp": true,
"status": "Official",
"port": "1420",
"tcp": true
}
],
"1431": [
{
"description": "Reverse Gossip Transport Protocol (RGTP), used to access a General-purpose Reverse-Ordered Gossip Gathering System (GROGGS) bulletin board, such as that implemented on the Cambridge University's Phoenix system",
"udp": false,
"status": "Official",
"port": "1431",
"tcp": true
}
],
"1433": [
{
"description": "MSSQL (Microsoft SQL Server database management system) Server",
"udp": false,
"status": "Official",
"port": "1433",
"tcp": true
}
],
"1434": [
{
"description": "MSSQL (Microsoft SQL Server database management system) Monitor",
"udp": true,
"status": "Official",
"port": "1434",
"tcp": true
}
],
"1470": [
{
"description": "Solarwinds Kiwi Log Server",
"udp": false,
"status": "Official",
"port": "1470",
"tcp": true
}
],
"1494": [
{
"description": "Citrix XenApp Independent Computing Architecture (ICA) thin client protocol[46]",
"udp": false,
"status": "Official",
"port": "1494",
"tcp": true
}
],
"1500": [
{
"description": "NetGuard GuardianPro firewall (NT4-based) Remote Management",
"udp": false,
"status": "Unofficial",
"port": "1500",
"tcp": true
}
],
"1501": [
{
"description": "NetGuard GuardianPro firewall (NT4-based) Authentication Client",
"udp": true,
"status": "Unofficial",
"port": "1501",
"tcp": false
}
],
"1503": [
{
"description": "Windows Live Messenger (Whiteboard and Application Sharing)",
"udp": true,
"status": "Unofficial",
"port": "1503",
"tcp": true
}
],
"1512": [
{
"description": "Microsoft Windows Internet Name Service (WINS)",
"udp": true,
"status": "Official",
"port": "1512",
"tcp": true
}
],
"1513": [
{
"description": "Garena Garena Gaming Client",
"udp": true,
"status": "Official",
"port": "1513",
"tcp": true
}
],
"1521": [
{
"description": "nCube License Manager",
"udp": false,
"status": "Official",
"port": "1521",
"tcp": true
},
{
"description": "Oracle database default listener, in future releases official port 2483",
"udp": false,
"status": "Unofficial",
"port": "1521",
"tcp": true
}
],
"1524": [
{
"description": "ingreslock, ingres",
"udp": true,
"status": "Official",
"port": "1524",
"tcp": true
}
],
"1526": [
{
"description": "Oracle database common alternative for listener",
"udp": false,
"status": "Unofficial",
"port": "1526",
"tcp": true
}
],
"1527": [
{
"description": "Apache Derby Network Server default port",
"udp": false,
"status": "Unofficial",
"port": "1527",
"tcp": true
}
],
"1533": [
{
"description": "IBM Sametime IM Virtual Places Chat Microsoft SQL Server",
"udp": false,
"status": "Official",
"port": "1533",
"tcp": true
}
],
"1534": [
{
"description": "Eclipse Target Communication Framework (TCF) agent discovery[47]",
"udp": true,
"status": "Unofficial",
"port": "1534",
"tcp": false
}
],
"1547": [
{
"description": "Laplink",
"udp": true,
"status": "Official",
"port": "1547",
"tcp": true
}
],
"1550": [
{
"description": "3m-image-lm Image Storage license manager 3M Company",
"udp": true,
"status": "Official",
"port": "1550",
"tcp": true
},
{
"description": "Gadu-Gadu (direct client-to-client)",
"udp": false,
"status": "Unofficial",
"port": "1550",
"tcp": false
}
],
"1581": [
{
"description": "MIL STD 2045-47001 VMF",
"udp": true,
"status": "Official",
"port": "1581",
"tcp": false
}
],
"1583": [
{
"description": "Pervasive PSQL",
"udp": false,
"status": "Unofficial",
"port": "1583",
"tcp": true
}
],
"1589": [
{
"description": "Cisco VQP (VLAN Query Protocol) / VMPS",
"udp": true,
"status": "Unofficial",
"port": "1589",
"tcp": false
}
],
"1590": [
{
"description": "GE Smallworld Datastore Server (SWMFS/Smallworld Master Filesystem)[citation needed]",
"udp": false,
"status": "Unofficial",
"port": "1590",
"tcp": true
}
],
"1627": [
{
"description": "iSketch[citation needed]",
"udp": false,
"status": "Unofficial",
"port": "1627",
"tcp": false
}
],
"1645": [
{
"description": "radius auth, RADIUS authentication protocol (default for Cisco and Juniper Networks RADIUS servers, but see port 1812 below)",
"udp": true,
"status": "Unofficial",
"port": "1645",
"tcp": true
}
],
"1646": [
{
"description": "radius acct, RADIUS authentication protocol (default for Cisco and Juniper Networks RADIUS servers, but see port 1813 below)",
"udp": true,
"status": "Unofficial",
"port": "1646",
"tcp": true
}
],
"1666": [
{
"description": "Perforce",
"udp": false,
"status": "Unofficial",
"port": "1666",
"tcp": true
}
],
"1677": [
{
"description": "Novell GroupWise clients in client/server access mode",
"udp": true,
"status": "Official",
"port": "1677",
"tcp": true
}
],
"1688": [
{
"description": "Microsoft Key Management Service for KMS Windows Activation",
"udp": false,
"status": "Unofficial",
"port": "1688",
"tcp": true
}
],
"1700": [
{
"description": "Cisco RADIUS Change of Authorization for TrustSec[citation needed]",
"udp": true,
"status": "Unofficial",
"port": "1700",
"tcp": false
}
],
"1701": [
{
"description": "Layer 2 Forwarding Protocol (L2F) & Layer 2 Tunneling Protocol (L2TP)",
"udp": true,
"status": "Official",
"port": "1701",
"tcp": false
}
],
"1707": [
{
"description": "Windward Studios",
"udp": true,
"status": "Official",
"port": "1707",
"tcp": true
},
{
"description": "Romtoc Interactive Modular Multiplayer Client-Server Online Application Interface & Layer 2 Tunneling Protocol (L2TP)",
"udp": true,
"status": "Unofficial",
"port": "1707",
"tcp": false
}
],
"1716": [
{
"description": "America's Army Massively multiplayer online game (MMO)",
"udp": false,
"status": "Unofficial",
"port": "1716",
"tcp": true
}
],
"1719": [
{
"description": "H.323 Registration and alternate communication",
"udp": true,
"status": "Official",
"port": "1719",
"tcp": false
}
],
"1720": [
{
"description": "H.323 Call signalling",
"udp": false,
"status": "Official",
"port": "1720",
"tcp": true
}
],
"1723": [
{
"description": "Microsoft Point-to-Point Tunneling Protocol (PPTP)",
"udp": true,
"status": "Official",
"port": "1723",
"tcp": true
}
],
"1725": [
{
"description": "Valve Steam Client",
"udp": true,
"status": "Unofficial",
"port": "1725",
"tcp": false
}
],
"1755": [
{
"description": "Microsoft Media Services (MMS, ms-streaming)",
"udp": true,
"status": "Official",
"port": "1755",
"tcp": true
}
],
"1761": [
{
"description": "cft-0",
"udp": true,
"status": "Official",
"port": "1761",
"tcp": false
},
{
"description": "cft-0",
"udp": false,
"status": "Official",
"port": "1761",
"tcp": true
},
{
"description": "Novell Zenworks Remote Control utility",
"udp": false,
"status": "Unofficial",
"port": "1761",
"tcp": true
}
],
"1762": [
{
"description": "cft-1 to cft-7",
"udp": true,
"status": "Official",
"port": "1762-1768",
"tcp": true
}
],
"1776": [
{
"description": "Federal Emergency Management Information Systemhttp://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml",
"udp": true,
"status": "Official",
"port": "1776",
"tcp": true
}
],
"1792": [
{
"description": "Moby[citation needed]",
"udp": true,
"status": "Unofficial",
"port": "1792",
"tcp": true
}
],
"1801": [
{
"description": "Microsoft Message Queuing",
"udp": true,
"status": "Official",
"port": "1801",
"tcp": true
}
],
"1812": [
{
"description": "radius, RADIUS authentication protocol",
"udp": true,
"status": "Official",
"port": "1812",
"tcp": true
}
],
"1813": [
{
"description": "radacct, RADIUS accounting protocol",
"udp": true,
"status": "Official",
"port": "1813",
"tcp": true
}
],
"1863": [
{
"description": "MSNP (Microsoft Notification Protocol), used by the Microsoft Messenger service and a number of Instant Messaging clients",
"udp": false,
"status": "Official",
"port": "1863",
"tcp": true
}
],
"1883": [
{
"description": "MQ Telemetry Transport (MQTT), formerly known as MQIsdp (MQSeries SCADA protocol)",
"udp": true,
"status": "Official",
"port": "1883",
"tcp": true
}
],
"1886": [
{
"description": "Leonardo over IP Pro2col Ltd",
"udp": false,
"status": "Unofficial",
"port": "1886",
"tcp": true
}
],
"1900": [
{
"description": "Microsoft SSDP Enables discovery of UPnP devices",
"udp": true,
"status": "Official",
"port": "1900",
"tcp": false
}
],
"1920": [
{
"description": "IBM Tivoli monitoring console",
"udp": false,
"status": "Unofficial",
"port": "1920",
"tcp": true
}
],
"1935": [
{
"description": "Adobe Systems Macromedia Flash Real Time Messaging Protocol (RTMP) \"plain\" protocol",
"udp": false,
"status": "Official",
"port": "1935",
"tcp": true
}
],
"1947": [
{
"description": "SentinelSRM (hasplm), Aladdin HASP License Manager",
"udp": true,
"status": "Official",
"port": "1947",
"tcp": true
}
],
"1967": [
{
"description": "Cisco IOS IP Service Level Agreements (IP SLAs) Control Protocol[citation needed]",
"udp": true,
"status": "Unofficial",
"port": "1967",
"tcp": false
}
],
"1970": [
{
"description": "Netop Business Solutions Netop Remote Control",
"udp": true,
"status": "Official",
"port": "1970",
"tcp": true
}
],
"1971": [
{
"description": "Netop Business Solutions Netop School",
"udp": true,
"status": "Official",
"port": "1971",
"tcp": true
}
],
"1972": [
{
"description": "InterSystems Cach",
"udp": true,
"status": "Official",
"port": "1972",
"tcp": true
}
],
"1975": [
{
"description": "Cisco TCO (Documentation)",
"udp": true,
"status": "Official",
"port": "1975-1977",
"tcp": false
}
],
"1984": [
{
"description": "Big Brother and related Xymon (formerly Hobbit) System and Network Monitor",
"udp": false,
"status": "Official",
"port": "1984",
"tcp": true
}
],
"1985": [
{
"description": "Cisco HSRP",
"udp": true,
"status": "Official",
"port": "1985",
"tcp": false
}
],
"1994": [
{
"description": "Cisco STUN-SDLC (Serial Tunneling Synchronous Data Link Control) protocol",
"udp": true,
"status": "Official",
"port": "1994",
"tcp": true
}
],
"1997": [
{
"description": "Chizmo Networks Transfer Tool[citation needed]",
"udp": false,
"status": "Unofficial",
"port": "1997",
"tcp": true
}
],
"1998": [
{
"description": "Cisco X.25 over TCP (XOT) service",
"udp": true,
"status": "Official",
"port": "1998",
"tcp": true
}
],
"2000": [
{
"description": "Cisco SCCP (Skinny)",
"udp": true,
"status": "Official",
"port": "2000",
"tcp": true
}
],
"2001": [
{
"description": "CAPTAN Test Stand System",
"udp": true,
"status": "Unofficial",
"port": "2001",
"tcp": false
}
],
"2002": [
{
"description": "Secure Access Control Server (ACS) for Windows[citation needed]",
"udp": false,
"status": "Unofficial",
"port": "2002",
"tcp": true
}
],
"2010": [
{
"description": "Artemis: Spaceship Bridge Simulator default port",
"udp": false,
"status": "Unofficial",
"port": "2010",
"tcp": true
}
],
"2012": [
{
"description": "Remoticus Server",
"udp": false,
"status": "Unofficial",
"port": "2012-2013",
"tcp": true
}
],
"2030": [
{
"description": "Oracle services for Microsoft Transaction Server",
"udp": false,
"status": "Unofficial",
"port": "2030",
"tcp": false
}
],
"2031": [
{
"description": "mobrien-chat(http://chat.mobrien.com:2031)",
"udp": true,
"status": "Official",
"port": "2031",
"tcp": true
}
],
"2041": [
{
"description": "Mail.Ru Agent communication protocol[citation needed]",
"udp": false,
"status": "Unofficial",
"port": "2041",
"tcp": true
}
],
"2049": [
{
"description": "Network File System",
"udp": true,
"status": "Official",
"port": "2049",
"tcp": true
},
{
"description": "shilp",
"udp": true,
"status": "Official",
"port": "2049",
"tcp": false
}
],
"2053": [
{
"description": "knetd Kerberos de-multiplexor",
"udp": false,
"status": "Unofficial",
"port": "2053",
"tcp": true
}
],
"2056": [
{
"description": "Civilization 4 multiplayer",
"udp": true,
"status": "Unofficial",
"port": "2056",
"tcp": false
}
],
"2074": [
{
"description": "Vertel VMF SA (i.e. App.. SpeakFreely)",
"udp": true,
"status": "Official",
"port": "2074",
"tcp": true
}
],
"2080": [
{
"description": "Autodesk NLM (FLEXlm)",
"udp": true,
"status": "Official",
"port": "2080",
"tcp": true
}
],
"2082": [
{
"description": "Infowave Mobility Server",
"udp": false,
"status": "Official",
"port": "2082",
"tcp": true
},
{
"description": "CPanel default",
"udp": false,
"status": "Unofficial",
"port": "2082",
"tcp": true
}
],
"2083": [
{
"description": "Secure Radius Service (radsec)",
"udp": false,
"status": "Official",
"port": "2083",
"tcp": true
},
{
"description": "CPanel default SSL",
"udp": false,
"status": "Unofficial",
"port": "2083",
"tcp": true
}
],
"2086": [
{
"description": "GNUnet",
"udp": false,
"status": "Official",
"port": "2086",
"tcp": true
},
{
"description": "WebHost Manager default",
"udp": false,
"status": "Unofficial",
"port": "2086",
"tcp": true
}
],
"2087": [
{
"description": "WebHost Manager default SSL",
"udp": false,
"status": "Unofficial",
"port": "2087",
"tcp": true
}
],
"2095": [
{
"description": "CPanel default Web mail",
"udp": false,
"status": "Unofficial",
"port": "2095",
"tcp": true
}
],
"2096": [
{
"description": "CPanel default SSL Web mail",
"udp": false,
"status": "Unofficial",
"port": "2096",
"tcp": true
}
],
"2102": [
{
"description": "zephyr-srv Project Athena Zephyr Notification Service server",
"udp": true,
"status": "Official",
"port": "2102",
"tcp": true
}
],
"2103": [
{
"description": "zephyr-clt Project Athena Zephyr Notification Service serv-hm connection",
"udp": true,
"status": "Official",
"port": "2103",
"tcp": true
}
],
"2104": [
{
"description": "zephyr-hm Project Athena Zephyr Notification Service hostmanager",
"udp": true,
"status": "Official",
"port": "2104",
"tcp": true
}
],
"2105": [
{
"description": "IBM MiniPay",
"udp": true,
"status": "Official",
"port": "2105",
"tcp": true
},
{
"description": "eklogin Kerberos encrypted remote login (rlogin)",
"udp": true,
"status": "Unofficial",
"port": "2105",
"tcp": true
},
{
"description": "zephyr-hm-srv Project Athena Zephyr Notification Service hm-serv connection (should use port 2102)",
"udp": true,
"status": "Unofficial",
"port": "2105",
"tcp": true
}
],
"2115": [
{
"description": "MIS Department",
"udp": true,
"status": "Unofficial",
"port": "2115",
"tcp": true
}
],
"2121": [
{
"description": "FTP proxy[citation needed]",
"udp": false,
"status": "Unofficial",
"port": "2121",
"tcp": true
}
],
"2142": [
{
"description": "TDMoIP (RFC 5087)",
"udp": true,
"status": "Official",
"port": "2142",
"tcp": false
}
],
"2144": [
{
"description": "Iron Mountain LiveVault Agent[citation needed]",
"udp": false,
"status": "Unofficial",
"port": "2144",
"tcp": true
}
],
"2145": [
{
"description": "Iron Mountain LiveVault Agent[citation needed]",
"udp": false,
"status": "Unofficial",
"port": "2145",
"tcp": true
}
],
"2156": [
{
"description": "Talari Reliable Protocol",
"udp": true,
"status": "Official",
"port": "2156",
"tcp": false
}
],
"2160": [
{
"description": "APC Agent",
"udp": false,
"status": "Official",
"port": "2160",
"tcp": true
}
],
"2161": [
{
"description": "APC Agent",
"udp": false,
"status": "Official",
"port": "2161",
"tcp": true
}
],
"2181": [
{
"description": "EForward-document transport system",
"udp": true,
"status": "Official",
"port": "2181",
"tcp": true
}
],
"2190": [
gitextract_wwx1bfz5/
├── .continueignore
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── flutter_release.yml
│ ├── flutter_test_dev.yml
│ └── flutter_test_main.yml
├── .gitignore
├── .metadata
├── AGENTS.md
├── ARCHITECTURE.md
├── LICENSE
├── QWEN.md
├── README.md
├── analysis_options.yaml
├── android/
│ ├── .gitignore
│ ├── Gemfile
│ ├── app/
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin/
│ │ │ │ └── org/
│ │ │ │ └── fsociety/
│ │ │ │ └── vernet/
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ │ ├── drawable/
│ │ │ │ ├── ic_launcher_foreground.xml
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-night/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-night-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── raw/
│ │ │ │ └── keep.xml
│ │ │ ├── values/
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ └── styles.xml
│ │ │ ├── values-night/
│ │ │ │ └── styles.xml
│ │ │ ├── values-night-v31/
│ │ │ │ └── styles.xml
│ │ │ └── values-v31/
│ │ │ └── styles.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── fastlane/
│ │ ├── Fastfile
│ │ ├── README.md
│ │ └── metadata/
│ │ └── android/
│ │ └── en-US/
│ │ ├── changelogs/
│ │ │ ├── 1.txt
│ │ │ ├── 10.txt
│ │ │ ├── 13.txt
│ │ │ ├── 14.txt
│ │ │ ├── 15.txt
│ │ │ ├── 16.txt
│ │ │ ├── 17.txt
│ │ │ ├── 18.txt
│ │ │ ├── 19.txt
│ │ │ ├── 2.txt
│ │ │ ├── 20.txt
│ │ │ ├── 21.txt
│ │ │ ├── 22.txt
│ │ │ ├── 23.txt
│ │ │ ├── 24.txt
│ │ │ ├── 25.txt
│ │ │ ├── 26.txt
│ │ │ ├── 27.txt
│ │ │ ├── 28.txt
│ │ │ ├── 29.txt
│ │ │ ├── 3.txt
│ │ │ ├── 30.txt
│ │ │ ├── 31.txt
│ │ │ ├── 32.txt
│ │ │ ├── 33.txt
│ │ │ ├── 34.txt
│ │ │ ├── 35.txt
│ │ │ ├── 36.txt
│ │ │ ├── 37.txt
│ │ │ ├── 38.txt
│ │ │ ├── 39.txt
│ │ │ ├── 4.txt
│ │ │ ├── 40.txt
│ │ │ ├── 5.txt
│ │ │ ├── 6.txt
│ │ │ ├── 7.txt
│ │ │ ├── 8.txt
│ │ │ └── 9.txt
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ ├── title.txt
│ │ └── video.txt
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ ├── settings.gradle
│ └── settings_aar.gradle
├── assets/
│ ├── ipwhois.json
│ ├── ports_lists.json
│ └── secrets.json
├── devtools_options.yaml
├── flutter_native_splash.yaml
├── generate_coverage.sh
├── installers/
│ └── dmg_creator/
│ ├── AppIcon.icns
│ └── config.json
├── integration_test/
│ ├── app_test.dart
│ ├── dns/
│ │ ├── lookup/
│ │ │ └── lookup_test.dart
│ │ └── reverse_lookup/
│ │ └── reverse_lookup.dart
│ ├── network_troubleshooting_test/
│ │ └── ping_test/
│ │ └── ping_test.dart
│ ├── settings/
│ │ ├── dark_theme_test.dart
│ │ ├── in_app_internet_test.dart
│ │ ├── settings_test.dart
│ │ ├── subnet_tests.dart
│ │ └── test_utils.dart
│ └── wifi_test/
│ ├── host_scan_and_port_scan_test.dart
│ ├── run_scan_on_startup_test.dart
│ └── wifi_test_runner.dart
├── ios/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── LaunchBackground.imageset/
│ │ │ │ └── Contents.json
│ │ │ └── LaunchImage.imageset/
│ │ │ ├── Contents.json
│ │ │ └── README.md
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── Runner-Bridging-Header.h
│ │ └── Runner.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ └── Runner.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ ├── IDEWorkspaceChecks.plist
│ └── WorkspaceSettings.xcsettings
├── lib/
│ ├── Vernet.code-workspace
│ ├── api/
│ │ └── update_checker.dart
│ ├── database/
│ │ ├── database_service.dart
│ │ └── drift/
│ │ ├── drfit_database_service.dart
│ │ └── drift_database.dart
│ ├── helper/
│ │ ├── app_settings.dart
│ │ ├── consent_loader.dart
│ │ ├── dark_theme_preference.dart
│ │ ├── port_desc_loader.dart
│ │ └── utils_helper.dart
│ ├── injection.dart
│ ├── main.dart
│ ├── models/
│ │ ├── device_in_the_network.dart
│ │ ├── drift/
│ │ │ ├── device.dart
│ │ │ └── scan.dart
│ │ ├── port.dart
│ │ └── wifi_info.dart
│ ├── pages/
│ │ ├── base_page.dart
│ │ ├── dns/
│ │ │ ├── dns_page.dart
│ │ │ └── reverse_dns_page.dart
│ │ ├── home_page.dart
│ │ ├── host_scan_page/
│ │ │ ├── host_scan_bloc/
│ │ │ │ ├── host_scan_bloc.dart
│ │ │ │ ├── host_scan_event.dart
│ │ │ │ └── host_scan_state.dart
│ │ │ ├── host_scan_page.dart
│ │ │ └── widgets/
│ │ │ └── host_scan_widget.dart
│ │ ├── isp_page/
│ │ │ ├── bloc/
│ │ │ │ ├── isp_page_bloc.dart
│ │ │ │ ├── isp_page_event.dart
│ │ │ │ └── isp_page_state.dart
│ │ │ ├── isp_page.dart
│ │ │ └── isp_page_widget.dart
│ │ ├── location_consent_page.dart
│ │ ├── network_troubleshoot/
│ │ │ └── port_scan_page.dart
│ │ ├── ping_page/
│ │ │ ├── bloc/
│ │ │ │ ├── ping_bloc.dart
│ │ │ │ ├── ping_event.dart
│ │ │ │ └── ping_state.dart
│ │ │ └── ping_page.dart
│ │ ├── port_scan_page/
│ │ │ └── port_scan_bloc/
│ │ │ ├── port_scan_bloc.dart
│ │ │ ├── port_scan_event.dart
│ │ │ └── port_scan_state.dart
│ │ └── settings_page.dart
│ ├── providers/
│ │ ├── dark_theme_provider.dart
│ │ └── internet_provider.dart
│ ├── repository/
│ │ ├── drift/
│ │ │ ├── device_repository.dart
│ │ │ └── scan_repository.dart
│ │ ├── notification_service.dart
│ │ └── repository.dart
│ ├── services/
│ │ ├── impls/
│ │ │ └── device_scanner_service.dart
│ │ └── scanner_service.dart
│ ├── ui/
│ │ ├── adaptive/
│ │ │ ├── adaptive_circular_progress_bar.dart
│ │ │ ├── adaptive_dialog.dart
│ │ │ ├── adaptive_dialog_action.dart
│ │ │ ├── adaptive_list.dart
│ │ │ └── adaptive_radio.dart
│ │ ├── base_settings_dialog.dart
│ │ ├── custom_tile.dart
│ │ ├── external_link_dialog.dart
│ │ ├── popular_chip.dart
│ │ ├── settings_dialog/
│ │ │ ├── custom_subnet_dialog.dart
│ │ │ ├── first_subnet_dialog.dart
│ │ │ ├── internet_dialog.dart
│ │ │ ├── last_subnet_dialog.dart
│ │ │ ├── ping_count_dialog.dart
│ │ │ ├── socket_timeout_dialog.dart
│ │ │ └── theme_dialog.dart
│ │ ├── speed_test_dialog.dart
│ │ └── speedometer.dart
│ ├── utils/
│ │ ├── custom_axis_renderer.dart
│ │ └── device_util.dart
│ └── values/
│ ├── globals.dart
│ ├── keys.dart
│ ├── strings.dart
│ └── tooltip_messages.dart
├── linux/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ ├── main.cc
│ ├── my_application.cc
│ └── my_application.h
├── macos/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── Flutter-Debug.xcconfig
│ │ └── Flutter-Release.xcconfig
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ └── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ └── MainMenu.xib
│ │ ├── Configs/
│ │ │ ├── AppInfo.xcconfig
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── Warnings.xcconfig
│ │ ├── DebugProfile.entitlements
│ │ ├── Info.plist
│ │ ├── MainFlutterWindow.swift
│ │ └── Release.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ └── Runner.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
├── pubspec.yaml
├── repo-map.yaml
├── test/
│ ├── api/
│ │ ├── navigate_to_store_test.dart
│ │ └── update_checker_test.dart
│ ├── helper/
│ │ ├── app_settings_test.dart
│ │ ├── consent_loader_test.dart
│ │ ├── dark_theme_preference_test.dart
│ │ ├── port_desc_loader_test.dart
│ │ └── utils_helper_test.dart
│ ├── helpers/
│ │ └── test_helpers.dart
│ ├── main_test.dart
│ ├── models/
│ │ ├── device_in_the_network_test.dart
│ │ ├── port_test.dart
│ │ └── wifi_info_test.dart
│ ├── pages/
│ │ ├── dns/
│ │ │ ├── dns_page_test.dart
│ │ │ └── reverse_dns_page_test.dart
│ │ ├── home_page_test.dart
│ │ ├── host_scan_page/
│ │ │ └── host_scan_bloc_test.dart
│ │ ├── isp_page/
│ │ │ ├── isp_page_bloc_test.dart
│ │ │ └── isp_page_widget_test.dart
│ │ ├── location_consent_page_test.dart
│ │ ├── ping_page/
│ │ │ └── ping_bloc_test.dart
│ │ ├── port_scan_page/
│ │ │ └── port_scan_bloc_test.dart
│ │ └── settings_page_test.dart
│ ├── providers/
│ │ ├── dark_theme_provider_test.dart
│ │ └── internet_provider_test.dart
│ ├── repository/
│ │ ├── device_repository_test.dart
│ │ ├── drift_repository_test.dart
│ │ └── scan_repository_test.dart
│ ├── services/
│ │ └── device_scanner_service_test.dart
│ ├── ui/
│ │ ├── adaptive/
│ │ │ ├── adaptive_dialog_test.dart
│ │ │ ├── adaptive_list_test.dart
│ │ │ └── adaptive_radio_test.dart
│ │ ├── custom_tile_test.dart
│ │ ├── external_link_dialog_test.dart
│ │ ├── popular_chip_test.dart
│ │ ├── settings_dialog/
│ │ │ └── settings_dialogs_test.dart
│ │ ├── speed_test_dialog_test.dart
│ │ └── speedometer_test.dart
│ ├── utils/
│ │ ├── custom_axis_renderer_test.dart
│ │ └── device_util_test.dart
│ └── values/
│ ├── keys_test.dart
│ └── strings_test.dart
├── web/
│ ├── index.html
│ └── manifest.json
└── windows/
├── .gitignore
├── CMakeLists.txt
├── flutter/
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
└── runner/
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
SYMBOL INDEX (448 symbols across 133 files)
FILE: integration_test/app_test.dart
function main (line 19) | void main()
FILE: integration_test/dns/lookup/lookup_test.dart
function main (line 9) | void main()
FILE: integration_test/dns/reverse_lookup/reverse_lookup.dart
function main (line 9) | void main()
FILE: integration_test/network_troubleshooting_test/ping_test/ping_test.dart
function main (line 11) | void main()
FILE: integration_test/settings/dark_theme_test.dart
function main (line 10) | void main()
FILE: integration_test/settings/in_app_internet_test.dart
function main (line 8) | void main()
FILE: integration_test/settings/settings_test.dart
function main (line 5) | void main()
FILE: integration_test/settings/subnet_tests.dart
function main (line 10) | void main()
FILE: integration_test/settings/test_utils.dart
class TestUtils (line 5) | class TestUtils {
method tapSettingsButton (line 6) | Future<void> tapSettingsButton(
method tapHomeButton (line 13) | Future<void> tapHomeButton(
method tapByText (line 20) | Future<void> tapByText(
method enterTextByKey (line 30) | Future<void> enterTextByKey(
method tapByWidgetKey (line 41) | Future<void> tapByWidgetKey(
method scrollUntilVisibleByWidgetKey (line 51) | Future<void> scrollUntilVisibleByWidgetKey(
FILE: integration_test/wifi_test/host_scan_and_port_scan_test.dart
function main (line 9) | void main()
FILE: integration_test/wifi_test/run_scan_on_startup_test.dart
function main (line 9) | void main()
FILE: integration_test/wifi_test/wifi_test_runner.dart
function main (line 4) | void main()
FILE: lib/api/update_checker.dart
function checkUpdates (line 14) | Future<bool> checkUpdates(
function _isValidVersion (line 60) | bool _isValidVersion(String version)
function checkUpdatesForTest (line 66) | Future<bool> checkUpdatesForTest(
function checkForUpdates (line 74) | Future<void> checkForUpdates(
function navigateToStore (line 118) | Future<void> navigateToStore(BuildContext context)
FILE: lib/database/database_service.dart
class DatabaseService (line 1) | abstract class DatabaseService<T> {
method open (line 2) | Future<T?> open()
FILE: lib/database/drift/drfit_database_service.dart
class DriftDatabaseService (line 5) | @Injectable(as: DatabaseService<AppDatabase>)
method open (line 9) | Future<AppDatabase?> open()
FILE: lib/database/drift/drift_database.dart
class AppDatabase (line 9) | @DriftDatabase(tables: [Device, Scan])
method _openConnection (line 19) | QueryExecutor _openConnection()
FILE: lib/helper/app_settings.dart
class AppSettings (line 4) | class AppSettings {
method setFirstSubnet (line 37) | Future<bool> setFirstSubnet(int firstSubnet)
method setLastSubnet (line 43) | Future<bool> setLastSubnet(int lastSubnet)
method setSocketTimeout (line 49) | Future<bool> setSocketTimeout(int socketTimeout)
method setPingCount (line 55) | Future<bool> setPingCount(int pingCount)
method setInAppInternet (line 61) | Future<bool> setInAppInternet(bool inAppInternet)
method setRunScanOnStartup (line 67) | Future<bool> setRunScanOnStartup(bool runScanOnStartup)
method setCustomSubnet (line 73) | Future<bool> setCustomSubnet(String customSubnet)
method load (line 79) | Future<void> load()
method clearAll (line 117) | Future<bool> clearAll()
FILE: lib/helper/consent_loader.dart
class ConsentLoader (line 3) | class ConsentLoader {
method isConsentPageShown (line 6) | Future<bool> isConsentPageShown()
method setConsentPageShown (line 10) | Future<bool> setConsentPageShown(bool status)
FILE: lib/helper/dark_theme_preference.dart
class DarkThemePreference (line 4) | class DarkThemePreference {
method setDarkTheme (line 7) | Future<void> setDarkTheme(ThemePreference value)
method getTheme (line 12) | Future<ThemePreference> getTheme()
FILE: lib/helper/port_desc_loader.dart
function _parsePortDesc (line 9) | Future<Map<String, Port>> _parsePortDesc(String json)
class PortDescLoader (line 21) | class PortDescLoader {
method load (line 26) | Future<Map<String, Port>> load()
FILE: lib/helper/utils_helper.dart
function launchURL (line 6) | Future<void> launchURL(String url)
function launchURLWithWarning (line 14) | Future<void> launchURLWithWarning(BuildContext context, String url)
function storeCurrentScanId (line 23) | Future<void> storeCurrentScanId(int scanId)
function getCurrentScanId (line 27) | Future<int?> getCurrentScanId()
FILE: lib/injection.dart
function configureDependencies (line 11) | void configureDependencies(String env)
class Env (line 16) | abstract class Env {
FILE: lib/main.dart
function main (line 19) | Future<void> main()
class MyApp (line 37) | class MyApp extends StatefulWidget {
method createState (line 46) | _MyAppState createState()
class _MyAppState (line 49) | class _MyAppState extends State<MyApp> {
method initState (line 53) | void initState()
method getCurrentAppTheme (line 59) | Future<void> getCurrentAppTheme()
method build (line 65) | Widget build(BuildContext context)
class TabBarPage (line 109) | class TabBarPage extends StatefulWidget {
method createState (line 112) | _HomePageState createState()
class _HomePageState (line 115) | class _HomePageState extends State<TabBarPage> {
method onTabTapped (line 117) | void onTabTapped(int index)
method initState (line 124) | void initState()
method build (line 130) | Widget build(BuildContext context)
FILE: lib/models/device_in_the_network.dart
class DeviceInTheNetwork (line 9) | class DeviceInTheNetwork {
method getDeviceMake (line 117) | Future<String?> getDeviceMake({
method getHostIcon (line 134) | IconData getHostIcon({
FILE: lib/models/drift/device.dart
class Device (line 3) | class Device extends Table {
FILE: lib/models/drift/scan.dart
class Scan (line 3) | class Scan extends Table {
FILE: lib/models/port.dart
class Port (line 1) | class Port {
FILE: lib/models/wifi_info.dart
class WifiInfo (line 1) | class WifiInfo {
FILE: lib/pages/base_page.dart
class BasePage (line 6) | abstract class BasePage<T extends StatefulWidget> extends State<T> {
method title (line 10) | String title()
method fieldLabel (line 11) | String fieldLabel()
method _getDomainChip (line 13) | Widget _getDomainChip(String label)
method validateIP (line 22) | String? validateIP(String? value)
method buildPopularChips (line 29) | Widget buildPopularChips()
method dispose (line 47) | void dispose()
method buildResults (line 52) | Widget buildResults(BuildContext context)
method buttonLabel (line 54) | String buttonLabel()
method onPressed (line 55) | Future<void> onPressed()
method build (line 58) | Widget build(BuildContext context)
FILE: lib/pages/dns/dns_page.dart
class DNSPage (line 10) | class DNSPage extends StatefulWidget {
method createState (line 14) | _DNSPageState createState()
class _DNSPageState (line 17) | class _DNSPageState extends BasePage<DNSPage> {
method buildResults (line 21) | Widget buildResults(BuildContext context)
method buttonLabel (line 60) | String buttonLabel()
method fieldLabel (line 65) | String fieldLabel()
method title (line 70) | String title()
method onPressed (line 75) | Future<void> onPressed()
FILE: lib/pages/dns/reverse_dns_page.dart
class ReverseDNSPage (line 8) | class ReverseDNSPage extends StatefulWidget {
method createState (line 12) | _ReverseDNSPageState createState()
class _ReverseDNSPageState (line 15) | class _ReverseDNSPageState extends BasePage<ReverseDNSPage> {
method buildPopularChips (line 18) | Widget buildPopularChips()
method buildResults (line 23) | Widget buildResults(BuildContext context)
method buttonLabel (line 52) | String buttonLabel()
method fieldLabel (line 57) | String fieldLabel()
method _showMessage (line 61) | void _showMessage(String message)
method onPressed (line 68) | Future<void> onPressed()
method title (line 94) | String title()
FILE: lib/pages/home_page.dart
class HomePage (line 28) | class HomePage extends StatefulWidget {
method createState (line 32) | _WifiDetailState createState()
class _WifiDetailState (line 35) | class _WifiDetailState extends State<HomePage> {
method _getWifiInfo (line 41) | Future<WifiInfo?> _getWifiInfo()
method _configureSelectNotificationSubject (line 95) | void _configureSelectNotificationSubject()
method dispose (line 106) | void dispose()
method initState (line 112) | void initState()
method _getDeviceCountWidget (line 117) | Widget _getDeviceCountWidget()
method build (line 141) | Widget build(BuildContext context)
FILE: lib/pages/host_scan_page/host_scan_bloc/host_scan_bloc.dart
class HostScanBloc (line 22) | @injectable
method _initialized (line 45) | Future<void> _initialized(
method _startNewScanBuiltInIsolate (line 100) | Future<void> _startNewScanBuiltInIsolate(
method _loadScanAndShowResults (line 129) | Future<void> _loadScanAndShowResults(
FILE: lib/pages/host_scan_page/host_scan_bloc/host_scan_event.dart
class HostScanEvent (line 3) | @freezed
FILE: lib/pages/host_scan_page/host_scan_bloc/host_scan_state.dart
class HostScanState (line 3) | @freezed
FILE: lib/pages/host_scan_page/host_scan_page.dart
class HostScanPage (line 8) | class HostScanPage extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: lib/pages/host_scan_page/widgets/host_scan_widget.dart
class HostScanWidget (line 14) | class HostScanWidget extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
method _devicesWidget (line 60) | Widget _devicesWidget(
FILE: lib/pages/isp_page/bloc/isp_page_bloc.dart
class IspPageBloc (line 11) | @injectable
method _started (line 21) | Future<void> _started(_Started event, Emitter<IspPageState> emit)
method _completed (line 35) | Future<void> _completed(_Completed event, Emitter<IspPageState> emit)
method _failed (line 37) | Future<void> _failed(_Failed event, Emitter<IspPageState> emit)
FILE: lib/pages/isp_page/bloc/isp_page_event.dart
class IspPageEvent (line 3) | @freezed
FILE: lib/pages/isp_page/bloc/isp_page_state.dart
class IspPageState (line 3) | @freezed
FILE: lib/pages/isp_page/isp_page.dart
class IspPage (line 10) | class IspPage extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
FILE: lib/pages/isp_page/isp_page_widget.dart
class IspPageWidget (line 11) | class IspPageWidget extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
class IspPageContent (line 109) | class IspPageContent extends StatelessWidget {
method build (line 116) | Widget build(BuildContext context)
FILE: lib/pages/location_consent_page.dart
class LocationConsentPage (line 8) | class LocationConsentPage extends StatefulWidget {
method createState (line 12) | _LocationConsentPageState createState()
class _LocationConsentPageState (line 15) | class _LocationConsentPageState extends State<LocationConsentPage> {
method build (line 17) | Widget build(BuildContext context)
method _grantLocationPermission (line 66) | Future<void> _grantLocationPermission(BuildContext context)
method _navigate (line 78) | void _navigate(BuildContext context)
FILE: lib/pages/network_troubleshoot/port_scan_page.dart
class PortScanPage (line 14) | class PortScanPage extends StatefulWidget {
method createState (line 21) | _PortScanPageState createState()
type ScanType (line 24) | enum ScanType { single, top, range }
class _PortScanPageState (line 26) | class _PortScanPageState extends State<PortScanPage>
method _showSnackBar (line 46) | void _showSnackBar(String message)
method _handleEvent (line 52) | void _handleEvent(ActiveHost? host)
method _handleOnDone (line 61) | void _handleOnDone()
method _startScanning (line 75) | void _startScanning()
method initState (line 112) | void initState()
method dispose (line 124) | void dispose()
method _getCustomRangeChip (line 134) | Widget _getCustomRangeChip(Key key, String label, String start, String...
method _getSinglePortChip (line 145) | Widget _getSinglePortChip(String label, String port)
method _getDomainChip (line 154) | Widget _getDomainChip(Key key, String label)
method _getFields (line 164) | Widget _getFields()
method validatePorts (line 204) | String? validatePorts(String? value)
method validateIP (line 217) | String? validateIP(String? value)
method build (line 225) | Widget build(BuildContext context)
FILE: lib/pages/ping_page/bloc/ping_bloc.dart
class PingBloc (line 8) | class PingBloc extends Bloc<PingEvent, PingState> {
method _startPing (line 14) | void _startPing(StartPing event, Emitter<PingState> emit)
method _stopPing (line 16) | void _stopPing(StopPing event, Emitter<PingState> emit)
FILE: lib/pages/ping_page/bloc/ping_event.dart
class PingEvent (line 3) | @freezed
FILE: lib/pages/ping_page/bloc/ping_state.dart
class PingState (line 3) | @freezed
FILE: lib/pages/ping_page/ping_page.dart
class PingPage (line 11) | class PingPage extends StatefulWidget {
method createState (line 15) | _PingPageState createState()
class _PingPageState (line 18) | class _PingPageState extends BasePage<PingPage> {
method fieldLabel (line 25) | String fieldLabel()
method title (line 30) | String title()
method buttonLabel (line 35) | String buttonLabel()
method onPressed (line 40) | Future<void> onPressed()
method _startPinging (line 44) | void _startPinging()
method _stop (line 71) | void _stop()
method buildResults (line 83) | Widget buildResults(BuildContext context)
method _getPingSummary (line 123) | Widget _getPingSummary()
method _getTime (line 143) | String _getTime(Duration? time)
method dispose (line 152) | void dispose()
FILE: lib/pages/port_scan_page/port_scan_bloc/port_scan_bloc.dart
class PortScanBloc (line 10) | @injectable
method _initialized (line 18) | Future<void> _initialized(Initialized event, Emitter<PortScanState> emit)
method _startNewScan (line 23) | Future<void> _startNewScan(StartNewScan event, Emitter<PortScanState> ...
method _stopScan (line 27) | Future<void> _stopScan(StopScan event, Emitter<PortScanState> emit)
FILE: lib/pages/port_scan_page/port_scan_bloc/port_scan_event.dart
class PortScanEvent (line 3) | @freezed
FILE: lib/pages/port_scan_page/port_scan_bloc/port_scan_state.dart
class PortScanState (line 3) | @freezed
FILE: lib/pages/settings_page.dart
class SettingsPage (line 19) | class SettingsPage extends StatefulWidget {
method createState (line 23) | _SettingsPageState createState()
class _SettingsPageState (line 26) | class _SettingsPageState extends State<SettingsPage> {
method build (line 30) | Widget build(BuildContext context)
FILE: lib/providers/dark_theme_provider.dart
class DarkThemeProvider (line 5) | class DarkThemeProvider with ChangeNotifier {
type ThemePreference (line 26) | enum ThemePreference { system, dark, light }
FILE: lib/providers/internet_provider.dart
class InternetProvider (line 1) | class InternetProvider {
class Location (line 19) | class Location {
FILE: lib/repository/drift/device_repository.dart
class DeviceRepository (line 7) | @Injectable()
method get (line 12) | Future<DeviceData?> get(int id)
method getList (line 19) | Future<List<DeviceData>> getList()
method put (line 25) | Future<DeviceData> put(DeviceData t)
method getDevice (line 33) | Future<DeviceData?> getDevice(int scanId, String address)
method watch (line 41) | Future<Stream<List<DeviceData>>> watch(int scanId)
method countByScanId (line 51) | Future<int> countByScanId(int scanId)
FILE: lib/repository/drift/scan_repository.dart
class ScanRepository (line 8) | @Injectable()
method get (line 13) | Future<ScanData?> get(int id)
method getList (line 20) | Future<List<ScanData>> getList()
method put (line 26) | Future<ScanData> put(ScanData t)
method update (line 33) | Future<ScanData> update(ScanData t)
method getOnGoingScan (line 40) | Future<ScanData?> getOnGoingScan()
method watch (line 58) | Future<Stream<List<ScanData>>> watch(int id)
FILE: lib/repository/notification_service.dart
class ReceivedNotification (line 10) | class ReceivedNotification {
class NotificationService (line 24) | class NotificationService {
method initNotification (line 55) | Future<void> initNotification()
method configureLocalTimeZone (line 125) | Future<void> configureLocalTimeZone()
method showNotificationWithActions (line 138) | Future<void> showNotificationWithActions()
method grantPermissions (line 191) | Future<void> grantPermissions()
method isAndroidPermissionGranted (line 197) | Future<bool> isAndroidPermissionGranted()
method requestPermissions (line 208) | Future<bool?> requestPermissions()
FILE: lib/repository/repository.dart
class Repository (line 1) | abstract class Repository<T> {
method getList (line 2) | Future<List<T>> getList()
method put (line 3) | Future<T> put(T t)
FILE: lib/services/impls/device_scanner_service.dart
class DeviceScannerService (line 13) | @Injectable()
method startNewScan (line 19) | Stream<DeviceData> startNewScan(
method getOnGoingScan (line 106) | Future<Stream<List<DeviceData>>> getOnGoingScan()
method getCurrentDevicesCount (line 114) | Future<int> getCurrentDevicesCount()
FILE: lib/services/scanner_service.dart
class ScannerService (line 3) | abstract class ScannerService {
method startNewScan (line 4) | Stream<DeviceData> startNewScan(
method getOnGoingScan (line 10) | Future<Stream<List<DeviceData>>> getOnGoingScan()
FILE: lib/ui/adaptive/adaptive_circular_progress_bar.dart
class AdaptiveCircularProgressIndicator (line 4) | class AdaptiveCircularProgressIndicator extends StatelessWidget {
method build (line 8) | Widget build(BuildContext context)
FILE: lib/ui/adaptive/adaptive_dialog.dart
class AdaptiveDialog (line 6) | class AdaptiveDialog extends StatelessWidget {
method build (line 21) | Widget build(BuildContext context)
FILE: lib/ui/adaptive/adaptive_dialog_action.dart
class AdaptiveDialogAction (line 4) | class AdaptiveDialogAction extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: lib/ui/adaptive/adaptive_list.dart
class AdaptiveListTile (line 8) | class AdaptiveListTile extends StatelessWidget {
method build (line 35) | Widget build(BuildContext context)
FILE: lib/ui/adaptive/adaptive_radio.dart
class AdaptiveRadioButton (line 5) | class AdaptiveRadioButton<T> extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: lib/ui/base_settings_dialog.dart
class BaseSettingsDialog (line 9) | abstract class BaseSettingsDialog<T extends StatefulWidget> extends Stat...
method getDialogTitle (line 12) | String getDialogTitle()
method getHintText (line 13) | String getHintText()
method getKeyBoardType (line 14) | TextInputType getKeyBoardType()
method onSubmit (line 16) | void onSubmit(String value)
method getInitialValue (line 18) | String getInitialValue()
method validate (line 20) | String? validate(String? value)
method initState (line 22) | void initState()
method dispose (line 28) | void dispose()
method build (line 34) | Widget build(BuildContext context)
method actions (line 71) | List<Widget> actions(BuildContext context)
FILE: lib/ui/custom_tile.dart
class CustomTile (line 3) | class CustomTile extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: lib/ui/external_link_dialog.dart
class ExternalLinkWarningDialog (line 6) | class ExternalLinkWarningDialog<T extends Dialog> extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
method actions (line 22) | List<Widget> actions(BuildContext context)
FILE: lib/ui/popular_chip.dart
class PopularChip (line 3) | class PopularChip extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: lib/ui/settings_dialog/custom_subnet_dialog.dart
class CustomSubnetDialog (line 6) | class CustomSubnetDialog extends StatefulWidget {
method createState (line 10) | State<CustomSubnetDialog> createState()
class _CustomSubnetDialogState (line 13) | class _CustomSubnetDialogState extends BaseSettingsDialog<CustomSubnetDi...
method getDialogTitle (line 15) | String getDialogTitle()
method getHintText (line 20) | String getHintText()
method getInitialValue (line 25) | String getInitialValue()
method getKeyBoardType (line 30) | TextInputType getKeyBoardType()
method onSubmit (line 35) | void onSubmit(String value)
method validate (line 42) | String? validate(String? value)
FILE: lib/ui/settings_dialog/first_subnet_dialog.dart
class FirstSubnetDialog (line 6) | class FirstSubnetDialog extends StatefulWidget {
method createState (line 10) | _FirstSubnetDialogState createState()
class _FirstSubnetDialogState (line 13) | class _FirstSubnetDialogState extends BaseSettingsDialog<FirstSubnetDial...
method getDialogTitle (line 15) | String getDialogTitle()
method getHintText (line 20) | String getHintText()
method getKeyBoardType (line 25) | TextInputType getKeyBoardType()
method onSubmit (line 30) | void onSubmit(String value)
method validate (line 38) | String? validate(String? value)
method getInitialValue (line 55) | String getInitialValue()
FILE: lib/ui/settings_dialog/last_subnet_dialog.dart
class LastSubnetDialog (line 6) | class LastSubnetDialog extends StatefulWidget {
method createState (line 10) | _LastSubnetDialogState createState()
class _LastSubnetDialogState (line 13) | class _LastSubnetDialogState extends BaseSettingsDialog<LastSubnetDialog> {
method getDialogTitle (line 15) | String getDialogTitle()
method getHintText (line 20) | String getHintText()
method getKeyBoardType (line 25) | TextInputType getKeyBoardType()
method onSubmit (line 30) | void onSubmit(String value)
method validate (line 38) | String? validate(String? value)
method getInitialValue (line 55) | String getInitialValue()
FILE: lib/ui/settings_dialog/ping_count_dialog.dart
class PingCountDialog (line 6) | class PingCountDialog extends StatefulWidget {
method createState (line 10) | _PingCountDialogState createState()
class _PingCountDialogState (line 13) | class _PingCountDialogState extends BaseSettingsDialog<PingCountDialog> {
method getDialogTitle (line 15) | String getDialogTitle()
method getHintText (line 20) | String getHintText()
method getKeyBoardType (line 25) | TextInputType getKeyBoardType()
method onSubmit (line 30) | void onSubmit(String value)
method validate (line 38) | String? validate(String? value)
method getInitialValue (line 52) | String getInitialValue()
FILE: lib/ui/settings_dialog/socket_timeout_dialog.dart
class SocketTimeoutDialog (line 6) | class SocketTimeoutDialog extends StatefulWidget {
method createState (line 10) | _SocketTimeoutDialogState createState()
class _SocketTimeoutDialogState (line 13) | class _SocketTimeoutDialogState
method getDialogTitle (line 16) | String getDialogTitle()
method getHintText (line 21) | String getHintText()
method getKeyBoardType (line 26) | TextInputType getKeyBoardType()
method onSubmit (line 31) | void onSubmit(String value)
method validate (line 39) | String? validate(String? value)
method getInitialValue (line 53) | String getInitialValue()
FILE: lib/ui/settings_dialog/theme_dialog.dart
class ThemeDialog (line 10) | class ThemeDialog extends StatefulWidget {
method createState (line 14) | State<ThemeDialog> createState()
class _ThemeDialogState (line 17) | class _ThemeDialogState extends State<ThemeDialog> {
method initState (line 19) | void initState()
method build (line 24) | Widget build(BuildContext context)
FILE: lib/ui/speed_test_dialog.dart
class SpeedTestDialog (line 13) | class SpeedTestDialog extends StatefulWidget {
method createState (line 25) | State<SpeedTestDialog> createState()
class _SpeedTestDialogState (line 29) | class _SpeedTestDialogState extends State<SpeedTestDialog> {
method getBestServers (line 56) | Future<List<Server>?> getBestServers()
method initState (line 63) | void initState()
method build (line 74) | Widget build(BuildContext context)
method testUploadSpeed (line 212) | void testUploadSpeed(List<Server> bestServerList)
method downloadSpeed (line 249) | Stream<List<double>> downloadSpeed(
method uploadSpeed (line 264) | Stream<List<double>> uploadSpeed(
FILE: lib/ui/speedometer.dart
class SpeedometerWidget (line 5) | class SpeedometerWidget extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
FILE: lib/utils/custom_axis_renderer.dart
class CustomAxisRenderer (line 3) | class CustomAxisRenderer extends RadialAxisRenderer {
method generateVisibleLabels (line 9) | List<CircularAxisLabel> generateVisibleLabels()
method valueToFactor (line 24) | double valueToFactor(double value)
method _calculateLabelValue (line 48) | double _calculateLabelValue(num value)
FILE: lib/utils/device_util.dart
class DeviceUtil (line 6) | class DeviceUtil {
method getDeviceMake (line 7) | String? getDeviceMake(DeviceData deviceData)
method getIconData (line 18) | IconData getIconData(DeviceData deviceData)
FILE: lib/values/keys.dart
type WidgetKey (line 3) | enum WidgetKey implements Comparable<WidgetKey> {
FILE: lib/values/strings.dart
class StringValue (line 1) | class StringValue {
FILE: lib/values/tooltip_messages.dart
class TooltipMessages (line 1) | class TooltipMessages {
FILE: linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 13) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: linux/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: linux/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function my_application_activate (line 18) | static void my_application_activate(GApplication* application) {
function gboolean (line 67) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_dispose (line 86) | static void my_application_dispose(GObject *object) {
function my_application_class_init (line 92) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 98) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 100) | MyApplication* my_application_new() {
FILE: test/api/navigate_to_store_test.dart
function main (line 9) | void main()
FILE: test/api/update_checker_test.dart
function main (line 12) | void main()
FILE: test/helper/app_settings_test.dart
function main (line 5) | void main()
FILE: test/helper/consent_loader_test.dart
function main (line 5) | void main()
FILE: test/helper/dark_theme_preference_test.dart
function main (line 6) | void main()
FILE: test/helper/port_desc_loader_test.dart
function main (line 5) | void main()
FILE: test/helper/utils_helper_test.dart
class MockUrlLauncher (line 12) | class MockUrlLauncher extends Mock
class FakeLaunchOptions (line 16) | class FakeLaunchOptions extends Fake implements LaunchOptions {}
function main (line 18) | void main()
FILE: test/helpers/test_helpers.dart
function setupSharedPreferences (line 12) | Future<void> setupSharedPreferences({
function setupPackageInfoMock (line 20) | void setupPackageInfoMock()
function setupPackageInfoMockCustom (line 39) | void setupPackageInfoMockCustom({
function wrapWithDarkThemeProvider (line 63) | Widget wrapWithDarkThemeProvider({
class TestDataBuilder (line 80) | class TestDataBuilder {
method createSharedPreferences (line 81) | Map<String, dynamic> createSharedPreferences({
FILE: test/main_test.dart
function main (line 13) | void main()
FILE: test/models/device_in_the_network_test.dart
function main (line 12) | void main()
class _FakeArpRepository (line 415) | class _FakeArpRepository implements Repository<ARPData> {
method build (line 417) | Future<void> build()
method clear (line 420) | Future<bool> clear()
method close (line 423) | Future<void> close()
method entries (line 426) | Future<List<String?>?> entries()
method entryFor (line 429) | Future<ARPData?> entryFor(String address)
class _FakeVendorRepository (line 432) | class _FakeVendorRepository implements Repository<nt_vendor.Vendor> {
method build (line 434) | Future<void> build()
method clear (line 437) | Future<bool> clear()
method close (line 440) | Future<void> close()
method entries (line 443) | Future<List<String?>?> entries()
method entryFor (line 446) | Future<nt_vendor.Vendor?> entryFor(String address)
FILE: test/models/port_test.dart
function main (line 4) | void main()
FILE: test/models/wifi_info_test.dart
function main (line 4) | void main()
FILE: test/pages/dns/dns_page_test.dart
function main (line 5) | void main()
FILE: test/pages/dns/reverse_dns_page_test.dart
function main (line 6) | void main()
FILE: test/pages/home_page_test.dart
class MockNetworkInfo (line 11) | class MockNetworkInfo extends Mock implements NetworkInfo {}
function createHomePageTestWidget (line 13) | Widget createHomePageTestWidget(Widget child)
function main (line 22) | void main()
FILE: test/pages/host_scan_page/host_scan_bloc_test.dart
class MockNetworkInfo (line 13) | class MockNetworkInfo extends Mock implements NetworkInfo {}
class FakeScannerService (line 18) | class FakeScannerService implements DeviceScannerService {
method startNewScan (line 25) | Stream<DeviceData> startNewScan(String subnet, String ip, String gatew...
method getOnGoingScan (line 30) | Future<Stream<List<DeviceData>>> getOnGoingScan()
method getCurrentDevicesCount (line 35) | Future<int> getCurrentDevicesCount()
class FakeScanRepository (line 42) | class FakeScanRepository implements ScanRepository {
method watch (line 47) | Future<Stream<List<ScanData>>> watch(int id)
method getList (line 53) | Future<List<ScanData>> getList()
method get (line 55) | Future<ScanData?> get(int id)
method put (line 57) | Future<ScanData> put(ScanData t)
method update (line 59) | Future<ScanData> update(ScanData t)
method getOnGoingScan (line 61) | Future<ScanData?> getOnGoingScan()
function main (line 64) | void main()
FILE: test/pages/isp_page/isp_page_bloc_test.dart
class MockSpeedTestDart (line 8) | class MockSpeedTestDart extends SpeedTestDart {
method getBestServers (line 20) | Future<List<Server>> getBestServers({
function createMockSettings (line 33) | Settings createMockSettings()
function createMockServer (line 78) | Server createMockServer({
function main (line 99) | void main()
FILE: test/pages/isp_page/isp_page_widget_test.dart
function createTestSettings (line 17) | Settings createTestSettings()
function createTestServer (line 40) | Server createTestServer({
function _wrapWithProviders (line 63) | Widget _wrapWithProviders(Widget child)
function main (line 72) | void main()
FILE: test/pages/location_consent_page_test.dart
function main (line 10) | void main()
function createWidgetUnderTest (line 43) | Widget createWidgetUnderTest()
FILE: test/pages/ping_page/ping_bloc_test.dart
function main (line 4) | void main()
FILE: test/pages/port_scan_page/port_scan_bloc_test.dart
function main (line 4) | void main()
FILE: test/pages/settings_page_test.dart
function main (line 5) | void main()
FILE: test/providers/dark_theme_provider_test.dart
function main (line 7) | void main()
FILE: test/providers/internet_provider_test.dart
function main (line 4) | void main()
FILE: test/repository/device_repository_test.dart
class _InMemoryDatabaseService (line 9) | class _InMemoryDatabaseService implements DatabaseService<AppDatabase> {
method open (line 13) | Future<AppDatabase?> open()
function main (line 16) | void main()
FILE: test/repository/drift_repository_test.dart
class _InMemoryDatabaseService (line 9) | class _InMemoryDatabaseService implements DatabaseService<AppDatabase> {
method open (line 13) | Future<AppDatabase?> open()
function main (line 16) | void main()
FILE: test/repository/scan_repository_test.dart
class _InMemoryDatabaseService (line 8) | class _InMemoryDatabaseService implements DatabaseService<AppDatabase> {
method open (line 12) | Future<AppDatabase?> open()
function main (line 15) | void main()
FILE: test/services/device_scanner_service_test.dart
class MockScanRepository (line 13) | class MockScanRepository extends Mock implements ScanRepository {}
class MockDeviceRepository (line 15) | class MockDeviceRepository extends Mock implements DeviceRepository {}
function main (line 17) | void main()
FILE: test/ui/adaptive/adaptive_dialog_test.dart
function main (line 8) | void main()
function createWidgetUnderTest (line 9) | Widget createWidgetUnderTest({
FILE: test/ui/adaptive/adaptive_list_test.dart
function main (line 8) | void main()
FILE: test/ui/adaptive/adaptive_radio_test.dart
function main (line 8) | void main()
FILE: test/ui/custom_tile_test.dart
function main (line 5) | void main()
FILE: test/ui/external_link_dialog_test.dart
class MockUrlLauncherPlatform (line 11) | class MockUrlLauncherPlatform extends Mock
class FakeLaunchOptions (line 15) | class FakeLaunchOptions extends Fake implements LaunchOptions {}
function main (line 17) | void main()
FILE: test/ui/popular_chip_test.dart
function main (line 5) | void main()
FILE: test/ui/settings_dialog/settings_dialogs_test.dart
function main (line 10) | void main()
FILE: test/ui/speed_test_dialog_test.dart
class _FakeSpeedTestDart (line 10) | class _FakeSpeedTestDart extends SpeedTestDart {
method getBestServers (line 22) | Future<List<Server>> getBestServers({
method testDownloadSpeed (line 31) | Future<double> testDownloadSpeed({
method testUploadSpeed (line 41) | Future<double> testUploadSpeed({
function _server (line 50) | Server _server({
function main (line 71) | void main()
FILE: test/ui/speedometer_test.dart
function main (line 5) | void main()
FILE: test/utils/custom_axis_renderer_test.dart
function main (line 4) | void main()
FILE: test/utils/device_util_test.dart
function _device (line 8) | DeviceData _device({
function main (line 27) | void main()
FILE: test/values/keys_test.dart
function main (line 5) | void main()
FILE: test/values/strings_test.dart
function main (line 4) | void main()
FILE: windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 15) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: windows/runner/flutter_window.cpp
function LRESULT (line 40) | LRESULT
FILE: windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: windows/runner/win32_window.cpp
function Scale (line 18) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 24) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 41) | class WindowClassRegistrar {
method WindowClassRegistrar (line 46) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 62) | WindowClassRegistrar() = default;
function wchar_t (line 71) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 133) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 152) | LRESULT
function Win32Window (line 208) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 224) | RECT Win32Window::GetClientArea() {
function HWND (line 230) | HWND Win32Window::GetHandle() {
FILE: windows/runner/win32_window.h
type Size (line 21) | struct Size {
Condensed preview — 293 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (948K chars).
[
{
"path": ".continueignore",
"chars": 793,
"preview": "# 1. Standard Bloat (Crucial for 8GB RAM)\n.git/\n.dart_tool/\n.pub-cache/\n.pub/\nbuild/\nnode_modules/\n.fvm/\nbin/\nobj/\ndist/"
},
{
"path": ".github/FUNDING.yml",
"chars": 692,
"preview": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [u"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 835,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 595,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
},
{
"path": ".github/dependabot.yml",
"chars": 502,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/workflows/flutter_release.yml",
"chars": 9698,
"preview": "name: Flutter release\n\non:\n release:\n types: [published]\n workflow_dispatch:\n \npermissions:\n id-token: write\n "
},
{
"path": ".github/workflows/flutter_test_dev.yml",
"chars": 2801,
"preview": "name: Flutter Test - Dev Branch\n\non:\n pull_request:\n branches: [\"dev\"]\n workflow_dispatch:\n workflow_call:\n\nconcur"
},
{
"path": ".github/workflows/flutter_test_main.yml",
"chars": 5167,
"preview": "name: Flutter Test - Main Branch\n\non:\n pull_request:\n branches: [\"main\"]\n workflow_dispatch:\n workflow_call:\n\nconc"
},
{
"path": ".gitignore",
"chars": 2694,
"preview": "# The .vscode folder contains launch configuration and tasks you configure in\n# VS Code which you may wish to be include"
},
{
"path": ".metadata",
"chars": 1226,
"preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
},
{
"path": "AGENTS.md",
"chars": 5343,
"preview": "# AI Agent Guidelines for Vernet\n\nThis document provides guidance for AI coding agents working on the\nVernet repository."
},
{
"path": "ARCHITECTURE.md",
"chars": 5989,
"preview": "# Vernet Architecture Guide\n\n## Project Overview\n\nVernet is a cross-platform network analysis application built with\nFlu"
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "QWEN.md",
"chars": 9243,
"preview": "# Vernet - QWEN Context Guide\n\n## Project Overview\n\n**Vernet** is a cross-platform network analyzer and monitoring tool "
},
{
"path": "README.md",
"chars": 4767,
"preview": "# Vernet\n\nVernet - Network Analyzer and Monitoring Tool\n\n[ "
},
{
"path": "android/app/src/main/res/drawable/ic_launcher_foreground.xml",
"chars": 1199,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"108dp\"\n android:height=\"108dp\"\n"
},
{
"path": "android/app/src/main/res/drawable/launch_background.xml",
"chars": 321,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/app/src/main/res/drawable-night/launch_background.xml",
"chars": 321,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/app/src/main/res/drawable-night-v21/launch_background.xml",
"chars": 321,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/app/src/main/res/drawable-v21/launch_background.xml",
"chars": 321,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 267,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
"chars": 267,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android/app/src/main/res/raw/keep.xml",
"chars": 127,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\"\n tools:keep=\"@drawab"
},
{
"path": "android/app/src/main/res/values/ic_launcher_background.xml",
"chars": 120,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"ic_launcher_background\">#FFFFFF</color>\n</resources>"
},
{
"path": "android/app/src/main/res/values/styles.xml",
"chars": 1263,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/values-night/styles.xml",
"chars": 1262,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/values-night-v31/styles.xml",
"chars": 1223,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/values-v31/styles.xml",
"chars": 1223,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/profile/AndroidManifest.xml",
"chars": 2983,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <!-- Flutter needs it to communicate with the "
},
{
"path": "android/build.gradle",
"chars": 1021,
"preview": "allprojects {\n repositories {\n google()\n mavenCentral()\n }\n // Fix for Gradle Error. \n // Name"
},
{
"path": "android/fastlane/Fastfile",
"chars": 1711,
"preview": "# This file contains the fastlane.tools configuration\n# You can find the documentation at https://docs.fastlane.tools\n#\n"
},
{
"path": "android/fastlane/README.md",
"chars": 1174,
"preview": "fastlane documentation\n----\n\n# Installation\n\nMake sure you have the latest version of the Xcode command line tools insta"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/1.txt",
"chars": 54,
"preview": "Only host scanner, port scanner and ping is supported."
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/10.txt",
"chars": 39,
"preview": "DNS Lookup added and minor improvements"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/13.txt",
"chars": 55,
"preview": "Play store release to beta using GHA \nAdded mdns search"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/14.txt",
"chars": 33,
"preview": "Release build artifacts using GHA"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/15.txt",
"chars": 58,
"preview": "Bug fixes and improvements\nnetwork_tools updated to v3.2.1"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/16.txt",
"chars": 70,
"preview": "Upgraded network_tools to v4.0.1\nMac address support added for Desktop"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/17.txt",
"chars": 97,
"preview": "Fixed full port scan freeze issue.\nTheme and framework update.\nMinor bug fixes and improvements.\n"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/18.txt",
"chars": 40,
"preview": "Follow system theme added and bug fixes\n"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/19.txt",
"chars": 31,
"preview": "Many improvements and bug fixes"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/2.txt",
"chars": 36,
"preview": "fastlane added and other minor fixes"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/20.txt",
"chars": 73,
"preview": "This version is release via CD. Now you will receive updates more faster."
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/21.txt",
"chars": 62,
"preview": "Minor bug fixes and improvments.\nPublishing dmg for macos now."
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/22.txt",
"chars": 73,
"preview": "Run checks for windows and publish beta on android for prerelease publish"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/23.txt",
"chars": 87,
"preview": "Splash screen fix for all android devices.\nRescan button added alongside devices count."
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/24.txt",
"chars": 116,
"preview": "Splash screen fix for all android devices.\nRescan button added alongside devices count.\nIcon updated for play store."
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/25.txt",
"chars": 1048,
"preview": "## What's Changed\n* Added rate our app in readme by @git-elliot in https://github.com/osociety/vernet/pull/169\n* Update "
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/26.txt",
"chars": 90,
"preview": "Added option in settings to run scan at app startup/launch\nUpgraded to latest Android SDK."
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/27.txt",
"chars": 40,
"preview": "Bug fix for scan for devices not working"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/28.txt",
"chars": 40,
"preview": "Bug fix for scan for devices not working"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/29.txt",
"chars": 31,
"preview": "Fixed slowness of devices scan."
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/3.txt",
"chars": 47,
"preview": "Hard code versioning removed from settings page"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/30.txt",
"chars": 51,
"preview": "Fixed dll files missing when running app on Windows"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/31.txt",
"chars": 61,
"preview": "Compatibility issues fixed for windows\nScan slowness improved"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/32.txt",
"chars": 61,
"preview": "Compatibility issues fixed for windows\nScan slowness improved"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/33.txt",
"chars": 26,
"preview": "Bug fixes and improvements"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/34.txt",
"chars": 36,
"preview": "Added speed test using speedtest.net"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/35.txt",
"chars": 32,
"preview": "Added speedtest and ISP details."
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/36.txt",
"chars": 32,
"preview": "Added speed test and ISP details"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/37.txt",
"chars": 50,
"preview": "Fixed scan not working when downloading via Fdroid"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/38.txt",
"chars": 32,
"preview": "Performance fix for host scanner"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/39.txt",
"chars": 32,
"preview": "Upgraded network tools to latest"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/4.txt",
"chars": 48,
"preview": "Changelogs are now maintained in fastlane folder"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/40.txt",
"chars": 24,
"preview": "Added inbuilt speed test"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/5.txt",
"chars": 54,
"preview": "Unnecessary ACCESS_COARSE_LOCATION permission removed."
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/6.txt",
"chars": 40,
"preview": "ISP details added and minor improvements"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/7.txt",
"chars": 26,
"preview": "Bug Fixes and Improvements"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/8.txt",
"chars": 56,
"preview": "GeoLocation API updated and speed test via browser added"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/9.txt",
"chars": 248,
"preview": "1. Check for updates added.\n2. Now ping works even when not connected to internet.\n3. Now you can select ports to scan i"
},
{
"path": "android/fastlane/metadata/android/en-US/full_description.txt",
"chars": 270,
"preview": "Vernet - Network Analyzer and monitoring tool.\n\nFeatures\n1. Shows wifi details\n2. Scans for devices(or hosts) on network"
},
{
"path": "android/fastlane/metadata/android/en-US/short_description.txt",
"chars": 41,
"preview": "Host and Port scanner. Ping IP or domain."
},
{
"path": "android/fastlane/metadata/android/en-US/title.txt",
"chars": 25,
"preview": "Vernet - Network Analyzer"
},
{
"path": "android/fastlane/metadata/android/en-US/video.txt",
"chars": 0,
"preview": ""
},
{
"path": "android/gradle/wrapper/gradle-wrapper.properties",
"chars": 320,
"preview": "#Fri Jun 23 08:50:38 CEST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER"
},
{
"path": "android/gradle.properties",
"chars": 1231,
"preview": "## For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/buil"
},
{
"path": "android/settings.gradle",
"chars": 828,
"preview": "pluginManagement {\n def flutterSdkPath = {\n def properties = new Properties()\n file(\"local.properties\")"
},
{
"path": "android/settings_aar.gradle",
"chars": 15,
"preview": "include ':app'\n"
},
{
"path": "assets/ipwhois.json",
"chars": 900,
"preview": "{\n \"ip\": \"8.8.4.4\",\n \"success\": true,\n \"type\": \"IPv4\",\n \"continent\": \"North America\",\n \"continent_code\": "
},
{
"path": "assets/ports_lists.json",
"chars": 284146,
"preview": "{\n \"0\": [\n {\n \"description\": \"Reserved\",\n \"udp\": true,\n \"status\": \"Official\","
},
{
"path": "assets/secrets.json",
"chars": 87,
"preview": "{\n \"ipify_key\": \"i6MaSUdkoCDIbpjOqOJrRq2GUjHbyXremtR+9LsPwF4pAkwU3iyknxYorbOzW9fM\"\n}"
},
{
"path": "devtools_options.yaml",
"chars": 12,
"preview": "extensions:\n"
},
{
"path": "flutter_native_splash.yaml",
"chars": 7405,
"preview": "flutter_native_splash:\n # This package generates native code to customize Flutter's default white native splash screen\n"
},
{
"path": "generate_coverage.sh",
"chars": 2427,
"preview": "#!/usr/bin/env bash\nset -e\n\n# Clean previous coverage\nrm -rf coverage\n\necho \"Running unit/widget tests with coverage...\""
},
{
"path": "installers/dmg_creator/config.json",
"chars": 257,
"preview": "{\n \"title\": \"Vernet\",\n \"icon\": \"AppIcon.icns\",\n \"contents\": [\n { \"x\": 448, \"y\": 344, \"type\": \"link\", \"path"
},
{
"path": "integration_test/app_test.dart",
"chars": 1519,
"preview": "import 'dart:io';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter_test/flutter_test.dart';\nimport 'pack"
},
{
"path": "integration_test/dns/lookup/lookup_test.dart",
"chars": 1595,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_test/flutter_test.dart';\nimport 'package:vernet/main.dar"
},
{
"path": "integration_test/dns/reverse_lookup/reverse_lookup.dart",
"chars": 3852,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_test/flutter_test.dart';\nimport 'package:vernet/main.dar"
},
{
"path": "integration_test/network_troubleshooting_test/ping_test/ping_test.dart",
"chars": 2129,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_test/flutter_test.dart';\nimport 'package:integration_tes"
},
{
"path": "integration_test/settings/dark_theme_test.dart",
"chars": 2002,
"preview": "import 'package:flutter_test/flutter_test.dart';\nimport 'package:vernet/helper/dark_theme_preference.dart';\nimport 'pack"
},
{
"path": "integration_test/settings/in_app_internet_test.dart",
"chars": 940,
"preview": "import 'package:flutter_test/flutter_test.dart';\nimport 'package:vernet/main.dart';\nimport 'package:vernet/values/global"
},
{
"path": "integration_test/settings/settings_test.dart",
"chars": 249,
"preview": "import 'dark_theme_test.dart' as dark_theme_test;\nimport 'in_app_internet_test.dart' as in_app_internet_test;\nimport 'su"
},
{
"path": "integration_test/settings/subnet_tests.dart",
"chars": 4269,
"preview": "import 'package:flutter_test/flutter_test.dart';\nimport 'package:integration_test/integration_test.dart';\nimport 'packag"
},
{
"path": "integration_test/settings/test_utils.dart",
"chars": 1557,
"preview": "import 'package:flutter/widgets.dart';\nimport 'package:flutter_test/flutter_test.dart';\nimport 'package:vernet/values/ke"
},
{
"path": "integration_test/wifi_test/host_scan_and_port_scan_test.dart",
"chars": 4654,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_test/flutter_test.dart';\nimport 'package:vernet/main.dar"
},
{
"path": "integration_test/wifi_test/run_scan_on_startup_test.dart",
"chars": 2717,
"preview": "import 'package:flutter/services.dart';\nimport 'package:flutter_test/flutter_test.dart';\nimport 'package:shared_preferen"
},
{
"path": "integration_test/wifi_test/wifi_test_runner.dart",
"chars": 219,
"preview": "import 'host_scan_and_port_scan_test.dart' as host_scan_and_port_scan;\nimport 'run_scan_on_startup_test.dart' as run_sca"
},
{
"path": "ios/.gitignore",
"chars": 561,
"preview": "*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/DerivedDat"
},
{
"path": "ios/Flutter/AppFrameworkInfo.plist",
"chars": 774,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Flutter/Debug.xcconfig",
"chars": 107,
"preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
},
{
"path": "ios/Flutter/Release.xcconfig",
"chars": 187,
"preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n#include? \""
},
{
"path": "ios/Podfile",
"chars": 1353,
"preview": "# Uncomment this line to define a global platform for your project\nplatform :ios, '14.0'\n\n# CocoaPods analytics sends ne"
},
{
"path": "ios/Runner/AppDelegate.swift",
"chars": 525,
"preview": "import UIKit\nimport Flutter\n\n@main\n@objc class AppDelegate: FlutterAppDelegate {\n override func application(\n _ appl"
},
{
"path": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 2519,
"preview": "{\n \"images\" : [\n {\n \"size\" : \"20x20\",\n \"idiom\" : \"iphone\",\n \"filename\" : \"Icon-App-20x20@2x.png\",\n "
},
{
"path": "ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json",
"chars": 361,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"background.png\",\n \"idiom\" : \"universal\"\n },\n {\n \"appearances\""
},
{
"path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
"chars": 1069,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"LaunchImage.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
"chars": 336,
"preview": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in"
},
{
"path": "ios/Runner/Base.lproj/LaunchScreen.storyboard",
"chars": 3487,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "ios/Runner/Base.lproj/Main.storyboard",
"chars": 1605,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "ios/Runner/Info.plist",
"chars": 2213,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner/Runner-Bridging-Header.h",
"chars": 38,
"preview": "#import \"GeneratedPluginRegistrant.h\"\n"
},
{
"path": "ios/Runner/Runner.entitlements",
"chars": 261,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcodeproj/project.pbxproj",
"chars": 24430,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
"chars": 135,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"self:\">\n </FileRef"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
"chars": 3371,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1510\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "ios/Runner.xcworkspace/contents.xcworkspacedata",
"chars": 224,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"group:Runner.xcodepr"
},
{
"path": "ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "lib/Vernet.code-workspace",
"chars": 103,
"preview": "{\n\t\"folders\": [\n\t\t{\n\t\t\t\"path\": \"..\"\n\t\t},\n\t\t{\n\t\t\t\"path\": \"../../network_tools\"\n\t\t}\n\t],\n\t\"settings\": {}\n}"
},
{
"path": "lib/api/update_checker.dart",
"chars": 3956,
"preview": "import 'dart:convert';\nimport 'dart:io';\n\nimport 'package:external_app_launcher/external_app_launcher.dart';\nimport 'pac"
},
{
"path": "lib/database/database_service.dart",
"chars": 59,
"preview": "abstract class DatabaseService<T> {\n Future<T?> open();\n}\n"
},
{
"path": "lib/database/drift/drfit_database_service.dart",
"chars": 407,
"preview": "import 'package:injectable/injectable.dart';\nimport 'package:vernet/database/database_service.dart';\nimport 'package:ver"
},
{
"path": "lib/database/drift/drift_database.dart",
"chars": 1158,
"preview": "import 'package:drift/drift.dart';\nimport 'package:drift_flutter/drift_flutter.dart';\nimport 'package:path_provider/path"
},
{
"path": "lib/helper/app_settings.dart",
"chars": 4190,
"preview": "import 'package:flutter/material.dart';\nimport 'package:shared_preferences/shared_preferences.dart';\n\nclass AppSettings "
},
{
"path": "lib/helper/consent_loader.dart",
"chars": 435,
"preview": "import 'package:shared_preferences/shared_preferences.dart';\n\nclass ConsentLoader {\n static const String consentKey = '"
},
{
"path": "lib/helper/dark_theme_preference.dart",
"chars": 672,
"preview": "import 'package:shared_preferences/shared_preferences.dart';\nimport 'package:vernet/providers/dark_theme_provider.dart';"
},
{
"path": "lib/helper/port_desc_loader.dart",
"chars": 960,
"preview": "import 'dart:convert';\n\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter/services.dart' show rootBundle"
},
{
"path": "lib/helper/utils_helper.dart",
"chars": 837,
"preview": "import 'package:flutter/material.dart';\nimport 'package:shared_preferences/shared_preferences.dart';\nimport 'package:url"
},
{
"path": "lib/injection.dart",
"chars": 563,
"preview": "import 'package:get_it/get_it.dart';\nimport 'package:injectable/injectable.dart';\nimport 'package:vernet/injection.confi"
},
{
"path": "lib/main.dart",
"chars": 4576,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_native_splash/flutter_native_splash.dart';\nimport 'packa"
},
{
"path": "lib/models/device_in_the_network.dart",
"chars": 3904,
"preview": "import 'dart:io';\n\nimport 'package:dart_ping/dart_ping.dart';\nimport 'package:flutter/material.dart';\nimport 'package:ne"
},
{
"path": "lib/models/drift/device.dart",
"chars": 533,
"preview": "import 'package:drift/drift.dart';\n\nclass Device extends Table {\n IntColumn get id => integer().autoIncrement()();\n In"
},
{
"path": "lib/models/drift/scan.dart",
"chars": 343,
"preview": "import 'package:drift/drift.dart';\n\nclass Scan extends Table {\n IntColumn get id => integer().autoIncrement()();\n Text"
},
{
"path": "lib/models/port.dart",
"chars": 490,
"preview": "class Port {\n Port.fromJson(dynamic map)\n : _desc = map['description'] as String,\n _tcp = map['tcp'] as boo"
},
{
"path": "lib/models/wifi_info.dart",
"chars": 957,
"preview": "class WifiInfo {\n WifiInfo(\n this._ip,\n this._bssid,\n this._name,\n this.unknown,\n this.gatewayIp,\n th"
},
{
"path": "lib/pages/base_page.dart",
"chars": 2895,
"preview": "import 'package:flutter/material.dart';\nimport 'package:vernet/ui/adaptive/adaptive_list.dart';\nimport 'package:vernet/u"
},
{
"path": "lib/pages/dns/dns_page.dart",
"chars": 2387,
"preview": "import 'dart:io';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:verne"
},
{
"path": "lib/pages/dns/reverse_dns_page.dart",
"chars": 2330,
"preview": "import 'dart:io';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:verne"
},
{
"path": "lib/pages/home_page.dart",
"chars": 16357,
"preview": "import 'dart:async';\nimport 'dart:io';\n\nimport 'package:flutter/material.dart';\nimport 'package:network_info_plus/networ"
},
{
"path": "lib/pages/host_scan_page/host_scan_bloc/host_scan_bloc.dart",
"chars": 6049,
"preview": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:freezed"
},
{
"path": "lib/pages/host_scan_page/host_scan_bloc/host_scan_event.dart",
"chars": 269,
"preview": "part of 'host_scan_bloc.dart';\n\n@freezed\nabstract class HostScanEvent with _$HostScanEvent {\n const factory HostScanEve"
},
{
"path": "lib/pages/host_scan_page/host_scan_bloc/host_scan_state.dart",
"chars": 515,
"preview": "part of 'host_scan_bloc.dart';\n\n@freezed\nabstract class HostScanState with _$HostScanState {\n factory HostScanState.ini"
},
{
"path": "lib/pages/host_scan_page/host_scan_page.dart",
"chars": 723,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:vernet/injectio"
},
{
"path": "lib/pages/host_scan_page/widgets/host_scan_widget.dart",
"chars": 4642,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:flutter_bloc/flutter_blo"
},
{
"path": "lib/pages/isp_page/bloc/isp_page_bloc.dart",
"chars": 1229,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:freezed_annotation/freezed_annotation.dart';\nimport 'package:injectable"
},
{
"path": "lib/pages/isp_page/bloc/isp_page_event.dart",
"chars": 283,
"preview": "part of 'isp_page_bloc.dart';\n\n@freezed\nclass IspPageEvent with _$IspPageEvent {\n const factory IspPageEvent.started(Sp"
},
{
"path": "lib/pages/isp_page/bloc/isp_page_state.dart",
"chars": 350,
"preview": "part of 'isp_page_bloc.dart';\n\n@freezed\nclass IspPageState with _$IspPageState {\n const factory IspPageState.initial() "
},
{
"path": "lib/pages/isp_page/isp_page.dart",
"chars": 972,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:speed_test_dart"
},
{
"path": "lib/pages/isp_page/isp_page_widget.dart",
"chars": 5305,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_map/flu"
},
{
"path": "lib/pages/location_consent_page.dart",
"chars": 2706,
"preview": "import 'dart:io';\n\nimport 'package:flutter/material.dart';\nimport 'package:permission_handler/permission_handler.dart';\n"
},
{
"path": "lib/pages/network_troubleshoot/port_scan_page.dart",
"chars": 20443,
"preview": "import 'dart:async';\n\nimport 'package:flutter/material.dart';\nimport 'package:network_tools_flutter/network_tools_flutte"
},
{
"path": "lib/pages/ping_page/bloc/ping_bloc.dart",
"chars": 469,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:freezed_annotation/freezed_annotation.dart';\n\npart 'ping_event.dart';\np"
},
{
"path": "lib/pages/ping_page/bloc/ping_event.dart",
"chars": 173,
"preview": "part of 'ping_bloc.dart';\n\n@freezed\nclass PingEvent with _$PingEvent {\n const factory PingEvent.startPing() = StartPing"
},
{
"path": "lib/pages/ping_page/bloc/ping_state.dart",
"chars": 293,
"preview": "part of 'ping_bloc.dart';\n\n@freezed\nclass PingState with _$PingState {\n const factory PingState.initial() = _Initial;\n "
},
{
"path": "lib/pages/ping_page/ping_page.dart",
"chars": 3854,
"preview": "import 'dart:async';\nimport 'dart:io';\n\nimport 'package:dart_ping/dart_ping.dart';\nimport 'package:flutter/material.dart"
},
{
"path": "lib/pages/port_scan_page/port_scan_bloc/port_scan_bloc.dart",
"chars": 1026,
"preview": "import 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:freezed_annotation/freezed_annotation.dart';\nimport 'pa"
},
{
"path": "lib/pages/port_scan_page/port_scan_bloc/port_scan_event.dart",
"chars": 259,
"preview": "part of 'port_scan_bloc.dart';\n\n@freezed\nclass PortScanEvent with _$PortScanEvent {\n const factory PortScanEvent.initia"
},
{
"path": "lib/pages/port_scan_page/port_scan_bloc/port_scan_state.dart",
"chars": 461,
"preview": "part of 'port_scan_bloc.dart';\n\n@freezed\nclass PortScanState with _$PortScanState {\n factory PortScanState.initial() = "
},
{
"path": "lib/pages/settings_page.dart",
"chars": 9540,
"preview": "import 'package:flutter/material.dart';\nimport 'package:in_app_review/in_app_review.dart';\nimport 'package:package_info_"
},
{
"path": "lib/providers/dark_theme_provider.dart",
"chars": 777,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter/scheduler.dart';\nimport 'package:vernet/helper/dark_them"
},
{
"path": "lib/providers/internet_provider.dart",
"chars": 1073,
"preview": "class InternetProvider {\n InternetProvider.fromMap(Map<String, dynamic> json)\n : _isp = json['isp'] as String,\n "
},
{
"path": "lib/repository/drift/device_repository.dart",
"chars": 2304,
"preview": "import 'package:drift/drift.dart';\nimport 'package:injectable/injectable.dart';\nimport 'package:vernet/database/database"
},
{
"path": "lib/repository/drift/scan_repository.dart",
"chars": 2150,
"preview": "import 'package:drift/drift.dart';\nimport 'package:injectable/injectable.dart';\nimport 'package:vernet/database/database"
},
{
"path": "lib/repository/notification_service.dart",
"chars": 8134,
"preview": "import 'dart:async';\nimport 'dart:io';\n\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter_local_notifica"
},
{
"path": "lib/repository/repository.dart",
"chars": 84,
"preview": "abstract class Repository<T> {\n Future<List<T>> getList();\n Future<T> put(T t);\n}\n"
},
{
"path": "lib/services/impls/device_scanner_service.dart",
"chars": 3700,
"preview": "import 'package:flutter/foundation.dart';\nimport 'package:injectable/injectable.dart';\nimport 'package:network_tools_flu"
},
{
"path": "lib/services/scanner_service.dart",
"chars": 245,
"preview": "import 'package:vernet/database/drift/drift_database.dart';\n\nabstract class ScannerService {\n Stream<DeviceData> startN"
},
{
"path": "lib/ui/adaptive/adaptive_circular_progress_bar.dart",
"chars": 409,
"preview": "import 'package:flutter/material.dart';\nimport 'package:vernet/values/globals.dart' as globals;\n\nclass AdaptiveCircularP"
},
{
"path": "lib/ui/adaptive/adaptive_dialog.dart",
"chars": 1852,
"preview": "import 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:provider/provider.dart'"
},
{
"path": "lib/ui/adaptive/adaptive_dialog_action.dart",
"chars": 917,
"preview": "import 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\n\nclass AdaptiveDialogAction extends Sta"
},
{
"path": "lib/ui/adaptive/adaptive_list.dart",
"chars": 2143,
"preview": "import 'dart:io';\n\nimport 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:prov"
},
{
"path": "lib/ui/adaptive/adaptive_radio.dart",
"chars": 763,
"preview": "import 'dart:io';\nimport 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\n\nclass AdaptiveRadioB"
},
{
"path": "lib/ui/base_settings_dialog.dart",
"chars": 2498,
"preview": "import 'dart:io';\n\nimport 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:vern"
},
{
"path": "lib/ui/custom_tile.dart",
"chars": 459,
"preview": "import 'package:flutter/material.dart';\n\nclass CustomTile extends StatelessWidget {\n const CustomTile({super.key, requi"
},
{
"path": "lib/ui/external_link_dialog.dart",
"chars": 890,
"preview": "import 'package:flutter/material.dart';\nimport 'package:vernet/helper/utils_helper.dart';\nimport 'package:vernet/ui/adap"
},
{
"path": "lib/ui/popular_chip.dart",
"chars": 617,
"preview": "import 'package:flutter/material.dart';\n\nclass PopularChip extends StatelessWidget {\n const PopularChip({super.key, req"
},
{
"path": "lib/ui/settings_dialog/custom_subnet_dialog.dart",
"chars": 982,
"preview": "import 'package:flutter/material.dart';\nimport 'package:vernet/main.dart';\nimport 'package:vernet/ui/base_settings_dialo"
},
{
"path": "lib/ui/settings_dialog/first_subnet_dialog.dart",
"chars": 1352,
"preview": "import 'package:flutter/material.dart';\nimport 'package:vernet/main.dart';\nimport 'package:vernet/ui/base_settings_dialo"
},
{
"path": "lib/ui/settings_dialog/internet_dialog.dart",
"chars": 1,
"preview": "\n"
},
{
"path": "lib/ui/settings_dialog/last_subnet_dialog.dart",
"chars": 1346,
"preview": "import 'package:flutter/material.dart';\nimport 'package:vernet/main.dart';\nimport 'package:vernet/ui/base_settings_dialo"
},
{
"path": "lib/ui/settings_dialog/ping_count_dialog.dart",
"chars": 1222,
"preview": "import 'package:flutter/material.dart';\nimport 'package:vernet/main.dart';\nimport 'package:vernet/ui/base_settings_dialo"
},
{
"path": "lib/ui/settings_dialog/socket_timeout_dialog.dart",
"chars": 1270,
"preview": "import 'package:flutter/material.dart';\nimport 'package:vernet/main.dart';\nimport 'package:vernet/ui/base_settings_dialo"
},
{
"path": "lib/ui/settings_dialog/theme_dialog.dart",
"chars": 2259,
"preview": "import 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:provider/provider.dart'"
},
{
"path": "lib/ui/speed_test_dialog.dart",
"chars": 8628,
"preview": "import 'dart:async';\nimport 'dart:math';\n\nimport 'package:flutter/material.dart';\nimport 'package:speed_test_dart/classe"
},
{
"path": "lib/ui/speedometer.dart",
"chars": 1664,
"preview": "import 'package:flutter/material.dart';\nimport 'package:syncfusion_flutter_gauges/gauges.dart';\nimport 'package:vernet/u"
},
{
"path": "lib/utils/custom_axis_renderer.dart",
"chars": 2361,
"preview": "import 'package:syncfusion_flutter_gauges/gauges.dart';\n\nclass CustomAxisRenderer extends RadialAxisRenderer {\n CustomA"
},
{
"path": "lib/utils/device_util.dart",
"chars": 925,
"preview": "import 'dart:io';\n\nimport 'package:flutter/material.dart';\nimport 'package:vernet/database/drift/drift_database.dart';\n\n"
},
{
"path": "lib/values/globals.dart",
"chars": 28,
"preview": "bool testingActive = false;\n"
},
{
"path": "lib/values/keys.dart",
"chars": 2051,
"preview": "import 'package:flutter/material.dart';\n\nenum WidgetKey implements Comparable<WidgetKey> {\n thisDeviceTileIconButton('t"
},
{
"path": "lib/values/strings.dart",
"chars": 1358,
"preview": "class StringValue {\n static const String firstSubnet = 'First Subnet';\n static const String firstSubnetDesc =\n 'S"
}
]
// ... and 93 more files (download for full content)
About this extraction
This page contains the full source code of the osociety/vernet GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 293 files (847.3 KB), approximately 213.3k tokens, and a symbol index with 448 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.