I have write a PXE setup in my medium blog. If you’re interested on setting pxe boot under window and Ubuntu please refer link: https://medium.com/jacklee26/set-up-pxe-server-on-ubuntu20-04-and-window-10-e69733c1de87
Chen-Chih Tutorial page + SQA
Software Testing Setting and note
Sunday, March 20, 2022
Saturday, October 23, 2021
visual studio code is supporting online
VSCode is supporting online, you can use it by your web browser, it's great.
please access below link to : https://vscode.dev/
Saturday, September 18, 2021
WIFI knowledge
WIFI Knowledge
802.11 Association Process
1. Beacon
The access point periodically sends a beacon frame (every 100ms )to announce its presence and relay many information that is required by the stations to connect to the wireless network
STA begins the process by performing a passive or active scan. In the passive mode, the STA is listening for beacons from an access point. The beacon frame contains the BSSID which is the MAC address of the radio sourcing from the access point.
Beacon packet contains capability information and parameters.
2. Probe Request
Probe requests advertise the mobile stations supported data rates and 802.11 capabilities such as 802.11n.
A probe is sourced from the STA requesting to join a wireless network. The probe is responded by an access point using a probe response management frame. Probe request from a STA broadcasted to any access point that can respond.
3. Probe Response:
APs receiving the probe request check to see if the mobile station has at least one common supported data rate. If they have compatible data rates, a probe response is sent advertising the SSID (wireless network name), supported data rates, encryption types if required, and other 802.11 capabilities of the AP.
4. Authenticated Request
The station chooses a SSID/network from the probe responses it receives. It also checks the compatibility on encryption type. Once compatible networks are discovered the station will attempt low-level 802.11 authentication with compatible access points. The station sends a low-level 802.11 authentication frame to an AP setting the authentication to open and the sequence to 0x0001.
If you noticed in the above successful authentication frame, the Authentication Algorithm was set to Open System. There are two types of methods for authentication.
- Open System: WPA, WPA2 with no password, performs no client verification.
- Shared Key: passphrase and contains a 4-way handshake for authentication. The STA sends a request to authenticate, access point receives the request and sends back a cleartext challenge, the STA encrypts and sends another authentication request based on the cleartext challenge and then the access point compares the STA’s challenge to the text. If successful, the STA is authenticated.
5. Authenticated Response
STA can be in either two states in Authentication and Association:
- Unauthenticated or authenticated.
- Unassociated or associated.
The access point receives the authentication frame and responds to the station with authentication frame set to open indicating a sequence, If an access point receives any frame other than an authentication or probe request from a station that is not authenticated it will respond with a deauthentication frame placing the mobile into an unauthenticated an unassociated state. The station will have to begin the association process from the low level authentication step. At this point the station is authenticated but not yet associated
6. Association Request
Once the station determines which access point it would like to associate to, it will send an association request to that access point. The association request contains chosen encryption types and other compatible 802.11 capabilities.
7. Association Response
If the elements of the association request match the capabilities of the access point, it will create an Association ID for the mobile station and respond with an association response with a success message granting network access to the mobile station.
Association Response includes:
- Capabilities Information such as
- Supported Data Rates
- HT Capabilities
- HT Information such as the Primary Channel
- WMM information
WPA personal vs enterprise
DFS Dynamic Frequency Selection
If the device
is already operating on a DFS channel and radar signals are detected you will
encounter disconnection, however the connection can
be restored after a while. But you may see the change in the operating channel.
Saturday, August 7, 2021
Markdown on medium
Today I would like to shar on how to use some MD in medium, some markdown might not work the same in githb.
Write code use the command to switch:
- Windows : ctrl+alt+6
- Mac : command+ option+6
- Linux : ctrl+alt+6
https://www.piliapp.com/cool-text/strikethrough-text/
https://fsymbols.com/generators/strikethrough/
Saturday, July 31, 2021
selenium scroll
his is a HTML :
reference: https://michaeljsanders.com/2017/05/12/scrapin-and-scrollin.html
import time from selenium import webdriver from bs4 import BeautifulSoup as bs # I used Firefox; you can use whichever browser you like. browser = webdriver.Chrome() # Tell Selenium to get the URL you're interested in. browser.get("http://URLHERE.com") # Selenium script to scroll to the bottom, wait 3 seconds for the next batch of data to load, then continue scrolling. It will continue to do this until the page stops loading new data. lenOfPage = browser.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;") match=False while(match==False): lastCount = lenOfPage time.sleep(3) lenOfPage = browser.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;") if lastCount==lenOfPage: match=True # Now that the page is fully scrolled, grab the source code. source_data = browser.page_source # Throw your source into BeautifulSoup and start parsing! bs_data = bs(source_data)
Sunday, July 11, 2021
conda not found in MAC
Have you ever see an issue in MAC when Anaconda is been installed propely and the conda is place correctly but still conda will be not found. I'm going to teach you how to solve this issue:
Part1 In case you don't know how to add CONA to PATH
Note: Mac Anaonda is been save in /opt/anaconda3
1. Edit vim ~/.bash_profile
export PATH="/opt/anaconda3/bin:$PATH"
2. wq! or x! to save it
3. source ~/.bash_profile
4. you can check PATH by: echo $PATH
5 conda --version
6 open a new terminal and enter conda --version will occur command not found
Part 2 Terminal running conda
To solve this issue we basely have to just touh a file. In MAC default it uses zshrc
Method1:
1. touch ~/.zshrc
2. edit it
source ~/.bash_profile
3. save it by wq! or x!
4. open new terminal and press coda--version will fix this problem
Method2:
1. go to system preferences>user&groups>
2. unlock your setting
3 click on a username and right-click and select advance option
4. login shell changed to /bin/bash will fix this
Saturday, May 15, 2021
Selenium Xpath
Today I wants to share Xpath using selenium. Xpath is a unique tool, which is better than other finding_element. These are the following element you can use:
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
or multiply element
find_elements_by_id
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
I think to know XPath is really important.
The syntax of it is:
Xpath=//tagname[@attribute='value']
This is a HTML :
<html><body><p>Are you sure you want to do this?</p><a href="continue.html">Continue</a><a href="cancel.html">Cancel</a><form id="loginForm"><input name="username" type="text" /><input name="password" type="password" /><input name="continue" type="submit" value="Login" /><input name="continue" type="button" value="Clear" /><div class="search">This is new page<h1>Hello</h1>!!!!!</div></form></body></html>
- If you want to get the name for the username, you can try like this:
//input[@name='username']
- using chrome development tool to get xpath. The [1] is username, [2] is password ....[4]
//*[@id="loginForm"]/input[1]
//*[@id="loginForm"]//input[@name="username"]
- Full path using chrome development tool
/html/body/form/input[1]
you can see the input name for clear and login is the same "continue", if we want to get the clear button:
//input[@name='continue'][@type='button']
or
//*[@id="loginForm"]/input[4]
You can also use some function text(), or contain
If you use JUST text(), the string must be the same, else won't find it
//*[text()="str"]
//*[contains(text(),'str')]
if I want to find "continue", I can use this:
//*[text()="Continue"]
or
//*[text()="Cont"]
using (dot)
Sometimes when you used text() or contain() to find, but will not be able to find, you can use this method:
For example, this is Instagram following text, which can't find the following, you have to use this method.
//*[text()[contains(.,'str')]]
//*[contains(.,'str')]
this will search from the root to the current node.
Selenium with Xpath
inorder to use in selenium you have to use like this|:
driver.find_element_by_xpath('put-your-xpath-here').click()