Planet Collab

🔒
❌ About FreshRSS
There are new articles available, click to refresh the page.
Today — October 6th 2022Your RSS feeds

Linux – Count number of files in a directory

October 6th 2022 at 05:25

Using the current path ./:

$ ls ./sh_cap_compared/ | wc -l

22

Using absolute path:

$ ls /home/brendan.choi/demo_capturencompare//sh_cap_compared | wc -l

22

Yesterday — October 5th 2022Your RSS feeds

You shall not migrate to Teams!!

October 5th 2022 at 22:28
By: LuisR
So… you spend the last months planning and making a Pilot migration from SfB to Teams for a customer. 48 hours before the big day you think you have all ready until the moment you try the most infamous command to migrate SfB users to Teams… Move-CsUser -Target sipfed.online.lync.com -BypassAudioConferencingCheck -UseOAuth -Verbose -userlist “someTextFile with […]
Before yesterdayYour RSS feeds

Upgrade Windows 10 to Windows 11 (Unsupported old laptop) (in simple 6 steps)

October 1st 2022 at 04:43

I am rich enough to afford a latest $5K laptop with the fastest Intel or AMD CPUs and graphics card. But, my main home laptop for the last 5 years, has been an old Asus laptop with Intel(R) Core(TM) i7-2670QM CPU (Gen 2), which I purchased from my colleague for 50 bucks five years ago. I have been running Windows 10 for years and this being an Engineer’s laptop, the OS have been wiped once or twice every year for the last 5 years. I still think there’s a plenty of life left in this old boy and decided to upgrade it to Windows 11.

Looking at the online articles and some YouTube videos, I was able to upgrade this old boy to run on Windows 11. Here are simple steps to give your old laptop/desktop another 2-4 years back.

Step 1. Go to Microsoft official site and download Windows 11 ISO file.

Download Windows 11 (microsoft.com)

Step 2. Change your registry as shown below:

Update registry

Step 3. Run a PowerShell script

AveYo’s skip_tpm_check.cmd file. Simply copy the raw content and save it as “skip_tpm_check.cmd” file. Make sure it ends with .cmd, not .txt.

https://github.com/AveYo/MediaCreationTool.bat/blob/main/bypass11/Skip_TPM_Check_on_Dynamic_Update.cmd

Step 4. Run the cmd script created in step 3.

Step 5. Open Windows 11 ISO file and double-click on the setup file.

Step 6. Follow the Windows prompt to complete the installation and whala!

Windows 11 Desktop

Windows 11 – How to install youtube-dl and ffmpeg, and download your favorite music from YouTube (in 4 simple steps)

October 1st 2022 at 04:15

Step 1. On Windows PowerShell with Administrator elevation, install chocolatey by simply copying and pasting below:

Set-ExecutionPolicy Bypass -Scope Process -Force; `
iex ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1’))

Step 2. On Windows PowerShell with Administrator elevation, Install youtube-dl and ffmpeg

PS C:> choco install -y youtube-dl ffmpeg
Chocolatey v1.1.0
…[output ommitted]

Step 3. Check youtube-dl version
PS C:> youtube-dl –version
2021.12.17

Step 4. Change directory to your Music folder and download your favouriate music from YouTube.
PS C:> cd C:\Users\brendan\Music
PS C:\Users\brendan\Music> youtube-dl.exe -x –audio-format mp3 https://www.youtube.com/watch?v=69H6GTTt-WI
69H6GTTt-WI: Downloading webpage
69H6GTTt-WI: Downloading player a336babc
[download] Destination: Billboard Hot 100 This Week – Ed Sheeran, Adele, Justin Bieber, Bruno Mars, Maroon 5, Rihanna,Sia-69H6GTTt-WI.webm
[download] 77.3% of 687.41MiB at 63.95KiB/s ETA 03:02:51

Python – Check if a directories and files exists, count the number of files and validate your code

September 21st 2022 at 05:44

Create two directories and two files in each.

[brendan.choi@sa1plauto01 ~]$ mkdir directory1
[brendan.choi@sa1plauto01 ~]$ cd directory1
[brendan.choi@sa1plauto01 directory1]$ touch f1.txt f3.txt
[brendan.choi@sa1plauto01 directory1]$ ls
f1.txt  f3.txt
[brendan.choi@sa1plauto01 ~]$ mkdir directory2
[brendan.choi@sa1plauto01 directory2]$ touch f2.txt, f4.txt
[brendan.choi@sa1plauto01 directory2]$ ls
f2.txt, f4.txt

$$$ create the directory1 and directory2 using Python code if they don’t exist.


import os
path = os.getcwd()
dir_name = "directory1"
path = os.path.join(path, dir_name)

dir_name = "directory2"
path = os.path.join(path, dir_name)
os.makedirs(path, exist_ok=True)

Open your python console:

# Get the directory path

>>> import os
>>> path = os.getcwd()
>>> print(path)
/home/bchoi/

# Create new directory path

>>> dir1 = path + "/directory1"
>>> print(dir1)
/home/bchoi/directory1
# Check if the directory exists
>>> isdir1 = os.path.isdir(dir1)
>>> print(isdir1)
True
>>> dir2 = path + "/directory2"
>>> print(dir2)
/home/bchoi/directory2
>>> isdir2 = os.path.isdir(dir2)
>>> print(isdir2)
True

# Count the number of files in a directory

>>> import os
>>> count1 = 0
>>> for path in os.scandir(dir1):
...     if path.is_file():
...         count1 += 1
...
>>> print(count1)
2
>>> count2 = 0
>>> for path in os.scandir(dir2):
...     if path.is_file():
...         count2 += 1
...
>>> print(count2)
2

On IDE or notepad, write the full script.

# Checks if directory exists and the number of file counts.

# No directory, exit the app. File count do not match, exit the app.

[bchoi@ ~]$ nano dir_file_check.py

import os
path = os.getcwd()

dir1 = path + "/directory1"
dir2 = path + "/directory2"

count1 = 0
count2 = 0
isdir1 = os.path.isdir(dir1)
isdir2 = os.path.isdir(dir2)

if isdir1 == True:
    print(f"Directory \'{dir1}\' exists.")
    for path in os.scandir(dir1):
        if path.is_file():
            count1 += 1
    print("File count 1 =", count1)  
    print("-"*79)
    if isdir2 == True:
        print(f"Directory \'{dir2}\' exists.")
        for path in os.scandir(dir2):
            if path.is_file():
                count2 += 1
        print("File count 2 = ", count2)
        print("-"*79)
        if count1 == count2:
            print("File counts checked!")
            print("-"*79)
        else:
            print("File count DOES NOT MATCH! Exiting.")
            exit()
    else:
        print(f"Sorry, the directory \'{dir2}\' DOES NOT exist. Exiting.")
        exit()
else:
    print(f"Sorry, the directory \'{dir1}\' DOES NOT exist. Exiting.")
    exit()

Run the script to test your application.

$ python dir_file_check.py

Scenario 1: [both directory1 & directory2 exists, and both file counts are 2 and match]

[bchoi@ ~]$ python dir_file_check.py

Directory '/home/brendan.choi/directory1' exists.
File count 1 = 2
-------------------------------------------------------------
Directory '/home/brendan.choi/directory2' exists.
File count 2 =  2
-------------------------------------------------------------
File counts checked!
-------------------------------------------------------------

Scenario 2: [both directory1 & directory2 exists, and the file counts do not match]

[bchoi@ ~]$ touch directory1/f5.txt
[bchoi@ ~]$ ls directory1
f1.txt  f3.txt  f5.txt

[bchoi@ ~]$$ ls directory2
f2.txt,  f4.txt
[bchoi@ ~]$ python dir_file_check.py
Directory '/home/brendan.choi/directory1' exists.
File count 1 = 3
-------------------------------------------------------------
Directory '/home/brendan.choi/directory2' exists.
File count 2 =  2
-------------------------------------------------------------
File count DOES NOT MATCH! Exiting.

Scenario 3: [directory1 exists cut no directory2 , and the file counts match]

[bchoi@ ~]$  mv directory2 directory200

[bchoi@ ~]$  cd directory1
[bchoi@ ~]$ directory1]$ ls
f1.txt  f3.txt  f5.txt
[bchoi@ ~]$ directory1]$ rm f5.txt
[bchoi@ ~]$ directory1]$ cd ..

[bchoi@ ~]$ ls directory*
directory1:
f1.txt  f3.txt

directory200:
f2.txt,  f4.txt

Python – a combined scan and ping tool

September 20th 2022 at 02:15

While working, there was a need for a simple port scan and ping tool in one.

Step 1: Create “ip_addresses.txt” file and place it in the same directory (folder) with your code:

192.168.100.21

192.168.100.22

192.168.200.21

Step 2: Write the code. This is the python code, ping_scan01.py:

import os
import socket

# Ping (connectivity) test to all IPs in ip_addresses.txt file.
# Note: "If port scanning or ICMP is disabled in your environment, please comment out this ping & scan tool."

def ping3(ip):
    rep = os.system('ping -c 3 ' + ip)
    if rep == 0:
        print("Device is reachable" ,ip)
        print("-"*79)
    else:
        print("Device is offline or icmp filtered." ,ip)
        print("-"*79)

with open("./ip_addresses.txt", "r") as ip_addresses:
    for ip_add in ip_addresses:
        ip = ip_add.strip()
        dest = (ip, 22)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
                sock.settimeout(3)
                connection = sock.connect(dest)
                print(f"On {ip} Port 22 is open!")
                print("- "*20)
                ping3(ip)
        except:
            print(f"On {ip}, port 22 is closed.")
            print("- "*20)
            ping3(ip)

Step 3: Run your code. This is the result:

[bchoi@ubuntu20 tools_testing]$ python3 ping_scan01.py
On 192.168.100.21 Port 22 is open!
- - - - - - - - - - - - - - - - - - - -
PING 192.168.100.21 (192.168.100.21) 56(84) bytes of data.
64 bytes from 192.168.100.21: icmp_seq=1 ttl=245 time=4.15 ms
64 bytes from 192.168.100.21: icmp_seq=2 ttl=245 time=4.09 ms
64 bytes from 192.168.100.21: icmp_seq=3 ttl=245 time=4.59 ms

--- 192.168.100.21 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 4.091/4.277/4.591/0.222 ms
Device is reachable 192.168.100.21
-------------------------------------------------------------------------------
On 192.168.100.22 Port 22 is open!
- - - - - - - - - - - - - - - - - - - -
PING 192.168.100.22 (192.168.100.22) 56(84) bytes of data.
64 bytes from 192.168.100.22: icmp_seq=1 ttl=245 time=3.12 ms
64 bytes from 192.168.100.22: icmp_seq=2 ttl=245 time=3.27 ms
64 bytes from 192.168.100.22: icmp_seq=3 ttl=245 time=3.29 ms

--- 192.168.100.22 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.119/3.225/3.289/0.075 ms
Device is reachable 192.168.100.22
-------------------------------------------------------------------------------
On 192.168.200.21, port 22 is closed.
- - - - - - - - - - - - - - - - - - - -
PING 192.168.200.21 (192.168.200.21) 56(84) bytes of data.

--- 192.168.200.21 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2082ms

Device is offline or icmp filtered. 192.168.200.21
-------------------------------------------------------------------------------

Have a pythonic day! 🙂

New licensing requirements for Teams resource accounts (AA/CQ)

September 1st 2022 at 10:08
By: LuisR
Just noticed this MS document updated 2 days ago.Before you only needed to assign Virtual Users licensing to resource accounts that: (1) needed to have a phone number, (2) needed to transfer calls to PSTN number. They even mention that twice (!): “Each resource account must be assigned a Microsoft Teams Phone Resource Account license […]

FTP or SFTP file transfer to your ASR1001X router

August 29th 2022 at 09:17

This is just a handy lookup for FTP/SFTP file transfer between the Linux server and Network devices.

[bchoi@cenos9 ftp]$ pwd
/home/bchoi/ftp
[bchoi@cenos9 ftp]$ ls
asr1000-rommon.173-1r.SPA.pkg asr1001x-universalk9.17.06.03a.SPA.bin n3000-uk9.6.0.2.U6.2a.bin

SYD1ASR1001_01# copy ftp://[FTP_USERNAME_HERE]:[FTP_PASSWORD_HERE]@172.131.131.39/asr1001x-universalk9.17.06.03a.SPA.bin bootflash:

==================

[bchoi@cenos9 sftp]$ pwd
/home/bchoi/sftp
[bchoi@cenos9 sftp]$ ls
asr1000-rommon.173-1r.SPA.pkg asr1001x-universalk9.17.06.03a.SPA.bin n3000-uk9.6.0.2.U6.2a.bin

SYD1ASR1001_02# copy sftp://[SFTP_USERNAME_HERE]:[SFTP_PASSWORD_HERE]@10.114.111.39/upload/asr1001x/asr1001x-universalk9.17.06.03a.SPA.bin bootflash:

Get CVE information in .json or .csv by making Cisco PSIRT OpenVuln API calls

August 8th 2022 at 04:40

Cisco has been providing Cisco PSIRT OpenVuln API for Cisco Engineers and Developers, let’s create a client key and password to collect the latest CVEs available in JSON or .csv format so we can use this information to do an automated bug scrub.

Useful URL:

Cisco API Console: https://apiconsole.cisco.com/

Cisco PSIRT GitHub: https://github.com/CiscoPSIRT/openVulnAPI

Cisco PSIRT OpenVuln API Features:

Accelerate Cisco Security Vulnerability Assessments

  • Automate Cisco IOS and IOS-XE Software Assessments.
  • Interact with Cisco IOS Software Checker.
  • Reduce time to remediation.

Customize Cisco Vulnerability Notifications

  • Keep-up with Cisco security advisory publications.
  • Organize notifications by product and severity.
  • Customize the Cisco security vulnerability notifications.

Use Open Security Standards

  • Common Vulnerability Reporting Framework (CVRF)
  • Common Vulnerability Scoring System (CVSS)
  • Common Vulnerability and Exposures (CVE)
  • Common Weakness Enumeration (CWE)

Follow the steps to get the data you need from Cisco PSIRT database. Check your Linux OS type, install pip3 and then install openVulnQuery on your Linux machine

# Step 1: Check your Linux Server version

[jdoe@f33sn1 ~]$ cat /etc/*release

CentOS Stream release 9

NAME=”CentOS Stream”

VERSION=”9″

ID=”centos”

ID_LIKE=”rhel fedora”

VERSION_ID=”9″

PLATFORM_ID=”platform:el9″

PRETTY_NAME=”CentOS Stream 9″

ANSI_COLOR=”0;31″

LOGO=”fedora-logo-icon”

CPE_NAME=”cpe:/o:centos:centos:9″

HOME_URL=”https://centos.org/”

BUG_REPORT_URL=”https://bugzilla.redhat.com/”

REDHAT_SUPPORT_PRODUCT=”Red Hat Enterprise Linux 9″

REDHAT_SUPPORT_PRODUCT_VERSION=”CentOS Stream”

CentOS Stream release 9

CentOS Stream release 9

# Step 2: Install PIP3 on your server

[jdoe@f33sn1 ~]$ sudo yum install python3-pip

Note: If your Linux already has it, you will get a similar message as below:

[jdoe@f33sn1 ~]$ sudo yum install python3-pip

[sudo] password for brendan.choi:

Last metadata expiration check: 1:43:48 ago on Mon 08 Aug 2022 09:40:38.

Package python3-pip-21.2.3-6.el9.noarch is already installed.

Dependencies resolved.

Nothing to do.

Complete!

# Step 3: Check your Python 3 installation location

[jdoe@f33sn1 ~]$ which python3

/usr/bin/python3

# Step 4: Install openVulnQuery library using pip3 command

[jdoe@f33sn1 ~]$ sudo pip3 install openVulnQuery

WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install –user` instead.

Collecting openVulnQuery

  Downloading OpenVulnQuery-1.31-py3-none-any.whl (22 kB)

Collecting argparse>=1.4.0

  Downloading argparse-1.4.0-py2.py3-none-any.whl (23 kB)

Collecting requests>=2.10.0

  Downloading requests-2.28.1-py3-none-any.whl (62 kB)

     |████████████████████████████████| 62 kB 1.9 MB/s

Collecting urllib3<1.27,>=1.21.1

  Downloading urllib3-1.26.11-py2.py3-none-any.whl (139 kB)

     |████████████████████████████████| 139 kB 14.5 MB/s

Collecting charset-normalizer<3,>=2

  Downloading charset_normalizer-2.1.0-py3-none-any.whl (39 kB)

Collecting idna<4,>=2.5

  Downloading idna-3.3-py3-none-any.whl (61 kB)

     |████████████████████████████████| 61 kB 9.1 MB/s

Collecting certifi>=2017.4.17

  Downloading certifi-2022.6.15-py3-none-any.whl (160 kB)

     |████████████████████████████████| 160 kB 20.3 MB/s

Installing collected packages: argparse, urllib3, charset-normalizer, idna, certifi, requests, openVulnQuery

Successfully installed argparse-1.4.0 certifi-2022.6.15 charset-normalizer-2.1.0 idna-3.3 openVulnQuery-1.31 requests-2.28.1 urllib3-1.26.11

# Step 5: Register an application on Cisco APIConsole page

Go to the following URL and register your client ID and keys:

https://apiconsole.cisco.com/apps/register

# Step 6: Enter the Client ID and Secret

[jdoe@f33sn1 ~]$ pip3 show openVulnQuery

Name: OpenVulnQuery

Version: 1.31

Summary: A python-based module(s) to query the Cisco PSIRT openVuln API.

Home-page: https://github.com/CiscoPSIRT/openVulnAPI/tree/master/openVulnQuery

Author: Omar Santos

Author-email: os@cisco.com

License: The MIT License (MIT)

Location: /usr/local/lib/python3.9/site-packages

Requires: argparse, requests

Required-by:

[jdoe@f33sn1 ~]$ cd /usr/local/lib/python3.9/site-packages

[jdoe@f33sn1 site-packages]$ cd openVulnQuery/

[jdoe@f33sn1 openVulnQuery]$ ls

__init__.py  _library  main.py  __pycache__

[jdoe@f33sn1 openVulnQuery]$ ls _library/

advisory.py  authorization.py  cli_api.py  _compatibility.py  config.py  constants.py  __init__.py  main.py  __pycache__  query_client.py  rest_api.py  utils.py

[jdoe@f33sn1 openVulnQuery]$ cd _library/

[jdoe@f33sn1 _library]$ nano config.py

[jdoe@f33sn1 _library]$ sudo nano config.py

[sudo] password for jdoe: ************

Now enter the Client_ID and Client_Secret.

# There are four prerequisites needed before a user can initiate the API service calls and obtain access to the underlying Cisco security vulnerability information.

#  – Sign-in with your CCO ID

#  – Register a client application to create a “unique client identifier” that will identify your client application to the Cisco Token services. Registration creates the client credentials along>

#  – Get Access Tokens – utilize Cisco’s Token services to acquire an OAuth v2.0 access-token(s).

#  – Make API Calls

# Enter your client ID and client secret below.

CLIENT_ID = “dkw36kjh72fr5hj4ncrdea8t”

CLIENT_SECRET = “vgfUvU2njz95TJdZkN8pDRsr”

REQUEST_TOKEN_URL = “https://cloudsso.cisco.com/as/token.oauth2&#8221;

API_URL = https://api.cisco.com/security/advisories

# Step 7: Make a test openVulnQuery

[jdoe@f33sn1 ~]$cd ~

[jdoe@f33sn1 ~]$ pwd

/home/jdoe

[jdoe@f33sn1 ~]$ mkdir my_openVulnQuery

[jdoe@f33sn1 ~]$ cd my_openVulnQuery/

7a. Make a blank query to see the options

[jdoe@f33sn1 ~]$ openVulnQuery

usage: openVulnQuery [-h]

                     (–all | –advisory <advisory-id> | –cve <CVE-id> | –latest number | –severity [critical, high, medium, low] | –year year | –product product_name | –ios_xe iosxe_version | –ios ios_version | –nxos nxos_version | –aci aci_version)

                     [–csv filepath | –json filepath] [–first_published YYYY-MM-DD:YYYY-MM-DD | –last_published YYYY-MM-DD:YYYY-MM-DD] [-c] [-f  […]]

                     [–user-agent string] [–config filepath]

openVulnQuery: error: one of the arguments –all –advisory –cve –latest –severity –year –product –ios_xe –ios –nxos –aci is required

Note: You may run into the following socket and max retry errors. To resolve this problem, you may have to restart the OS or reinstall openssl.

… requests.exceptions.SSLError: HTTPSConnectionPool(host=’cloudsso.cisco.com’, port=443): Max retries exceeded with url: /as/token.oauth2?client_id=dkw36kjh75fr2hj8ncrdea4t&client_secret=vgfUvU2njz87TJdZkN9pDRsr (Caused by SSLError(SSLError(1, ‘[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled (_ssl.c:1129)’)))

7b. Make a query for the latest 5 CVES

[jdoe@f33sn1 my_openVulnQuery]$ openVulnQuery –latest 5 -f sir cves

[

    {

        “cves”: [

            “CVE-2022-20816”

        ],

        “sir”: “Medium”

    },

    {

        “cves”: [

            “CVE-2022-20820”,

            “CVE-2022-20852”

        ],

        “sir”: “Medium”

    },

    {

        “cves”: [

            “CVE-2022-20914”

        ],

        “sir”: “Medium”

    },

    {

        “cves”: [

            “CVE-2022-20869”

        ],

        “sir”: “Medium”

    },

    {

        “cves”: [

            “CVE-2022-20827”,

            “CVE-2022-20841”,

            “CVE-2022-20842”

        ],

        “sir”: “Critical”

    }

7c. Now save the files into either .json or .csv file

][jdoe@f33sn1 my_openVulnQuery]$  openVulnQuery –latest 5 -f sir cves bug_ids product_names –json data_20220808_5.json

[jdoe@f33sn1 my_openVulnQuery]$  openVulnQuery –latest 50 -f sir cves bug_ids product_names –json data_20220808_50.json

[jdoe@f33sn1 my_openVulnQuery]$  openVulnQuery –latest 100 -f sir cves bug_ids product_names –json data_20220808_100.json

[jdoe@f33sn1 my_openVulnQuery]$  openVulnQuery –latest 100 -f sir cves bug_ids product_names –csv data_20220808_100.csv

[jdoe@f33sn1 my_openVulnQuery]$ ls -lh

total 576K

-rw-r–r–. 1 jdoe jdoe 177K Aug  8 12:22 data_20220808_100.csv

-rw-r–r–. 1 jdoe jdoe 251K Aug  8 12:19 data_20220808_100.json

-rw-r–r–. 1 jdoe jdoe 137K Aug  8 12:07 data_20220808_50.json

-rw-r–r–. 1 jdoe jdoe 1.5K Aug  8 12:07 data_20220808_5.json

# 8. Finally, use different combinations of the options to pull all of the required information.

 openVulnQuery –latest 10 -f sir cves vuln_bug_ids full_product_name_list –json data_20220805.json

usage: openVulnQuery [-h]

                     (–all | –advisory <advisory-id> | –cve <CVE-id> | –latest number | –severity [critical, high, medium, low] | –year year | –product product_name | –ios_xe iosxe_version | –ios ios_version | –nxos nxos_version | –aci aci_version)

                     [–csv filepath | –json filepath] [–first_published YYYY-MM-DD:YYYY-MM-DD | –last_published YYYY-MM-DD:YYYY-MM-DD] [-c] [-f  […]] [–user-agent string]

                     [–config filepath]

openVulnQuery: error: argument -f/–fields: invalid choice: ‘vuln_bug_ids’ (choose from ‘advisory_id’, ‘advisory_title’, ‘bug_ids’, ‘cves’, ‘cvrfUrl’, ‘cvss_base_score’, ‘cwe’, ‘first_fixed’, ‘first_published’, ‘ios_release’, ‘ips_signatures’, ‘last_updated’, ‘product_names’, ‘publication_url’, ‘sir’, ‘summary’, ‘legacy_ips_id’, ‘legacy_ips_url’, ‘release_version’, ‘software_version’)

# 9. Export all CVE records to a json or a csv file.

To export to a .json:

[jdoe@f33sn1 ~]$ openVulnQuery –all -f sir cves advisory_id advisory_title bug_ids cves cvrfUrl cvss_base_score cwe first_fixed first_published ios_release ips_signatures last_updated product_names publication_url sir summary legacy_ips_id legacy_ips_url release_version software_version –json data_20220808_all.json

To export to a .csv:

[jdoe@f33sn1 ~]$ openVulnQuery –all -f advisory_id advisory_title bug_ids cves cvrfUrl cvss_base_score cwe first_fixed first_published ios_release ips_signatures last_updated product_names publication_url sir summary legacy_ips_id legacy_ips_url release_version software_version –csv data_20220808_all.csv

[jdoe@f33sn1 my_openVulnQuery]$ ls -lh

total 35M

-rw-r–r–. 1 jdoe jdoe  20M Aug  8 12:27 data_20220808_all.json

-rw-r–r–. 1 jdoe jdoe 177K Aug  8 12:22 data_20220808_100.csv

-rw-r–r–. 1 jdoe jdoe 251K Aug  8 12:19 data_20220808_100.json

-rw-r–r–. 1 jdoe jdoe 137K Aug  8 12:07 data_20220808_50.json

-rw-r–r–. 1 jdoe jdoe 1.5K Aug  8 12:07 data_20220808_5.json

-rw-r–r–. 1 jdoe jdoe  15M Aug  8 12:28 data_20220808_all.csv

# Recommended command:

To export to a .json:

[jdoe@f33sn1 ~]$ openVulnQuery –all -f advisory_id advisory_title bug_ids cves cvrfUrl cvss_base_score cwe first_fixed first_published ios_release ips_signatures last_updated product_names publication_url sir summary legacy_ips_id legacy_ips_url release_version software_version –json data_20220808_all.json

Now you have this information, you can go ahead and write your application to analyse and cross-check all vulnerabilities on your Cisco devices.

CNP3, un livre libre de formation sur les réseaux informatiques

Si on veut apprendre les réseaux informatiques, il existe d'innombrables articles et tutoriels sur l'Internet. Ce dernier, non seulement est une formidable réalisation de la science et de la technique des réseaux, mais c'est également un irremplaçable outil de diffusion du savoir. Mais on n'apprend pas un sujet complexe comme celui-ci en partant de zéro et en lisant les articles de Wikipédia. Cette encyclopédie est excellente quand on connait 90 % d'un sujet et qu'on a besoin de s'instruire sur les 10 % manquants. Mais ce n'est pas un outil pédagogique. L'apprenant a besoin d'une progression, d'un cadre, d'exercices bien calculés, bref, d'un livre de cours. Et, là, la situation est moins favorable.

Bien sûr, il existe des tas de livres d'apprentissage des réseaux informatiques. Outre que beaucoup sont écrits par des gens des télécoms, qui ne comprennent pas forcément bien les spécificités des réseaux d'ordinateurs, comme l'Internet, ces livres ont un défaut commun : il n'en existe à ma connaissance aucun qui soit distribué sous une licence libre. Résultat paradoxal : peu de livres expliquant le fonctionnement de l'Internet sont distribués via l'Internet.

Mais tout cela peut changer : grâce à Olivier Bonaventure et ses collègues de l'Université catholique de Louvain, un tel livre libre existe. Il se nomme Computer Networking : Principles, Protocols and Practice (CNP3 pour les intimes) et en est à sa troisième édition (voyez son site officiel). Quels sont les points importants de ce livre ?

  • Licence libre, en l'occurrence la Creative Commons Attribution-ShareAlike 3.0 (obligation de citer les auteurs et obligation de garder le livre libre, dans le même esprit que la GFDL, la licence de mon blog).
  • Livre écrit par des gens qui connaissent bien l'Internet (Olivier Bonaventure est un contributeur à l'IETF et son équipe a fait de très intéressantes recherches, notamment sur le protocole BGP).
  • Exemples et exercices réels et concrets.
  • Exemples et exercices utilisant des techniques accessibles à tous sur leur machine Unix : requêtes faites avec curl et dig, programmes en Python. Le côté pratique, expérimental, est très marqué, en contraste avec beaucoup de livres de réseau qui assomment leur lecteur avec des réseaux de Petri.

CNP3 a été réalisé en petit comité (« cathédrale » et pas « bazar », pour reprendre une terminologie fameuse d'Eric Raymond). Cela garantit l'indispensable (pour un livre de cours) homogénéité et augmente les chances que quelque chose de concret soit produit (contrairement à plein de « livres » sur Wikibooks, qui ne dépassent pas le stade de l'intention et du remue-méninges). Résultat, je ne suis pas forcément d'accord avec certains choix pédagogiques (comme ces curieuses « primitives » réseau) mais, dans ce domaine, il est crucial de choisir une ligne et de s'y tenir.

Les outils pratiques utilisés sont classiques et les formats utilisés sont naturellement des standards ouverts : texte en format ReST, images en SVG, git comme VCS et suivi des bogues (voir la liste actuelle en https://github.com/obonaventure/cnp3/issues).

J'encourage donc tous les gens qui connaissent déjà les réseaux informatiques à participer au travail de relecture du texte, et ceux qui ne connaissent pas ce sujet à l'apprendre avec le livre, pour aider à indiquer les obscurités ou les approximations que les experts ne voient pas forcément.

Le puy du faux

Le parc d'attractions du Puy du Fou est un grand succès commercial, qui attire de nombreux visiteurs. Bon, d'accord, mais le Parc Astérix aussi, et on n'écrit pas des livres à son sujet, pourtant. Mais le Puy du Fou a une autre caractéristique : ses promoteurs prétendent qu'il est historiquement fondé, et qu'on peut non seulement s'y amuser mais en plus apprendre l'histoire. Quatre historiens se sont donc associés pour aller au parc d'attraction et vérifier.

Il y a plusieurs écueils si on veut avoir un regard critique sur l'histoire tendance Puy du Fou. Il y a le risque d'une critique élitiste, faisant fi du succès populaire du parc, méprisant la vulgarisation, et estimant que l'histoire ne doit se traiter que dans de gros livres ennuyeux pour universitaires. Il y a aussi le risque du pinaillage, pointant des erreurs de détails, par exemple sur les dates, et oubliant que le Puy du Fou a une cohérence dans sa vision de l'histoire, et que c'est elle qu'il faut étudier.

C'est ce qu'ont fait les quatre auteur·es, dont au moins deux sont activement engagés dans la vulgarisation de l'histoire, notamment sur les réseaux sociaux (les deux autres aussi, peut-être, mais je ne les connais pas). Ils sont allés au Puy du Fou, ils ont apprécié les spectacles, ils ont pris des notes et ils analysent la représentation historique. S'il y a en effet d'innombrables erreurs factuelles dans les spectacles du Puy du Fou, le plus gros problème est la vision peu historique du parc : une France éternelle, gardant son identité inchangée à travers les siècles, mélange de l'idéologie de l'Ancien Régime et du roman national du XIXe siècle. Par exemple, le spectacle se déroulant en Gaule romaine présente les seuls Gaulois comme ancêtres des Français, comme si la France d'aujourd'hui n'était pas tout autant héritière des Romains. (En prime, le spectacle montre les Gaulois chrétiens et les Romains païens, ce qui ne correspond pas à la réalité de l'époque.) Les auteur·es analysent de nombreux spectacles et la plupart (je vous laisse découvrir les exceptions) présentent la même vision d'une France mythique, qui a peu de rapport avec la réalité et avec les vrais Français des différentes époques.

Critiquer, c'est facile, mais proposer est plus difficile, pourront dire les défenseurs du parc. Mais un des chapitres les plus intéressants du livre est justement celui où les auteur·es se font scénaristes et imaginent quatre spectacles qui gardent ce qu'il y a de bien au Puy du Fou (des animations de qualité et spectaculaires, avec pyrotechnie obligatoire) tout en étant plus rigoureux historiquement. Ainsi celui de l'Antiquité montre les débats et divergences entre premiers chrétiens, alors que le Puy du Fou montre le christianisme, comme il le fait de la France, comme une entité éternelle et figée.

Faut-il aller au Puy du Fou ? Là n'est pas la question. Personnellement, je n'y suis jamais allé mais le livre peut donner envie, les spectacles semblant passionnants et bien faits. Le tout est d'y aller comme à Disneyland, pour la distraction, et pas en prétendant qu'on suit un cours d'histoire.

Storage Area Network – IOPS vs throughput

August 4th 2022 at 01:56

What is IOPS?

IOPS = input/output operations per second. Measure how quickly a given storage device or medium can read & write data per second.

Dependency: type of the HDD/SSD

As of 2021, a typical HDD IOPS range is 55-180 times/ms while a typical SSD has IOPS speed of 3000 – 40000 times/ms

Note: block size affects the throughput. SQL sever logs in 64 kb blocks while Microsoft Windows OS uses 4 kb blocks, VMware ESXi uses 1 MB blocks. Small block sizes are preferred for a larger volume of smaller files for efficiency.

What is throughput?

Throughput = measures the data transfer rate to and from the storage media in megabytes per second.

bandwidth is the measurement of the total speed of data movement along your network. throughput has dependency on IOPS and packet size, also different network protocol can also alter the overall throughput.

SAS throughput max = appx. 2812 Mbps

Ethernet storage network max = appx. 12500Mbps

Fiber Channel network max = 4000 Mbps

italchemy

Cyber-attaques : l'Amérique désigne ses ennemis

On le sait, l'attribution d'une cyber-attaque (« c'est les Chinois ! ») est un exercice difficile. Il faut analyser l'attaque, parvenir à une certitude et, ensuite, assumer de révéler publiquement l'origine. Comme le répète souvent Guillaume Poupard « L'attribution, c'est politique ». Le livre de Mark Corcoral étudie cette question de l'attribution notamment sous l'angle des accusations par les États-Unis : comment se fait l'attribution publique et suivant quels méandres politiques ?

La phrase de Guillaume Poupard, citée plus haut, a un amusant double sens. Elle dit que ce n'est pas à une agence technique comme l'ANSSI d'attribuer une attaque ; cette attribution publique peut avoir des conséquences et c'est donc au pouvoir politique de prendre ses responsabilités. Mais la phrase dit aussi qu'accuser publiquement tel ou tel pays est aussi un choix politique. Plus cyniquement, on pourrait reprendre la phrase d'un collègue de Topaze : « les coupables, il vaut mieux les choisir que les chercher ». Eh oui, quand un État en accuse un autre, l'accusation n'est pas forcément sincère…

Déjà, se faire une opinion est difficile : contrairement à une attaque physique qui va forcément laisser pas mal d'indices, une cyber-attaque ne laisse pas beaucoup de traces, et celles-ci peuvent facilement être imitées (une chaine de caractères en hébreu dans un logiciel malveillant ne signifie pas forcément que c'est un coup du Mossad, il est trivial d'en copier/coller une). Et l'interprétation de ces IOC peut être délicate. J'ai entendu des analystes expliquer que, comme les opérations de la cyber-attaque étudiée prenaient place entre 9 h et 17 h, heure de Beijing, cela menait à soupçonner les Chinois, comme si l'APL était tenue aux horaires de bureau. Et même une fois qu'on a acquis une conviction, il n'est pas facile d'en convaincre des tiers puisque, presque toujours, ceux qui font l'attribution d'une attaque ne donnent aucune information concrète sur les preuves récoltées (pour ne pas donner d'informations aux ennemis, mais aussi parfois pour cacher la faiblesse des preuves).

Et une fois qu'on a son intime conviction, l'attribution publique n'est pas automatique, elle relève de choix politiques, qui peuvent évoluer. C'est ainsi qu'avant, en gros, 2014, les États-Unis ne se livraient pas à des attributions publiques, avant de changer de politique et de multiplier les accusations. (La Russie et la Chine continuent à ne pas faire d'attribution publique pour des attaques précises, même si ces deux pays dénoncent de façon très générale les cyber-attaques dont ils sont victimes. Ils insistent beaucoup sur la difficulté à produire des preuves convaincantes.) Et à partir de 2017, les attributions faites par les États-Unis ne sont plus unilatérales mais impliquent parfois des pays alliés. Le choix dépend de la culture politique de chaque pays, et de sa conviction que l'attribution publique servira à quelque chose, par exemple en terme de propagande, ou bien pour faire avancer des négociations internationales sur une certaine régulation des attaques ou encore pour intimider un adversaire (« je t'ai vu ! »). Le choix est complexe et l'auteur explique très bien les innombrables questions géopolitiques qui sont liées à l'utilisation (ou pas) de l'attribution publique. Cette analyse des raisons qui poussent à attribuer publiquement est le gros du livre.

Un ouvrage que je recommande beaucoup, pour comprendre la complexité des questions de cyber-attaques et la difficulté des décisions à prendre.

(En plus léger, l'excellente BD « Cyberfatale » tourne essentiellement autour d'une question d'attribution, comment savoir qui a fait le coup et, une fois qu'on le sait, que faire de cette information.)

Storage Area Network – IOPS vs throughput

August 4th 2022 at 01:56

What is IOPS?

IOPS = input/output operations per second. Measure how quickly a given storage device or medium can read & write data per second.

Dependency: type of the HDD/SSD

As of 2021, a typical HDD IOPS range is 55-180 times/ms while a typical SSD has IOPS speed of 3000 – 40000 times/ms

Note: block size affects the throughput. SQL sever logs in 64 kb blocks while Microsoft Windows OS uses 4 kb blocks, VMware ESXi uses 1 MB blocks. Small block sizes are preferred for a larger volume of smaller files for efficiency.

What is throughput?

Throughput = measures the data transfer rate to and from the storage media in megabytes per second.

bandwidth is the measurement of the total speed of data movement along your network. throughput has dependency on IOPS and packet size, also different network protocol can also alter the overall throughput.

SAS throughput max = appx. 2812 Mbps

Ethernet storage network max = appx. 12500Mbps

Fiber Channel network max = 4000 Mbps

Petite histoire de la mondialisation à l'usage des amateurs de chocolat

Si, comme moi, vous abusez du chocolat, ce livre va peut-être vous être désagréable : il explique l'évolution de la mondialisation pour le cas particulier du chocolat. Ce n'est pas toujours très rose.

On commence évidemment au Mexique, où les conquérants européens découvrent le chocolat (que les Aztèques consommaient sans sucre mais avec du piment) et le rapportent en Europe. La substance suit le parcours de beaucoup d'autres produits rapportés d'Amérique : méfiance (médicale, mais aussi religieuse, quelque chose d'aussi bon doit être une création du diable), engouement, snobisme (rare et cher, le chocolat pouvait être un marqueur de distinction sociale). Puis la faible production mexicaine ne suffit plus et les Européens vont commencer à cultiver le chocolat de manière plus massive. D'abord aux Antilles puis en Amérique du Sud. Mais si on veut produire beaucoup de chocolat, il ne faut pas seulement avoir beaucoup de cacaoyers, il faut aussi traiter les fèves et, à la main, c'est long et difficile. Le parcours du chocolat croise donc celui de James Watt : ses machines à vapeur permettent de commencer à mécaniser le traitement. On n'est plus à la production artisanale, le chocolat est devenu une industrie. On croise dans le livre des entrepreneurs variés, comme Menier, un des promoteurs du paternalisme.

Puis la production de chocolat passe en Afrique. Le livre suit le développement d'une production de plus en plus importante, notamment sur l'ile de São Tomé, puis sur le continent. Un nouveau problème se pose alors : la production, grâce à la mondialisation de la production et à l'industrialisation, est devenue abondante et bon marché. Il faut donc convaincre de nouveaux consommateurs, pour faire du chocolat un produit de masse. Au 19e siècle, l'industrie chocolatière est donc une des plus friandes de publicité. L'exemple le plus connu de publicité pour le chocolat est, en France, le tirailleur sénégalais de Banania.

Et dans les pays producteurs ? Les cours du cacao sur les marchés mondiaux ne sont pas stables et ces pays connaissent des alternances de prospérité et de vaches maigres. Bien des gouvernements, après l'indépendance des colonies, ont cherché à stabiliser la situation, avec des succès variables. Car, entre temps, le cacao était passé des marchés de produits physiques aux marchés financiers. Désormais, au lieu de vendre et d'acheter du cacao, on achète et on vend des titres ayant un rapport plus ou moins lointain avec le cacao. (Note au passage : quand des gens, en 2022, reprochent aux cryptomonnaies d'être « virtuelles » et « déconnectées de l'économie réelle », ils ont quelques dizaines d'années de retard. Cela fait bien longtemps que les échanges sur les marchés sont déconnectés des produits et services.)

L'auteur se penche ensuite sur les alternatives : est-ce que du chocolat bio ou équitable (ou, soyons fous, les deux à la fois) permettrait au consommateur d'avoir de meilleurs produits et aux producteurs de vivre mieux ? La question des labels est compliquée ; certains n'ont guère de valeur car ils sont spécifiques à une entreprise, qui décide des critères et fait leur « vérification ». Difficile pour le consommateur de s'y retrouver !

Bref, un livre très lisible et très pédagogique, expliquant en détail tous les aspects de la production d'une marchandise, dans un monde où c'est devenu très compliqué.

Frontières.com

Vous trouvez que la situation géopolitique sur l'Internet est compliquée ? Au moins, le livre d'Arpagian vous permettra d'avoir un tour d'horizon complet d'un certain nombre d'enjeux importants.

Ne lisez pas le quatrième de couverture, qui abuse de sensationnalisme (« les geeks-soldats de la cyber guérilla précèdent désormais les chars d'assaut »), voire d'erreurs (« la Russie construit son propre Internet »). Le livre est plus sérieux. Centré sur le rôle des frontières (pas seulement les frontières entre États, mais aussi celles qu'on s'était imaginées entre des activités que le numérique redéfinit), il a l'avantage de contenir de nombreux faits et données. Il passe en revue beaucoup de questions (sans doute trop, vu sa taille, et sans que ces questions aient de relation claire) : la privatisation, la censure, le pouvoir des GAFA, les mensonges, la cybersécurité, le succès de Léna Situations… C'est sérieux, l'auteur connait son sujet, et il ne prend pas pour agent comptant les clichés, par exemple sur le soi-disant anonymat de l'Internet.

Un livre qui peut être utile pour celle ou celui qui débute son exploration de la politique sur Internet. Vous pouvez aussi vous en faire une idée avec cet interview vidéo de l'auteur.

PS : le titre est un nom de domaine, réservé mais qui ne semble pas utilisé.

❌